我有循环
sum = 0 ;
for ( i = n ; i > 0; i = i/3 )
for ( j = 0 ; j < n^3 ; j++ )
sum++ ;
我必须弄清楚big theta表示法中的时间复杂度,但是第一个循环中的i / 3让我感到困惑。
答案 0 :(得分:-1)
在正常数学中,此循环永远不会终止。 O(INF)。在离散数学中,它是O(n ^ 3)。
外圈...
for ( i = n ; i > 0; i = i/3 )
当i大于0时,循环运行。如果i为正,则将i减少三分之一永远不会使i低于0变得越来越小。
如果i是IEEE浮点数,经过大量迭代后它最终会达到0,具体取决于浮点数的大小。
如果假设数字是整数(这是我认为你用离散数学标签提出的问题),那么外部循环是O(log(n)),因为我每次迭代都会被切割三次并将迅速达到0。
内部循环,单独站立,很容易看出为O(n ^ 3)。
for ( my $j = 0; $j < $n**3 ; $j++ ) {
$sum++;
}
O(log(n))环内的O(n ^ 3)环是O(n ^ 3log(n)),其与O(n ^ 3)的生长曲线没有显着不同。