分析Quicksort时要使用什么措施


9

我试图理解为什么使用Lomuto分区和固定枢轴的快速排序在随机生成的输入上表现不稳定,但总体效果不佳。我在想,即使输入是随机生成的,序列也可能有很多顺序,但是我不确定如何测量序列中的混乱程度。我曾考虑过使用反演次数,但从另一个问题中我看到,我问这不是一个很好的方法。

我怀疑我的随机序列具有很多“顺序”的原因是,随机化枢轴解决了性能问题。但是从理论上讲,这些所谓的“随机”输入序列应该不存在任何性能问题。


这类问题的一种很好的度量方法是Kolmogorov复杂度。它基本上说,最混乱的字符串是不可压缩的字符串。这导致了不可压缩性方法,该方法已用于执行排序算法的平均情况分析以及查找平均和最坏情况分析之间的关系。
彼得,

我应该注意,我是一个本科生...我正在寻找更直接的方法,例如本文中的一种措施(我只是不知道哪个措施):citeseerx.ist.psu。 edu / viewdoc / summary?doi = 10.1.1.45.8017
罗伯特·巴恩斯


您应该怀疑是编程错误,而不是对手犯错。只需对从1到N的整数加扰序列进行排序,看看您的算法是否排序!
Yves Daoust 2015年

@YvesDaoust我认为这并不重要,“非单调性”的数量实际上只是长度为的字符串的Kolmogorov复杂度编码序列中元素的顺序。当然,它不是可计算的,您必须考虑伪随机字符串之类的深字符串,但从某种意义上说,每一种无序量度本质上都是Kolmogorov复杂度的近似值,这很有用。而且您无需计算它即可证明它。使用不可压缩方法已显示出许多复杂性结果。logn!
彼得

Answers:


1

Lomuto vs Hoare
排序相等的键时,Lomuto分区会受到影响,而Hoare分区则不会。
当使用距离中位数较远的枢轴时,这两种分区方案都会受到同样的影响。

混乱
的度量为快速分类目的选择的混乱的度量很简单。
答:与随机数据相比,固定支点距离中位数有多远?
如果您坚持使用Lomuto分区,并且假设允许重复值,则需要添加以下针对随机性的测试:
B:与随机相比,有多少个重复元素。

当然,假设在数据集中允许重复值并仍然评估Lomuto分区是很愚蠢的,因此您可能应该事先消除重复项或切换到Hoare分区,或者假设重复项很少。

使用统计数据量化这两种方法都很简单。

我们可以排除病理数据
对于分析快速排序的目的,其他任何与随机性的偏差都无关紧要。只要枢轴接近中值,它将在所有非病理性数据上表现良好。
要使快速分类病理学与随机变量的距离确实必须很大,因此我们可以排除这一点。

切勿在实际代码中使用任何固定的枢轴
。请注意,如果您使用固定的枢轴*)(无论该枢轴可能是什么编写实际代码,您就容易遭受拒绝服务攻击,因为攻击者可以插入一个恰好在这一点上具有病理价值,因此您应该始终选择随机元素作为支点。

*)或多个枢轴(如果您选择x枢轴的最佳值)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.