检查排序数组上的算法

时间:2013-02-03 21:41:32

标签: algorithm big-o analysis

我有一个长度为n的排序数组,我使用线性搜索将我的值与数组中的每个元素进行比较,然后我对大小为n/2的数组执行线性搜索,然后大小为n/4n/8等,直到我对长度为1的数组进行线性搜索。在这种情况下,n是2的幂,执行的比较次数是多少?

不确定这个回答是否正确,但我认为比较的次数是

  

T(2 n )=(n / 2)+(n / 4)+ ... + 1.

我的理由是因为你必须经历每一个元素然后你继续添加它,但我仍然不确定。如果有人能指引我,我会很感激

1 个答案:

答案 0 :(得分:4)

您在问题中设置的重复有点偏离,因为如果n是输入的长度,那么您不会用2 n 表示输入的长度。相反,你可以把它写成n = 2 k 来选择k。一旦你有了这个,那么你可以这样做数学:

  • 阵列的一半大小为2 k / 2 = 2 k-1
  • 阵列四分之一的大小为2 k / 4 = 2 k-2
  • ...

如果总结所有这些值,则会得到以下结果:

  

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)。

希望这有帮助!