Algorithm 确定和分析这些不同循环的大O运行时
下面是简单的代码,我想找出代码的时间复杂度 我已经对它做了分析,老师告诉我里面有个错误。我不知道我错在哪里。需要帮忙。谢谢Algorithm 确定和分析这些不同循环的大O运行时,algorithm,time-complexity,Algorithm,Time Complexity,下面是简单的代码,我想找出代码的时间复杂度 我已经对它做了分析,老师告诉我里面有个错误。我不知道我错在哪里。需要帮忙。谢谢 j = 2 while(j<n) { k=j while(k < n) { sum + = a[k]*b[k] k = k*k } k = log(n) j += log(k) } j=2 而(j则从2到n,在每个步骤中向累加器添加logn,因此确实有n/logn步骤 然而,每一
j = 2
while(j<n)
{
k=j
while(k < n)
{
sum + = a[k]*b[k]
k = k*k
}
k = log(n)
j += log(k)
}
j=2
而(j则从2
到n
,在每个步骤中向累加器添加logn
,因此确实有n/logn
步骤
然而,每一步都要做什么?每一步,你从j
到n
,每一步都将累加器自身相乘。这是多少个操作呢?我不是100%确定,但基于一点一点的混乱,这似乎最终是日志(n-j)
步骤,或简称日志n
因此,n/log log n
步骤,对每个步骤执行log log n
操作,将为您提供一个O(n/log log n*log log n)
,或O(n)
算法
一些实验似乎或多或少证明了这一点(Python),尽管n_ops
似乎在n
变大时有点标记:
import math
def doit(n):
n_ops = 0
j = 2
while j < n:
k = j
while k < n:
# sum + = a[k]*b[k]
k = k*k
n_ops += 1
k = math.log(n, 2)
j += math.log(k, 2)
n_ops += 1
return n_ops
从2
到n
,每一步都向累加器添加log log n
,因此确实有n/log n
步骤
然而,每一步都要做什么?每一步,你从j
到n
,每一步都将累加器自身相乘。这是多少个操作呢?我不是100%确定,但基于一点一点的混乱,这似乎最终是日志(n-j)
步骤,或简称日志n
因此,n/log log n
步骤,对每个步骤执行log log n
操作,将为您提供一个O(n/log log n*log log n)
,或O(n)
算法
一些实验似乎或多或少证明了这一点(Python),尽管n_ops
似乎在n
变大时有点标记:
import math
def doit(n):
n_ops = 0
j = 2
while j < n:
k = j
while k < n:
# sum + = a[k]*b[k]
k = k*k
n_ops += 1
k = math.log(n, 2)
j += math.log(k, 2)
n_ops += 1
return n_ops
好的。让我看看。这个
k=j
while(k < n)
{
sum + = a[k]*b[k]
k = k*k
}
这并不是那么简单。好吧,至少,我想我已经指出了你可能错的地方,这就是问题所在。好的。让我们看看。答案是
k=j
while(k < n)
{
sum + = a[k]*b[k]
k = k*k
}
这并不是那么简单。好吧,至少,我想我已经指出了你可能错的地方,这就是问题所在。那么你认为它的时间复杂度应该是多少?那么它的O(n)时间复杂度呢?那么你认为它的时间复杂度应该是多少?那么它的O(n)时间复杂性?嗯,你没有展示太多的分析,而是一个答案,所以很难猜测你错在哪里。嗯,你没有展示太多的分析,而是一个答案,所以很难猜测你错在哪里
sum for {j from 2 to n/log(log(n))} [log_2(log(n)) - log_2(log(j))]