是否有任何Python复杂性参考?例如,在cppreference中,对于许多函数(例如std :: array :: size或std :: array :: fill),有一个复杂性部分,用容器大小的线性或常量来描述它们的运行复杂性..
我希望在python网站上出现相同的信息,或许至少对于CPython实现.例如,在列表引用中,list.insert
我希望看到复杂性:线性 ; 我知道这种情况(和许多其他容器相关的操作)在这里,但许多其他情况不是.这里有一些例子:
什么是复杂性tuple.__le__
?似乎在比较两个大小的元组时n
,k
复杂性是关于O(min(n,k))
(然而,对于小n
的它看起来不同).
什么是复杂性random.shuffle
?它似乎是O(n)
.它也出现了复杂random.randint
的O(1)
.
__format__
字符串方法的复杂性是什么?它看起来与输入字符串的大小呈线性关系; 然而,当数也增长有关生长参数(比较("{0}"*100000).format(*(("abc",)*100000))
用("{}"*100000).format(*(("abc",)*100000))
).
我知道(a)这些问题中的每一个都可以单独回答,(b)可以查看这些模块的代码(即使有些是用C语言编写的),(c)StackExchange不是python邮件用户请求列表.所以:这不是文档功能请求,只是两个部分的问题:
你知道这样的资源是否存在吗?
如果没有,你知道要求的地方是什么,或者你能说出我不需要的地方吗?
Eevee.. 5
CPython非常适合它的算法,并且操作的时间复杂度通常是您对优秀标准库的最佳期望.
例如:
元组排序必须是O(min(n,m)),因为它通过比较元素来工作.
random.shuffle
是O(n),因为这是现代Fisher-Yates shuffle的复杂性.
.format
我想是线性的,因为它只需要通过模板字符串进行一次扫描.至于你看到的差异,CPython可能只是足够聪明,可以缓存两次使用的相同格式代码.
文档确实提到了时间复杂性,但通常只有当它不是你所期望的时候 - 例如,因为a deque
是用双向链表实现的,所以明确提到它O(n)
在中间有索引.
文档是否会受益于在任何地方都适当的时间复杂性?我不确定.文档通常通过它们应该用于的内容来构建,并且具有针对这些用例优化的实现.强调时间复杂性似乎是无用的噪音或鼓励开发人员猜测Python实现本身.
CPython非常适合它的算法,并且操作的时间复杂度通常是您对优秀标准库的最佳期望.
例如:
元组排序必须是O(min(n,m)),因为它通过比较元素来工作.
random.shuffle
是O(n),因为这是现代Fisher-Yates shuffle的复杂性.
.format
我想是线性的,因为它只需要通过模板字符串进行一次扫描.至于你看到的差异,CPython可能只是足够聪明,可以缓存两次使用的相同格式代码.
文档确实提到了时间复杂性,但通常只有当它不是你所期望的时候 - 例如,因为a deque
是用双向链表实现的,所以明确提到它O(n)
在中间有索引.
文档是否会受益于在任何地方都适当的时间复杂性?我不确定.文档通常通过它们应该用于的内容来构建,并且具有针对这些用例优化的实现.强调时间复杂性似乎是无用的噪音或鼓励开发人员猜测Python实现本身.