我有一个长度为n
的排序数组,我使用线性搜索将我的值与数组中的每个元素进行比较,然后我对大小为n/2
的数组执行线性搜索,然后大小为n/4
,n/8
等,直到我对长度为1的数组进行线性搜索。在这种情况下,n是2的幂,执行的比较次数是多少?
不确定这个回答是否正确,但我认为比较的次数是
T(2 n )=(n / 2)+(n / 4)+ ... + 1.
我的理由是因为你必须经历每一个元素然后你继续添加它,但我仍然不确定。如果有人能指引我,我会很感激
答案 0 :(得分:4)
您在问题中设置的重复有点偏离,因为如果n是输入的长度,那么您不会用2 n 表示输入的长度。相反,你可以把它写成n = 2 k 来选择k。一旦你有了这个,那么你可以这样做数学:
如果总结所有这些值,则会得到以下结果:
2 k + 2 k-1 + 2 k-2 + ... + 2 + 1 = 2 k +1 - 1
你可以通过几种方式证明这一点:你可以使用归纳法,或者使用公式来计算几何序列的总和等。这在计算机科学中经常出现,因此值得投入记忆。
这意味着如果n = 2 k ,您的算法会及时运行
2 k + 1 - 1 = 2(2 k ) - 1 = 2n - 1
因此运行时为2n - 1,即Θ(n)。
希望这有帮助!