Dub*_*bby 5 arrays complexity-theory big-o time-complexity dynamic-arrays
当我们通过重复加倍实现动态数组时,我们只需创建一个新数组,它是当前数组大小的两倍并复制前面的元素,然后添加新的元素?正确?
所以为了计算复杂度,我们有1 + 2 + 4 + 8 + ....步数?正确?
但
1 + 2^1 + 2^2 + .... + 2^n = (2^(n-1) - 1) ~ O(2^n).
Run Code Online (Sandbox Code Playgroud)
但是有人给出了
1 + 2 + 4 + ... + n/4 + n/2 + n ~ O(n).
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的?为什么?谢谢
你的总和是在正确的轨道上,但你有太多的条款.:-)
当阵列达到任何2的幂时,阵列的大小将加倍.因此,如果遇到的两个最大功率是2 k,那么完成的工作是
2 0 + 2 1 + 2 2 + ... + 2 k
这是几何系列的总和,它可以用来实现
2 0 + 2 1 + 2 2 + ... + 2 k = 2 k + 1 - 1 = 2·2 k - 1
在你的分析中,你把这个总和写成n个术语,最多2 n.如果你的数组中有2 个n元素,那么这将是正确的总和,但这个指数太多了.相反,由于您的数组中包含n个元素,因此该总和中的最大项为2 lg n.插入即可
2·2 lg n - 1 = 2n - 1 =Θ(n)
因此,完成的总工作量为Θ(n),而不是Θ(2 n).
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2550 次 |
| 最近记录: |