选择排序数组的并集:已经知道吗?


12

我正在寻找以下算法/问题的书目参考:我将其命名为“ BiSelect”或“ t-ary Select”或“ Selected in Sorted Arrays”,但我想它是以前用另一个名称引入的吗?

问题

考虑以下问题:

给定k不相交的已排序数组A1,,Ak,其大小分别为,并且整数,它们已排序并集的第个值吗?[ 1 .. Σ Ñ ] n1,,nkt[1..ni]t iAi

解决方案

有在一次运行一个非常简单的和优雅的算法,如果K = 2:如果K = 2,只是比较A_1 [T / 2]A_2 [吨/ 2]并分别在A_1 [t / 2..t]A_2 [1..t / 2]A_1 [1..t / 2]A_2 [t / 2..t]上递归,在两种情况下参数t / 2(以及n_1n_2小于t时的一些次要优化)。k = 2 k = 2 A 1 [ t / 2 ] A 2 [ t / 2 ] A 1 [ t / 2 .. t ] A 2 [ 1 .. t / 2 ] A 1 [ 1 .. t / 2 ] A 2O(lgmin{n1,n2,t})k=2k=2A1[t/2]A2[t/2]A1[t/2..t]A2[1..t/2]A1[1..t/2]t / 2 n 1 n 2 tA2[t/2..t]t/2n1n2t

这可以推广到一个稍微复杂的算法在运行时间O(klgt)为较大的值k,基于计算的值的中值Ai[t/k]i[1..k]:所述t/k 最小元素可以在k/2数组中进一步忽略,其中Ai[t/k]小于中位数,而[tt / k ..]中的秩元素[tt/k..]可以在k / 2个中进一步忽略k/2其他数组,则每次复发的t会减半中位数t的成本为O(k))。

参考?

我对自己的解决方案感到满意,但是我想知道问题(及其解决方案)已经知道。它与用于计算中位数的线性时间算法(通过对大小为组进行排序,并在其中位数上递归)相关,但稍微更通用一些。我问了位于奥尔胡斯Madalgo(丹麦)的几所大学,然后又问了Stringology研讨会(Rouen)的其他几所大学,但没有成功:我希望有更多知识的人可以对Stack Exchange有所帮助...5

动机

解决此问题的方法适用于数组上的延迟数据结构(实际上,它可以看作是用于排序数组联合的延迟数据结构中的运算符);并且以更复杂的方式来自适应地计算最佳无前缀码。

Answers:


2

Frederickson和Johnson在1982年描述的算法认为所有集合都具有相同的大小。他们还在1980年描述了一种最佳解决方案,该解决方案利用了不同大小的排序集。该算法的复杂度在。O(k+i=1klogni)

参考

Greg N. Frederickson和Donald B. Johnson。1980年。通用选择和排名(初步版)。在ACM第十二届年度计算机理论研讨会论文集(STOC '80)中。美国纽约州ACM,电话:420-428。DOI = 10.1145 / 800141.804690 http://doi.acm.org/10.1145/800141.804690


20

弗雷德里克森(Frederickson)和约翰逊(Johnson)在80年代获得了最佳成绩。令,则存在一种算法可以解决。O k + p log tp=min(k,t)O(k+plogtp)

参考

GN弗雷德里克森,DB约翰逊“ 的选择的复杂性和在X + Y,并用排序列矩阵排名 ” J. COMPUT。系统科学,24(2)(1982),第197–208页


0

k = 2的情况出现在并行合并排序中,因为来自不同线程的两个排序数组的合并需要在两个线程之间拆分以保持相同的并行度。此作业解决方案是一个参考。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.