多次运行O(n log n)算法的复杂性是多少?

时间:2015-08-06 15:16:45

标签: algorithm time-complexity

如果问题大小为n,并且每次算法将问题大小减少一半,我相信复杂度为O(n log n)e..g合并排序。所以,基本上你运行一个(log n)算法(比较)n次...

现在问题是,如果我有大小n的问题。我的算法能够在运行中将大小减小一半,并且每次运行需要O(n log n)。这种情况的复杂性是什么?

5 个答案:

答案 0 :(得分:1)

如果问题在尺寸n上采取n步,当n>时,在尺寸层(n / 2)处加上额外的运行。 1,总共花费O(n)时间:n + n / 2 + n / 4 + ... = ~2n = O(n)。

类似地,当n> 1时,如果每次运行花费时间O(n log n)并且在尺寸层(n / 2)处额外运行。 1,总时间为O(n log n)。

答案 1 :(得分:1)

由于问题的大小在每次迭代中减半,并且在每个级别所花费的时间为n log n,因此递归关系为

T(n) = T(n/2) + n log n

应用Master定理,

T(n) = a T(n/b) + f(n)相比,我们有一个= 1和b = 2.

因此n log b a = n log 2 1           = n 0 = 1。

因此f(n)= n log n> Ñ登录<子> B'/子>一

应用主定理我们得到T(n)=Θ(f(n))=Θ(n log n)。

因此,复杂性是T(n)= Θ(n log n)

答案 2 :(得分:0)

评论后编辑:

如果每次运行时问题的大小减半,您将运行log(n)运行来完成它。由于每次运行需要n * log(n)时间,因此您将有n * log(n)次运行的log(n)次。总的复杂性将是:

O(n log(n)^2)

答案 3 :(得分:0)

我很确定会来到O(n ^ 2 log n)。您创建一个n + n / 2 + n / 4 + ... = 2n(对于大n)的几何系列。但你忽略了系数,只得到了n。

这很好,除非你的意思是内部nlogn与外部n的n值相同。

编辑: 我认为OP在这里意味着每个运行内部nlogn也会受到困扰。换句话说,

nlogn + n / 2 log n / 2 + n / 4 log n / 4 + ... + n / 2 ^(n - 1)log n / 2 ^(n-1)

如果是这种情况,那么有一点需要考虑的是在某些时候

2 ^(n-1)&gt; n

此时日志中断(因为0到1之间的数字的对数为负)。但是,您并不真正需要日志,因为在这些迭代中将会有1个操作。所以从那以后你只需要加1。

这发生在log n / log 2中。因此,对于第一次log n / log 2迭代,我们得到了上面的总和,之后它只是1的总和。

nlogn + n / 2 log n / 2 + n / 4 log n / 4 + ... + n / 2 ^(log n / log 2)log n / 2 ^(log n / log 2)+ 1 + 1 + 1 + 1 ...(n - log n / log 2)次

不幸的是,这个表达式并不容易简化......

答案 4 :(得分:0)

如果我没有误解这个问题,那么第一次运行就会完成(与nlogn成比例)。第二次运行只剩下n / 2,所以在n / 2log(n / 2)中完成,依此类推。

对于大n,这是你在分析时间复杂度时所假设的,log(n / 2)=(logn-log2)将被logn替换。

总结&#34;所有&#34;脚步: log(n)*(n + n / 2 + n / 4 ...)= 2n log(n),即时间复杂度nlogn

换句话说:时间复杂度与您的第一步/基本步骤相同,所有其他步骤一致&#34;仅限&#34;再次贡献相同的金额