English

Bimonotone enumeration

Combinatorics 2015-05-13 v1

Abstract

Solutions of a diophantine equation f(a,b)=g(c,d)f(a,b) = g(c,d), with a,b,c,da,b,c,d in some finite range, can be efficiently enumerated by sorting the values of ff and gg in ascending order and searching for collisions. This article considers functions that are bimonotone in the sense that f(a,b)f(a,b)f(a,b) \le f(a',b') whenever aaa \le a' and bbb \le b'. A two-variable polynomial with non-negative coefficients is a typical example. The problem is to efficiently enumerate all pairs (a,b)(a,b) such that the values f(a,b)f(a,b) appear in increasing order. We present an algorithm that is memory-efficient and highly parallelizable. In order to enumerate the first nn values of ff, the algorithm only builds up a priority queue of length at most 2n+1\sqrt{2n}+1. In terms of bit-complexity this ensures that the algorithm takes time O(nlog2n)O(n \log^2 n) and requires memory O(nlogn)O(\sqrt{n} \log n), which considerably improves on the memory bound Θ(nlogn)\Theta(n \log n) provided by a naive approach, and extends the semimonotone enumeration algorithm previously considered by R.L. Ekl and D.J. Bernstein.

Keywords

Cite

@article{arxiv.0803.3273,
  title  = {Bimonotone enumeration},
  author = {Michael Eisermann},
  journal= {arXiv preprint arXiv:0803.3273},
  year   = {2015}
}

Comments

22 pages, 7 figures. The algorithms presented here have been implemented as class templates in C++ and are available on the author's homepage

R2 v1 2026-06-21T10:23:42.171Z