关于算法的时间复杂度

时间:2015-11-11 20:27:13

标签: algorithm math time-complexity computer-science

以下问题的时间复杂度是什么。

setInt

2 个答案:

答案 0 :(得分:4)

通过扩展总和的前三个术语:

enter image description here

你可以看到它只是log(log(j))的迭代总和。 由于O(j)>> O(log(j)),遵循O(log(j))>> O(log(log(j));第一项因此掩盖了所有其他术语。

因此总和为O(log(j)),这意味着时间复杂度为

enter image description here

数值试验表明,这实际上是O(n ^ 0.82 ......)。 enter image description here

答案 1 :(得分:0)

使用已编辑的代码(+=而不是=),我猜想此代码的渐近时间复杂度(假设log()和其他基本操作需要恒定时间)是Θ( n / log n )。

很容易证明循环至少需要 n / log( n +5)= n /(log n ×log 5)迭代完成,因为它计算到 n ,并且每次迭代都会使计数器增加一个严格小于log的量( n + 5)。因此,渐近时间复杂度至少Ω( n / log n )。

显示它也是O( n / log n ),因此Θ( n / log n ),看起来有点棘手。基本上,我的论点是,对于足够大的 n ,将计数器 j 从exp( k )递增到exp( k) +1)采用 C ×exp( k )/ k 迭代的顺序(对于常量 C) ≈(1 - exp(-1))/ 5,如果我没记错的话)。让 h = ceil(log( n )),将计数器从1递增到 n 因此最多需要

T = C ×(exp( h )/ h + exp( h -1)/( h -1)+ exp( h -2)/( h -2)+ ... + exp(1) / 1)

迭代。对于大型 n (以及 h ),领先的exp( h )/ h 术语应占主导地位,这样 T C 2 ×exp( h )/ h 一些常量 C 2 ,因此循环应该在O中运行(exp( h )/ h )= O( n / log n )时间。

那就是说,我承认这只是一个证明草图,我的论证中可能存在差距或错误。特别是,我实际上没有确定常量(?) C 2 的上限。 ( C 2 = C × h 显然会满足不等式,但只能产生一个O( n )运行时的上限; C 2 = C /(1 - exp(-1))会给出期望的界限,但显然太低了。)因此,我不能完全排除实际时间复杂度可能(非常轻微)更高的可能性。