是否存在时间复杂度为O(n *(log n)^ 2)的算法?

时间:2016-06-22 18:11:22

标签: algorithm big-o complexity-theory

我知道heapsort的时间复杂度为 O(n log n),但我真的不能想到一个有 O(n)的算法(log n) 2

3 个答案:

答案 0 :(得分:6)

构建一个非常容易。最明显的例子是:

for i in xrange(n * int(log(n, 2) ** 2)):
   // do something O(1)

有关更有用的示例,您可以使用Master's theorem进行无限量的递归以满足您的需求(任何k都可以使用):

enter image description here

如果您正在寻找一个真实的算法,那么Shellsort的最坏情况复杂度为 O(n(log n) 2 inplace mergesort也一样。

P.S。您正在寻找的东西的奇特名称是k = 2的拟线性时间复杂度。

答案 1 :(得分:2)

经典(最实用)的例子是STL的stable_sort。对数二次因子是由于合并阶段本身是递归的(这允许整个算法就地运行)。

答案 2 :(得分:1)

https://en.wikipedia.org/wiki/Dynamization往往会增加log n因子的复杂性,所以如果你对具有底层成本log n的数据结构的动态版本进行n次查询,你将获得n log(n)^ 2