通过定制Timsort可以有效地改善这些场景中的性能吗?

时间:2012-10-07 09:50:52

标签: java algorithm sorting timsort

我正在使用的数据集的一些特征显示以下趋势: -

  1. 首先,50-70%的数组几乎按最后30%完全加扰排序。

    • 如果我用shell排序替换插入排序部分会有效吗?
  2. 首先,50-70%的数组几乎按最后30%排序,其中包含大量数据 海龟。

    • 龟的发生是否如此重要,以至于我应该抛弃Timsort 这个梳子排序变化 - here。 他们最好的表现表现为O(n)但平均表现更好的Tim 用O(n log n)排序,而梳子排序有Ω(n log n),但这样做需要 梳子的修改版本或海龟的密度考虑在内?
  3. 与第二种情况相同,但如果可以提高性能,则部分排序的输出很好。 例如,包含1,000,000个元素的数组可以具有最小的1%(即 10,000个元素)在数组的前1%槽中,但不需要在内部进行排序。

    • 这可以通过在快速排序中的某个递归深度后拉出来完成 把元素放在他们应得的地方附近。
  4. 如果它是相关的,那么我正在尝试修改Java的Timsort代码 - code

1 个答案:

答案 0 :(得分:1)

我认为最好的答案是无法可靠地预测自定义TimSort是否会为您的数据集带来有价值的性能改进。您只需要尝试并查看。

我将从我的评论中重复我的建议:首先介绍它!

在您对代表性数据上运行的应用程序进行分析之前,您无法知道这是否有可能对此有所帮助。例如,如果计算仅花费其时间排序数据的5%,那么排序算法的50%加速将仅导致应用程序的2.5%加速。这根本不值得浪费你的时间。