gpt4 book ai didi

algorithm - 各种版本二分查找的大O

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:29:50 28 4
gpt4 key购买 nike

我得到了以下代码,并被告知以大 theta 表示法找到最佳和最差情况下的运行时间。

def find(a, target):
x = 0
y = len(a)
while x < y:
m = (x+y)/2
if a[m] < target:
x = m+1
elif a[m] > target:
y = m
else:
return m
return -1

我知道这段代码在最坏情况下的运行时间是O(lg(n))。但是有人问我,如果第五行从“m=(x+y)/2”改为“m=(2*x+y)/3”,运行时间会改变吗?

我的直觉是运行时间变长了一点,因为它不再像二进制搜索那样将列表切成两半,效率较低,但我不确定此时如何计算大 O

最佳答案

假设在最坏的情况下,我们正在搜索位于 N 个元素的数组中最后的元素。

第一次迭代后,列表应减少到 2N/3。

在第 2 次迭代后,列表应减少到 4N/9

...

在第 (k-1) 次迭代之后,列表应减少到 2 个元素

在第 k 次迭代后,我们最终会找到我们的候选人。

因此 N * (power(2/3,k)) = 1。

k ~ log (N) 以 1.5 为底

关于algorithm - 各种版本二分查找的大O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723900/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com