对于一个项目,我想比较不同中值查找算法的运行时间。我从“Medians of Medians”开始,基本上使用了Geeks for Geeks找到的代码。
我通过与计算中位数的标准 python 方法进行比较来测试它。
if __name__ == '__main__':
arr = random.sample(range(1, 10000000000), 10000001)
arr1=arr[:] # i copied the list to make sure they both have the same starting position
t1=time.time()
print("std median", statistics.median(arr))
t2 = time.time()
print("time std median:",t2-t1)
t12 = time.time()
n = len(arr1)
k = n // 2 + 1 #median for odd number of elements
print("Med of Med:", kthSmallest(arr1, 0, n - 1, k))
t21 = time.time()
print("time med of med:", t21-t12)
由于未知的原因,我的运行时间太高而且是错误的。在大约 10 个 Mio 元素的数组中查找中位数需要以下时间:
Standard Python method: 13.28 seconds
My implementation of median of medians: 28.91 seconds
我在 Geek for Geeks 上找到的实现有问题吗?应该反过来。标准 Python 方法的运行时为O(n log n)
,Median of Medians 运行在 中O(n)
,所以它应该更快!
有谁知道我做错了什么并且可以给我一个提示如何解决它?