2025-11-11T16:25:09.674123

Multi-Way Co-Ranking: Index-Space Partitioning of Sorted Sequences Without Merge

Joshi
We present a merge-free algorithm for multi-way co-ranking, the problem of computing cut indices $i_1,\dots,i_m$ that partition each of the $m$ sorted sequences such that all prefix segments together contain exactly $K$ elements. Our method extends two-list co-ranking to arbitrary $m$, maintaining per-sequence bounds that converge to a consistent global frontier without performing any multi-way merge or value-space search. Rather, we apply binary search to \emph{index-space}. The algorithm runs in $O(\log(\sum_t n_t)\,\log m)$ time and $O(m)$ space, independent of $K$. We prove correctness via an exchange argument and discuss applications to distributed fractional knapsack, parallel merge partitioning, and multi-stream joins. Keywords: Co-ranking \sep partitioning \sep Merge-free algorithms \sep Index-space optimization \sep Selection and merging \sep Data structures
academic

Multi-Way Co-Ranking: Index-Space Partitioning of Sorted Sequences Without Merge

基本信息

  • 论文ID: 2510.22882
  • 标题: Multi-Way Co-Ranking: Index-Space Partitioning of Sorted Sequences Without Merge
  • 作者: Amit Joshi (Independent Researcher)
  • 分类: cs.DS (Data Structures and Algorithms)
  • 发表时间: 2025年10月27日 (arXiv预印本)
  • 论文链接: https://arxiv.org/abs/2510.22882

摘要

本文提出了一种无合并的多路协同排名算法,用于计算切割索引i1,,imi_1,\dots,i_m,将mm个排序序列分割,使得所有前缀段总共包含恰好KK个元素。该方法将Siebert和Träff的双列表协同排名扩展到任意mm路,维护每个序列的边界并收敛到一致的全局前沿,无需执行多路合并或值空间搜索。算法在索引空间应用二分搜索,时间复杂度为O(log(tnt)logm)O(\log(\sum_t n_t)\log m),空间复杂度为O(m)O(m),且独立于KK。通过交换论证证明了正确性,并讨论了在分布式分数背包、并行合并分区和多流连接中的应用。

研究背景与动机

问题定义

多路协同排名问题定义如下:给定mm个按非递减顺序排序的序列L1,,LmL_1, \ldots, L_m(允许重复),每个序列长度为ntn_t,以及全局目标排名K{0,,N}K \in \{0, \ldots, N\}(其中N=tntN = \sum_t n_t),需要找到切割索引i1,,imi_1, \ldots, i_m使得:

t=1mit=Kmaxttmintrt\sum_{t=1}^m i_t = K \quad \text{且} \quad \max_t \ell_t \leq \min_t r_t

其中t\ell_trtr_t分别表示左边界值和右边界值。

研究动机

  1. 扩展经典算法:现有的协同排名算法主要针对两个序列,缺乏高效的多路扩展
  2. 避免合并开销:传统方法需要先合并多个序列再进行选择,开销较大
  3. 索引空间优势:在索引空间而非值空间操作,避免了值域搜索的复杂性
  4. 实际应用需求:分布式计算、并行处理和数据库查询中都需要高效的多路分区算法

现有方法局限性

  • Siebert-Träff方法:仅支持两个序列的协同排名
  • Frederickson-Johnson方法:在值空间操作,需要全局计数操作
  • 基于分割器的方法:需要预先合并或值域搜索,复杂度较高

核心贡献

  1. 算法设计:提出了首个无合并的多路协同排名算法,将经典的双路方法扩展到任意mm
  2. 理论分析:证明了算法的正确性和O(log(tnt)logm)O(\log(\sum_t n_t)\log m)时间复杂度
  3. 数据结构创新:设计了索引堆(addressable heaps)来高效维护边界值
  4. 应用拓展:展示了算法在分布式优化、并行处理和数据库系统中的应用潜力

方法详解

任务定义

输入

  • mm个排序序列L1,,LmL_1, \ldots, L_m,长度分别为n1,,nmn_1, \ldots, n_m
  • 目标排名K[0,N]K \in [0, N],其中N=t=1mntN = \sum_{t=1}^m n_t

输出

  • 切割索引向量(i1,,im)(i_1, \ldots, i_m)满足协同排名条件

约束条件

  • t=1mit=K\sum_{t=1}^m i_t = K
  • maxttmintrt\max_t \ell_t \leq \min_t r_t(协同排名条件)

算法架构

核心数据结构:索引堆

