我正在寻找以下算法/问题的书目参考:我将其命名为“ BiSelect”或“ t-ary Select”或“ Selected in Sorted Arrays”,但我想它是以前用另一个名称引入的吗?
问题
考虑以下问题:
给定不相交的已排序数组,其大小分别为,并且整数,它们已排序并集的第个值吗?吨∈ [ 1 .. Σ Ñ 我 ] 吨∪ 我甲我
解决方案
有在一次运行一个非常简单的和优雅的算法,如果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_1或n_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 2t / 2 n 1 n 2 t
这可以推广到一个稍微复杂的算法在运行时间为较大的值,基于计算的值的中值为:所述 最小元素可以在数组中进一步忽略,其中小于中位数,而[tt / k ..]中的秩元素可以在k / 2个中进一步忽略其他数组,则每次复发的t会减半(中位数的成本为)。
参考?
我对自己的解决方案感到满意,但是我想知道问题(及其解决方案)已经知道。它与用于计算中位数的线性时间算法(通过对大小为组进行排序,并在其中位数上递归)相关,但稍微更通用一些。我问了位于奥尔胡斯Madalgo(丹麦)的几所大学,然后又问了Stringology研讨会(Rouen)的其他几所大学,但没有成功:我希望有更多知识的人可以对Stack Exchange有所帮助...
动机
解决此问题的方法适用于数组上的延迟数据结构(实际上,它可以看作是用于排序数组联合的延迟数据结构中的运算符);并且以更复杂的方式来自适应地计算最佳无前缀码。