gpt4 book ai didi

algorithm - 就地快速排序具有 O(n) 或 O(logn) 空间复杂度

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:31 25 4
gpt4 key购买 nike

这篇维基百科文章 http://en.wikipedia.org/wiki/Quicksort#In-place_version建议 O(logn) 是就地排序的时空复杂度,http://futur3googl3r.blogspot.com/2008/08/google-interview-questions.html这个采访网站表明它是 O(n)。我认为答案是 O(n) 但想知道我是否正确。

最佳答案

在这两篇文章中,他们所指的空间复杂度是指extra 空间(不包括存储原始数组所需的空间)。除了声明额外数组的常见情况之外,这个额外 空间可能来自调用堆栈。每次递归调用都会在调用栈上创建一个栈帧,占用空间,栈帧的数量取决于输入大小n,所以需要统计。

让我们使用维基百科文章作为引用,因为正如@Jim Mischel 所指出的那样,该博客非常不一致。

对于就地快速排序,从原始实现进行修改将O(log n)额外空间平均,而不是O(n) extra 空间(在所有情况下)在原始实现中。正如博客1 正确指出的那样,额外 空间的最坏情况复杂度是O(n) ,当算法遇到它的最坏情况(排序列表;将有 n 次递归调用,因此调用堆栈将占用 O(n) extra 空格)。

1:(感谢@rici 指出)但是,如果我们假设一个没有像 Wikipedia article 中提到的优化的实现,博主是正确的.可以改进算法以在最坏情况下使用 O(log n) extra 空间,方法是先在较小的部分上递归,然后对较长的部分执行尾调用.由于较小的部分总是小于输入大小的一半,因此最多会有 O(log n) 次递归调用。假设尾调用优化已完成,较长的部分将重用当前堆栈帧而不会产生额外空间。如果未进行尾调用优化,我们始终可以编写具有显式堆栈的迭代实现。

关于algorithm - 就地快速排序具有 O(n) 或 O(logn) 空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com