【问题标题】:merge sort algorithm for stream data流数据的归并排序算法
【发布时间】:2015-04-23 16:17:56
【问题描述】:

我正在阅读以下链接中的合并排序

http://www.eternallyconfuzzled.com/tuts/algorithms/jsw_tut_sorting.aspx

归并排序的名声在于它可以很容易地被修改来处理 顺序数据,例如来自流或生成器的数据。另一个巨大的 好处是,如果仔细编写,归并排序不需要 所有项目都存在。它可以对未知数量的项目进行排序 来自流或生成器,这是一个非常有用的属性。

我的问题是

1.我的理解是归并排序需要完整的数组,因为我们必须在它们之间划分数组并独立排序,然后进行归并。如果不是所有项目都存在,归并排序算法如何工作?

  1. 简单地给出一个算法,合并排序算法如何用于来自流的项目?

【问题讨论】:

  • 298 个问题,126 个点赞 - 你真的应该点更多的票,至少对于那些回答你问题的人来说是这样

标签: algorithm mergesort


【解决方案1】:

1 和 2 的答案有些相关。

  1. 您仍然可以对不完整的数组执行mergesort,这将给您留下一个排序的、部分完整的数组。运行时间仍为O(n lg n)。至于插入剩余的项目,您可以将部分数组与新项目合并,或者一次插入一个新项目,q.v。下文第 2 部分。如果原始数组几乎完成,则一次插入一个剩余项效果最好。

  2. 假设您从一个排序的数字数组开始,随着新数字从流中一个一个地进入,您不必运行另一个 mergesort。相反,您可以简单地在 O(n) 时间遍历排序数组并插入来自流的每个新项目。

【讨论】:

    【解决方案2】:

    合并排序的工作原理是将列表分成子集,对子集进行排序,然后将它们重新组合在一起。如果子集是一个元素长(正在流入的项目),那么它已经排序,只需要与现有的一组元素一起放入。从技术上讲,我称之为插入排序。这里的困难部分是确定将新元素放在哪里。您可以使用一个数组,它可以很容易地找到正确的位置,但添加新项目需要移动数据以腾出空间(有时重新分配数组)。或者,您可以将数据存储为链表,这样添加项目很简单,但确定在哪里放置新项目则比较棘手。秋千和环形交叉路口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多