典型的现实世界数据(非对手)是否会导致中位数 3 快速排序退化?

问题描述 投票:0回答:1

我的印象是随机数据导致快速排序退化的概率呈指数级小,但找不到它的公式。

当然,已经排序的数据会导致简单的快速排序很容易退化。

是否有典型的数据不是对手,但会触发 3 中位数快速排序的 O(n^2) 行为(通常的低高中中位数)?

随机数据导致快速排序进行超过(例如)2 n log_2(n) 次比较的概率是多少?

最后一个问题很有趣,因为典型的 C++ STL 使用 introsort,它使用类似的阈值更改为备份算法。

algorithm probability quicksort denial-of-service introsort
1个回答
0
投票

您要求的概率非常小——随机选择的数据极不可能导致快速排序非常糟糕的行为。

但是,现实世界的数据不是随机的。相关问题是是否存在“某些数据模式”会导致快速排序出现“不完全随机”的问题,因此在实践中可能会出现问题。 这就是已排序数据和先枢轴快速排序的情况。这是一种根本不是随机的数据模式,因此在实践中很可能发生,这就是为什么它是一个问题。 任何中位数为 3 的快速排序是否存在类似的问题模式?是的,当然。如果您与对手建立这样的模式,那么您会发现它根本不是随机的,因此可能出现在真实数据中。

需要对手破解你的算法的论点只适用于随机算法。例如,如果您的哈希函数是从所有可能的哈希函数中随机选择的,那么对手就需要破坏您的哈希表。

© www.soinside.com 2019 - 2024. All rights reserved.