我对len()
函数的时间复杂度有点困惑。
我在很多不同的帖子中读过,在{python}中查找数组的长度为O(1)
,len()
函数与其他语言类似。
这怎么可能?您是否不必遍历整个数组来计算其占用的索引数量?
答案 0 :(得分:4)
您是否不必遍历整个数组来计算其占用的索引数量?
不,你没有。
在构建算法时,您通常可以随时交换空间。
例如,在创建集合时,请分配一个包含大小的单独变量。然后在向集合中添加项目时递增,在删除项目时递减它。
然后,瞧,只需访问该变量就可以在O(1)
时间内获得集合的大小。
这似乎是Python实际上做的事情,根据this page,其中指出(检查Python源代码显示这是请求大量对象大小时的操作):
Py_SIZE(o)
- 此宏用于访问Python对象的ob_size
成员。它扩展为(((PyVarObject*)(o))->ob_size)
。