Jump to content

Multiplicative binary search

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by BiomolecularGraphics4All (talk | contribs) at 01:05, 5 March 2017 (Add a page on "Multiplicative binary search"). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
Multiplicative binary search
Visualization of the multiplicative binary search algorithm where 7 is the target value.
ClassSearch algorithm
Data structureArray
Worst-case performanceO(log n)
Best-case performanceO(1)
Average performanceO(log n)
Worst-case space complexityO(1)
OptimalYes

In computer science, multiplicative binary search is a variation of binary search that uses a specific permutation keys in an array instead of the sorted order used by regular binary search.[1] Multiplicative binary search was first described by Thomas Standish in 1980. This algorithm was originally proposed to simplify the mid-point index calculation on small computers without efficient division or shift operations, but its cache-friendly nature makes it suitable for out-of-memory static search on block-oriented storage as an alternative to B+ trees.

Multiplicative binary search is used by some optimizing compilers to implement switch statements.[2][3]

Algorithm

Multiplicative binary search operates on a permuted sorted array. Keys are stored in the array in level-order sequence of the corresponding balanced binary search tree. This places the first pivot of a binary search as the first element in the array. The second pivots are placed at the next two positions.

Given an array A of n elements with values A0 ... An−1, and target value T, the following subroutine uses multiplicative binary search to find the index of T in A.

  1. Set i to 0
  2. if in, the search terminates unsuccessful.
  3. if Ai = T, the search is done; return i.
  4. if Ai < T, set i to 2×i + 1 and go to step 2.
  5. if Ai > T, set i to 2×i + 2 and go to step 2.


See also

Citations

  1. ^ Standish, Thomas A. (1980). "Chapter 4.2.2: Ordered Table Search". Data Structure Techniques. Addison-Wesley. pp. 136–141. ISBN 978-0201072563.
  2. ^ Sayle, Roger A. (17 June 2008). "A Superoptimizer Analysis of Multiway Branch Code Generation" (PDF). Proceedings of the GCC Developers’ Summit: 103–116. Retrieved 4 March 2017.
  3. ^ Spuler, David A. (January 1994). Compiler Code Generation for Multiway Branch Statements as a Static Search Problem (Technical report). Department of Computer Science, James Cook University, Australia. 94/03.