English

Deterministic Cache-Oblivious Funnelselect

Data Structures and Algorithms 2024-02-28 v1

Abstract

In the multiple-selection problem one is given an unsorted array SS of NN elements and an array of qq query ranks r1<<rqr_1<\cdots<r_q, and the task is to return, in sorted order, the qq elements in SS of rank r1,,rqr_1, \ldots, r_q, respectively. The asymptotic deterministic comparison complexity of the problem was settled by Dobkin and Munro [JACM 1981]. In the I/O model an optimal I/O complexity was achieved by Hu et al. [SPAA 2014]. Recently [ESA 2023], we presented a cache-oblivious algorithm with matching I/O complexity, named funnelselect, since it heavily borrows ideas from the cache-oblivious sorting algorithm funnelsort from the seminal paper by Frigo, Leiserson, Prokop and Ramachandran [FOCS 1999]. Funnelselect is inherently randomized as it relies on sampling for cheaply finding many good pivots. In this paper we present deterministic funnelselect, achieving the same optional I/O complexity cache-obliviously without randomization. Our new algorithm essentially replaces a single (in expectation) reversed-funnel computation using random pivots by a recursive algorithm using multiple reversed-funnel computations. To meet the I/O bound, this requires a carefully chosen subproblem size based on the entropy of the sequence of query ranks; deterministic funnelselect thus raises distinct technical challenges not met by randomized funnelselect. The resulting worst-case I/O bound is O(i=1q+1ΔiBlogM/BNΔi+NB)O\bigl(\sum_{i=1}^{q+1} \frac{\Delta_i}{B} \cdot \log_{M/B} \frac{N}{\Delta_i} + \frac{N}{B}\bigr), where BB is the external memory block size, MB1+ϵM\geq B^{1+\epsilon} is the internal memory size, for some constant ϵ>0\epsilon>0, and Δi=riri1\Delta_i = r_{i} - r_{i-1} (assuming r0=0r_0=0 and rq+1=N+1r_{q+1}=N + 1).

Keywords

Cite

@article{arxiv.2402.17631,
  title  = {Deterministic Cache-Oblivious Funnelselect},
  author = {Gerth Stølting Brodal and Sebastian Wild},
  journal= {arXiv preprint arXiv:2402.17631},
  year   = {2024}
}