Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 确定和分析这些不同循环的大O运行时_Algorithm_Time Complexity - Fatal编程技术网

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))]