【发布时间】:2018-09-13 08:17:56
【问题描述】:
比较列表中搜索算法的执行时间,我得出一个结果,list.index() 比简单的for in 快得多。根据this,它们都应该是 O(n)。我的测试中有这个结果:
简单的解决方案在 3 秒内通过了大约 350 次测试:
def linear_simple(arr):
for i in range(len(arr)):
if arr[i] == #my searched value#:
return i
索引解决方案在 3 秒内通过了所有 2000 次测试(实际上它甚至在 2 秒内完成):
def linear_index(arr):
return arr.index( #my searched value# )
所有测试数组都是随机生成的。进行了多次测试,结果相似。
这意味着index() 大约快 9 倍。为什么? index() 不是像for in 这样简单地在列表上迭代吗?
【问题讨论】:
-
list.index在 C 中实现和优化 -
Big-O 表示法是衡量复杂性(执行时间或空间使用如何根据输入大小而增长)的衡量标准,而不是有效执行时间的衡量标准,因此两个算法是
O(n)的事实并不'这并不意味着它们将花费相同的时间来执行相同的输入集。 -
@brunodesthuilliers 是的,我知道这一点。但我很少看到在相同时间复杂度内执行时间相差 9 倍。