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

时间:2016-01-16 02:10:42

标签: python c sorting stream sequence

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

第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。

1 个答案:

答案 0 :(得分:1)

我们对我们得到的整数有什么了解,还是只是随意的?

你需要在某个时候排序,所以我没有办法避免O(n lg n)。您最好的选择是heapsort,它是专为“即用型”方法而设计的。如果该值已经存在,则不要添加它。

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