以下问题的时间复杂度是什么。
setInt
答案 0 :(得分:4)
通过扩展总和的前三个术语:
你可以看到它只是log(log(j))
的迭代总和。
由于O(j)>> O(log(j)),遵循O(log(j))>> O(log(log(j));第一项因此掩盖了所有其他术语。
因此总和为O(log(j)),这意味着时间复杂度为
答案 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))会给出期望的界限,但显然太低了。)因此,我不能完全排除实际时间复杂度可能(非常轻微)更高的可能性。