For loop 用三次索引计算for循环的tilde复杂度

For loop 用三次索引计算for循环的tilde复杂度,for-loop,time-complexity,complexity-theory,tilde,For Loop,Time Complexity,Complexity Theory,Tilde,假设我有以下算法: for(int i = 1; i < N; i *= 3) { sum++ } 但在这种情况下,基数不是二元对数函数,而是3。 这与精确的符号有关系吗?增长的顺序是否完全相同,因此我们在使用波浪形符号时可以忽略基数?我的方法正确吗?你是对的,for循环执行ceil(log\u 3n)次,其中log\u 3n表示N的以3为底的对数 不,使用平铺符号时不能忽略底面 下面是我们如何推导时间复杂度的方法。 我们将假设for循环的每次迭代都会花费C,对于某些常量C>0 让

假设我有以下算法:

for(int i = 1; i < N; i *= 3) {
   sum++
}
但在这种情况下,基数不是二元对数函数,而是3。
这与精确的符号有关系吗?增长的顺序是否完全相同,因此我们在使用波浪形符号时可以忽略基数?我的方法正确吗?

你是对的,for循环执行
ceil(log\u 3n)
次,其中
log\u 3n
表示
N
的以3为底的对数

不,使用平铺符号时不能忽略底面

下面是我们如何推导时间复杂度的方法。 我们将假设for循环的每次迭代都会花费
C
,对于某些常量
C>0

T(N)
表示for循环的执行次数。由于在第次迭代时,
i
的值是
3^j
,因此我们进行的迭代次数是最小的
j
,其中
3^j>=N
。取两边以3为底的对数,我们得到
j>=log\u 3n
。因为
j
是一个整数,
j=ceil(log\u 3 N)
。因此
T(N)~ceil(log_3n)


S(N)
表示for循环的时间复杂度。因此,“总”时间复杂度是
C*T(N)
,因为
T(N)
每次迭代的成本是
C
,用波浪线表示法,我们可以将其写成
S(N)~C*ceil*(log\u 3n)

没问题。非常清楚地说,您可以将基数更改为
b
,但不能忽略它——在右侧有一个额外的系数
log\u b3
(例如
S(N)~C*ceil(log\u b3*log\u bn)
)。
~ log N