如果问题大小为n,并且每次算法将问题大小减少一半,我相信复杂度为O(n log n)e..g合并排序。所以,基本上你运行一个(log n)算法(比较)n次...
现在问题是,如果我有大小n的问题。我的算法能够在运行中将大小减小一半,并且每次运行需要O(n log n)。这种情况的复杂性是什么?
答案 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;再次贡献相同的金额