2012-10-07 39 views
0

一些我与都呈现以下趋势工作数据集的特征: - 数组的通过定制Timsort可以有效改善这些情况下的性能吗?

  1. 首先50-70%,几乎与完全乱序的最后30%来分类的。

    • 如果我用shell排序替换插入排序部分会有效吗?
  2. 阵列的第一50-70%几乎与含有大量的 龟最后30%排序。

    • 是否海龟的发生,不管这么多了,我应该赞成 这个梳排序变化沟Timsort - here。 他们最好的案例表演显示O(n),但平均情况下性能更好的Tim 排序与O(n日志n),而梳状排序有Ω(n日志n),但这是否采取 修改版本梳状排序或考虑到龟的密度?
  3. 与第二种情况相同,但是如果它可以提高性能,则部分排序的输出是正确的。 例如,包含1,000,000个元素的数组可以在数组的前1%时隙中具有最小1%(即 10,000个元素),但不需要在内部进行排序。

    • 这可以通过在快速排序一定递归深度后拔出来 地方元素大约接近其应有的地位来完成。

如果是相关的,这里是Java的Timsort代码,我想修改 - code

+0

这是一个真正值得尝试优化的东西吗?你有分析过吗? –

+0

我的导师正在为他的博士论文撰写一篇基于数据挖掘的论文,他主要致力于此算法,可以为蟋蟀匹配修正绘制启发式算法。因此,即使用shell排序替换插入排序可能没有太大的区别,我也必须探索标准2和3,因为他向我保证数据库将会非常大 - 任何优化都将被赞赏,时间的一些功能。 – Avik

回答

1

我认为最好的答案是不可能可靠地预测是否定制TimSort会为您的数据集产生有价值的性能改进。你只需要尝试一下,看看。

而且我会重复我的建议从我的评论:配置文件它!

直到您分析了在代表性数据上运行的应用程序为止,您无法知道是否有可能会有所帮助。例如,如果计算仅花费5%的时间排序数据,那么排序算法的50%加速只会导致应用程序加速2.5%。这是不值得浪费你的时间。

相关问题