我有兴趣找到一种比较排序算法,该算法可以最大限度地减少在算法运行期间每个元素与其他元素进行比较的次数。
对于随机排序的列表,我对两个发行版感兴趣:排序列表所需的比较次数(这是传统标准)以及列表中每个单个元素的比较次数参与其中。
在比较次数方面表现良好的算法中,比如平均达到O(n log(n)),我想找出平均次数的算法。最小化单个元素与其他元素的比较。
我认为理论最小值是O(log(n)),它是通过将上述比较总数除以n得到的。
我也对可能已在某种程度上订购数据的情况感兴趣。
也许模拟是寻找答案的最佳方式?
(我之前的问题已被搁置 - 现在这是一个非常明确的问题,如果您无法理解,那么请解释原因)
答案 0 :(得分:0)
是的,你绝对应该做模拟 在那里,你将隐含地设置大小和预先排序约束,这可能允许比你提出的一般问题更具体的陈述。
然而,Big-O处理你的问题时的渐近行为 似乎针对较小的问题规模。所以Big-O可以暗示对于足够大的输入集来进行排序运行的最佳候选者。 (但是,例如,如果您对尺寸< = 5感兴趣,结果可能会完全不同!) 为了获得您需要的比较操作的正确估计 分析每个算法。
最后,结果(对于给定的算法)必然是特定于正在排序的数据集。
此外,on avarage
在您的上下文中定义不明确。我假设您打算参考给定排序的参与对象的比较次数,而不是超过(足够大)排序运行的平均值。
即使在单个算法中,单个对象的比较分布也可能在一种情况下显示出较大的标准差,在另一种情况下(几乎)均匀分布。
由于排序算法的复杂性由比较总数(及其位置变化)决定,我不认为从有助于答案的热分析中会有很多。
也许你可以添加一些背景知识来回答你的问题"有趣"在实际意义上?