python - 在线排序并删除两个整数流上的重复项

标签 python c sorting stream sequence

假设我收到两个整数流。每个整数流 (1) 不保证按递增顺序排列,并且 (2) 有时,第一个流中会丢失 1 个或多个整数,但会出现在第二个流中。例如:

流 1 - 1、2、3、5、4、6、8、9、10、...

流 2 - 1、2、3、4、5、6、8、7、10、...

什么是具有低时空复杂度的数据结构和/或算法来构建包含两个流的并集(即删除重复项)中的每个单个整数的排序流?即:

排序流 - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...

当然,最简单的方法是存储每个结果,然后以 O(n log n) 的时间排序,在线性扫描中进行最后一次删除所有连续的重复元素。但这需要大量内存,并且需要两个流在任何处理开始之前终止。

这是针对嵌入式设备上的 UDP 数据包定序器,因此最好使用 C 语言的代码片段,但我也可以阅读 Python。

最佳答案

我们是否知道我们得到的整数,或者它们只是任意的?

你需要在某个时刻进行排序,所以我没有找到避免 O(n lg n) 的方法。你最好的选择是 heapsort它是为“按需排序”方法而设计的。如果该值已经存在,则不要添加它。

(显然,您每次都会向堆中添加一个元素,而不是排序。)

关于python - 在线排序并删除两个整数流上的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822791/

相关文章:

c - fgets 不等待用户输入

c - 在 NULL 值(或未定义)指针上重新分配

java - 使用通用方法实现的选择排序 - 错误结果

ruby-on-rails - 分页、随机搜索结果,不聚集

Python:更快地处理数组

python - 绘制n个相同的无重叠和中心重心的圆

python - 为什么对 formdata 进行 urlencode 然后用 utf-8 再次编码,这里的逻辑是什么?

python - matplotlib pyplot.plot() : How do you plot data as a line when the data contains a single value surrounded by masks?

c - 它不打印新数组。可能是什么原因?

algorithm - 双调排序(计算复杂度)