在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)?
答案 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