gpt4 book ai didi

performance - 快排递归深度O(n)的栈空间不会造成stackoverflow?

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

在最坏的情况下,快速排序递归深度需要 O(n) 的堆栈空间。为什么在最坏的情况下它不会导致大集合的堆栈溢出? (倒序)

最佳答案

如果你在枢轴的两边递归,那么在最坏的情况下它确实会导致足够大的数据的堆栈溢出。这就是为什么没有人在生产代码中使用简单的 QuickSort。

您可以对算法进行一个简单的更改,以防止 Omega(n) 最坏情况下的堆栈使用。在每个分区之后,递归地对“小一半”进行快速排序,然后迭代循环以进行“大一半”。这需要 O(log n) 额外的堆栈空间。如果你愿意,你可以通过再次修改它来使其成为 O(1) 堆栈空间和 O(log n) 额外的非堆栈空间。将“大半”推到预先分配的数组(或您选择的其他后进先出数据结构)的末尾,循环执行“小半”,当您触底时弹出最后一个元素关闭数据结构下一步要做什么。

您可以进行进一步的更改以避免 Omega(n^2) 最坏情况下的运行时。但它不再是简单的 QuickSort,它是一个 QuickSort-with-median-of-medians-pivot-selection,或 Introsort,或其他什么。

关于performance - 快排递归深度O(n)的栈空间不会造成stackoverflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12970688/

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