timsort或手动维护一个排序的序列,哪个更有效?

时间:2014-06-30 19:10:25

标签: algorithm sorting

我正在开发一个启发式例程,需要维护一个已排序的序列/数组/列表。我听说timsort对于维护已经排序的子序列的序列的命令很快。

另一方面,我需要的是非常简单的。在最初对序列进行排序后,我需要在每一步重复执行以下操作之一:

  1. 删除min元素。

  2. 访问每个最小的K元素。

  3. 插入一个元素并维护顺序。

  4. timsort似乎具有O(n)的最佳案例复杂性。天真地,我可以通过调用timsort来获得O(n)来实现操作3。但是这些操作需要重复多次。我想知道手动维护排序序列(数组或列表)或在每一步执行partial_sort会更快,如果是,那么复杂性是什么。

    对于披露,我使用c ++,c ++ / c ++ 11中的例子在必要时会很好。

    谢谢,

1 个答案:

答案 0 :(得分:1)

似乎最好的方法是实际使用自平衡二叉搜索树。这应该处理O(log N)中的插入/删除并迭代O(k)中的k个最小元素,如果我没有弄错的话。除非你有某些原因,否则你必须使用清单。