合并排序的空间复杂性

时间:2014-10-21 11:52:31

标签: algorithm space-complexity

我对合并排序的空间复杂性有一些困惑。它说它是O(n)。但是,如果我查看wiki中的实现,它看起来是O(nlogn)。

这是因为在每次递归调用时,我将数组分为左右两边。例如,让我们从第一次调用合并排序开始。它会将数组分成左右两半,我们已经需要n个空格。正如您在wiki实现中所看到的,它创建了两个新数组来保存左右部分。

现在相应地对左右两半进行两次递归调用,这将自己将它们的部分分成左右两部分,这将再次占用空间n将四个新的一半组合起来等等。

由于所有这些都是递归调用,因此内存在堆栈中反复消耗并累积到O(nlogn)。所以我认为这个特定实现的空间复杂度是O(nlogn)。

请提供一些见解?

1 个答案:

答案 0 :(得分:-1)

你很亲密。如果要包含递归调用的空间,则为O(n)+ O(logn),其中= O(n)。希望这可以解决您的问题。

有关详情,请参阅this post