【发布时间】:2019-06-08 04:25:54
【问题描述】:
我需要找到以下代码的最接近的上限和下限。我是初学者,很抱歉我的错误。
p() 的上限是 O(log(n)),下限是 O(1)
notp() 的上限是 O(log(n)),下限是 O(1)
我认为下限是 O(1) 因为如果我有 n=4 那么我进入循环并且由于 n%i==0 我调用 p() 并且它注意到它不是一个素数所以 O (1) 那么由于 i=2 另一个 notp 不会被执行。那是最糟糕的情况。
最坏的情况是我通过循环,以便 log(n),并执行 ap,上限是 O(log(n)),所以它是 O(log(n)^2),但我不是这样确定这很好,请告诉我我哪里出错了?
int i;
for (i = 2; i*i <= n; i++) {
if (n % i == 0) {
p();
break;
}
}
if(i*i > n)
notp();
【问题讨论】:
-
最坏的情况是 O(sqrt(N) * log N)
-
你能向我解释一下 sqrt(N) 因为我没见过吗?
-
上限和下限到底是什么意思? “最近的上限”通常与“最近的下限”相同。
-
for循环在sqrt(N)次的最坏情况下运行。并且每次,它都会调用 p() 为log N时间。所以它是O(sqrt(N) * log N)你可以放心地忽略最后一个并且只调用notp()因为它只贡献log N时间
标签: algorithm complexity-theory