算法复杂度O(n * log(n)) - 我们需要除以2吗?

时间:2017-11-29 22:22:46

标签: algorithm time-complexity complexity-theory analysis

在O(n log(n))的许多定义中,我通常认为子问题必须是原始问题大小除以2的要求。但是,特别是,我已经看到O(log(n))只需要减小尺寸的问题。

我们是否一定需要将问题分成两半来解决nlog(n)问题?

或者它可能只是一个还原问题?像这样:

for (i = 0; i < A.length(); i++)
{
    for (j = i; j < A.length(); j++)
    {
        //do something
    }
}

这样的事情也会被归类为n(log(n))吗?或者它更接近O(n ^ 2)?

2 个答案:

答案 0 :(得分:1)

除以任何其他常量也会给你log(n)复杂性。这是因为您可以转换日志库,并且当您对Big-O感兴趣时,常数会消失。

http://www.purplemath.com/modules/logrules5.htm

你会注意到分母是常数。

答案 1 :(得分:1)

显示的代码为O(n^2)

外循环确定内循环的迭代次数。 N + N-1 + N-2 + N-3 + ... + 1 = O(n^2)

为了获得log(n)的复杂性,在每次迭代时你需要摆脱cn元素。 0<c<1

的位置