我知道heapsort的时间复杂度为 O(n log n),但我真的不能想到一个有 O(n)的算法(log n) 2 )。
答案 0 :(得分:6)
构建一个非常容易。最明显的例子是:
for i in xrange(n * int(log(n, 2) ** 2)):
// do something O(1)
有关更有用的示例,您可以使用Master's theorem进行无限量的递归以满足您的需求(任何k
都可以使用):
如果您正在寻找一个真实的算法,那么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