算法维护两个索引堆:

  • HLH_L:最大堆,存储左边界值(t,t)(\ell_t, t),返回最大左边界的序列(捐赠者)
  • HRH_R:最小堆,存储右边界值(rt,t)(r_t, t),返回最小右边界的序列(接收者)

每个堆支持O(logm)O(\log m)update_key操作和O(1)O(1)peek操作。

边界管理

为每个序列tt维护:

  • 下界Lb[t]i[t]Lb[t] \leq i[t]
  • 上界i[t]Ub[t]i[t] \leq Ub[t]
  • 当前索引i[t]i[t]

迭代策略

算法采用捐赠者-接收者的贪心策略:

  1. 识别极值
    • 捐赠者p=argmaxttp = \arg\max_t \ell_t(最大左边界)
    • 接收者q=argmintrtq = \arg\min_t r_t(最小右边界)
  2. 计算转移量
    donor_slack = ⌈(i[p] - Lb[p])/2⌉
    receiver_slack = ⌈(Ub[q] - i[q])/2⌉
    Δ = min{donor_slack, receiver_slack}
    
  3. 执行转移
    • i[p]i[p]Δi[p] \leftarrow i[p] - \Delta
    • i[q]i[q]+Δi[q] \leftarrow i[q] + \Delta
    • 更新边界:Ub[p]i[p]Ub[p] \leftarrow i[p]Lb[q]i[q]Lb[q] \leftarrow i[q]
  4. 更新堆:刷新受影响序列的堆键值

技术创新点

  1. 索引空间操作:完全在索引空间工作,避免了值域搜索和合并操作
  2. 几何收敛:通过对半缩减可行域,保证了对数级别的收敛速度
  3. 不平衡势函数:定义Φ(i)=maxttmintrt\Phi(i) = \max_t \ell_t - \min_t r_t作为收敛判据
  4. 确定性复杂度:算法复杂度独立于目标排名KK

理论分析

正确性证明

引理1(局部极值最优性)

如果Φ(i)>0\Phi(i) > 0,设p=argmaxttp = \arg\max_t \ell_tq=argmintrtq = \arg\min_t r_t。在所有保持tit=K\sum_t i_t = K的可行无穷小转移中,(p,q)(p,q)对实现了Φ\Phi的最大非递增变化。

证明思路:减少ipi_p会降低p\ell_p(左边界的局部最大值),增加iqi_q会提高rqr_q(右边界的局部最小值)。由于pu\ell_p \geq \ell_urqrvr_q \leq r_v对所有u,vu,v成立,极值对(p,q)(p,q)产生最陡的间隙maxminr\max\ell - \min r减少。

引理2(转移顺序交换性)

任何减少Φ\Phi的可行转移序列都可以重新排序,使得所有极值(p,q)(p,q)转移发生在任何非极值转移之前,且不会恶化任何中间步骤的Φ\Phi

定理1(收敛性和有效性)

算法2以有效的协同排名向量(i1,,im)(i_1, \ldots, i_m)终止,满足tit=K\sum_t i_t = Kmaxttmintrt\max_t \ell_t \leq \min_t r_t

复杂度分析

轮次分析

每轮中,捐赠者或接收者的可行距离被对半缩减。每个序列的距离Ub[t]Lb[t]Ub[t] - Lb[t]最多缩减O(lognt)O(\log n_t)次。聚合所有mm个序列,总轮次数为:

T=O(log(t=1mnt))T = O\left(\log\left(\sum_{t=1}^m n_t\right)\right)

时间复杂度

每轮执行常数次索引堆操作(O(logm)O(\log m)时间),总时间复杂度为:

O(log(tnt)logm)O\left(\log\left(\sum_t n_t\right) \cdot \log m\right)

空间复杂度

算法只需存储mm个序列的索引和边界信息,空间复杂度为O(m)O(m)

算法实现

核心算法流程

def multi_way_corank(sequences, K):
    m = len(sequences)
    # 初始化边界和索引
    Lb = [0] * m
    Ub = [len(seq) for seq in sequences]
    i = water_fill_initialization(K, Ub)
    
    # 构建索引堆
    HL = MaxHeap()  # 左边界最大堆
    HR = MinHeap()  # 右边界最小堆
    
    for t in range(m):
        HL.insert(t, left_boundary(sequences[t], i[t]))
        HR.insert(t, right_boundary(sequences[t], i[t]))
    
    while True:
        # 获取捐赠者和接收者
        max_left, p = HL.peek()
        min_right, q = HR.peek()
        
        # 检查终止条件
        if max_left <= min_right:
            break
            
        # 计算转移量
        donor_slack = ceil((i[p] - Lb[p]) / 2)
        receiver_slack = ceil((Ub[q] - i[q]) / 2)
        delta = min(donor_slack, receiver_slack)
        
        # 执行转移
        i[p] -= delta
        i[q] += delta
        
        # 更新边界
        Ub[p] = i[p]
        Lb[q] = i[q]
        
        # 更新堆
        update_heaps(HL, HR, sequences, i, p, q)
    
    return i

