我试图理解为什么使用Lomuto分区和固定枢轴的快速排序在随机生成的输入上表现不稳定,但总体效果不佳。我在想,即使输入是随机生成的,序列也可能有很多顺序,但是我不确定如何测量序列中的混乱程度。我曾考虑过使用反演次数,但从另一个问题中我看到,我问这不是一个很好的方法。
我怀疑我的随机序列具有很多“顺序”的原因是,随机化枢轴解决了性能问题。但是从理论上讲,这些所谓的“随机”输入序列应该不存在任何性能问题。
这类问题的一种很好的度量方法是Kolmogorov复杂度。它基本上说,最混乱的字符串是不可压缩的字符串。这导致了不可压缩性方法,该方法已用于执行排序算法的平均情况分析以及查找平均和最坏情况分析之间的关系。
—
彼得,
我应该注意,我是一个本科生...我正在寻找更直接的方法,例如本文中的一种措施(我只是不知道哪个措施):citeseerx.ist.psu。 edu / viewdoc / summary?doi = 10.1.1.45.8017
—
罗伯特·巴恩斯
您应该怀疑是编程错误,而不是对手犯错。只需对从1到N的整数加扰序列进行排序,看看您的算法是否排序!
—
Yves Daoust 2015年
@YvesDaoust我认为这并不重要,“非单调性”的数量实际上只是长度为的字符串的Kolmogorov复杂度编码序列中元素的顺序。当然,它不是可计算的,您必须考虑伪随机字符串之类的深字符串,但从某种意义上说,每一种无序量度本质上都是Kolmogorov复杂度的近似值,这很有用。而且您无需计算它即可证明它。使用不可压缩方法已显示出许多复杂性结果。
—
彼得