给出一个改变的合并排序算法,使得如果数组已经排序,该算法将返回该数组,而不是再进行两次递归调用。 假设我们在一个数组上运行新算法,其中每个值正好出现n / log(n)次。 (为此,该数组包含log(n)个不同的值。)
该算法的时间复杂度是多少?
答案 0 :(得分:1)
如果您怀疑数组具有很少的不同值,则扫描数组以提取这些值,对它们进行排序和计数,比对数组执行完全合并排序所花的时间要少得多:
因此,时间复杂度可以降低为 O(N)。
但是请注意:
结论是,在特殊情况下可以有效降低复杂性,但在一般情况下则很棘手。