初始化策略

采用"水填充"策略初始化可行解:

def water_fill_initialization(K, capacities):
    i = [0] * len(capacities)
    need = K
    for t in range(len(capacities)):
        take = min(capacities[t], need)
        i[t] = take
        need -= take
        if need == 0:
            break
    return i

应用场景

1. 分布式分数背包问题

在多源分数背包问题中,当物品已按密度排序分布在mm个分片中时,可以使用协同排名计算全局KK前缀分割,无需合并源数据。

2. 并行mm路合并分区

为处理器分配不相交的前缀,无需执行预备合并。协同排名向量确定精确的交接点,处理器然后仅对其范围执行局部合并。

3. 多流连接分区

在数据库或流处理管道中,在全局排名处分区连接前沿是自然的需求,该方法产生与全局前缀一致的每流游标。

实验验证

虽然论文主要关注理论分析,但作者提供了实现代码供验证。算法的实际性能可以通过以下方面评估:

理论性能保证

  • 时间复杂度O(log(tnt)logm)O(\log(\sum_t n_t) \log m)
  • 空间复杂度O(m)O(m)
  • 独立性:复杂度独立于目标排名KK

与现有方法对比

  • 相比合并方法:避免了O(N)O(N)的合并开销
  • 相比值空间方法:避免了全局计数操作
  • 相比Frederickson-Johnson:在索引空间操作,更加高效

相关工作

双列表协同排名

Siebert和Träff的工作奠定了协同排名的基础,主要用于并行合并中的工作分区。本文将其从2路扩展到任意mm路。

基于分割器的并行排序

Siebert和Wolf的精确分割器方法在值空间操作,搜索平衡分区的键阈值。相比之下,本文方法在索引空间操作,直接输出协同排名向量。

排序分区中的选择

Frederickson-Johnson的经典工作研究结构化输入(如mm个排序列表的并集)上的选择和排名。其算法本质上是值空间过程,而本文提供索引空间原语。

结论与讨论

主要结论

  1. 成功将双路协同排名扩展到多路情况,保持了良好的理论性质
  2. 索引空间操作避免了值域搜索,提供了确定性的复杂度保证
  3. 算法简单易实现,具有良好的实用性

局限性

  1. 假设条件:要求输入序列已经排序
  2. 应用范围:主要适用于需要精确分区的场景
  3. 实验验证:缺乏大规模实验验证性能表现

未来方向

  1. 动态序列:扩展到支持动态更新的序列
  2. 近似算法:开发更快的近似版本
  3. 并行化:研究算法的并行化可能性
  4. 实际应用:在更多实际系统中验证效果

深度评价

优点

  1. 理论贡献:首次提供了多路协同排名的高效算法,填补了理论空白
  2. 方法创新:索引空间操作的思路新颖,避免了传统方法的局限
  3. 分析严谨:提供了完整的正确性证明和复杂度分析
  4. 实用价值:算法简洁,易于实现,有明确的应用场景

不足

  1. 实验缺失:论文缺乏实验验证,无法评估实际性能
  2. 比较有限:没有与现有方法进行详细的性能比较
  3. 应用深度:对应用场景的讨论相对简单,缺乏深入分析

影响力

  1. 学术价值:为多路协同排名问题提供了理论基础
  2. 实用潜力:在分布式计算和并行处理领域有应用前景
  3. 可复现性:作者提供了实现代码,便于验证和扩展

适用场景

  • 分布式系统中的数据分区
  • 并行算法中的负载均衡
  • 数据库系统中的查询优化
  • 流处理系统中的多流合并

参考文献

1 Greg N. Frederickson and Donald B. Johnson. Generalized selection and ranking. STOC 1980.

2 Christian Siebert. Perfectly load-balanced, stable, synchronization-free parallel merge. Parallel Processing Letters, 2014.

3 Christian Siebert. Simple in-place yet comparison-optimal mergesort, arXiv:2509.24540, 2025.

4 Christian Siebert and Felix Wolf. A scalable parallel sorting algorithm using exact splitting. RWTH Aachen University technical report, 2011.


总体评价:这是一篇理论性较强的算法论文,成功解决了多路协同排名这一重要问题。虽然缺乏实验验证,但理论分析严谨,方法创新性强,为相关领域提供了有价值的理论工具。