Content deleted Content added
I have changed the link to unizoek.pas (which was broken) and linked it to a copy I found via archive.org. I have obtained Mr. De Bruijn's permission (a copy can be found in the GIT repo) to host that file now in my Repo. Makes the article complete again. |
m Disambiguating links to Mix (link changed to MIX (abstract machine)) using DisamAssist. |
||
(10 intermediate revisions by 7 users not shown) | |||
Line 1:
'''Uniform binary search''' is an optimization of the classic [[binary search]] algorithm invented by [[Donald Knuth]] and given in Knuth's ''[[The Art of Computer Programming]]''. It uses a [[lookup table]] to update a single array index, rather than taking the midpoint of an upper and a lower bound on each iteration; therefore, it is optimized for architectures (such as Knuth's [[MIX (abstract machine)|MIX]]) on which▼
▲'''Uniform binary search''' is an optimization of the classic [[binary search]] algorithm invented by [[Donald Knuth]] and given in Knuth's ''[[The Art of Computer Programming]]''. It uses a [[lookup table]] to update a single array index, rather than taking the midpoint of an upper and a lower bound on each iteration; therefore, it is optimized for architectures (such as Knuth's [[MIX]]) on which
*a table lookup is generally faster than an addition and a shift, and
Line 8 ⟶ 7:
The uniform [[binary search algorithm]] looks like this, when implemented in [[C (programming language)|C]].
<!-- Please don't break this code. Test before editing! -->
<syntaxhighlight lang="c">
▲ #define LOG_N 4
▲ static int delta[LOG_N];
▲ void make_delta(int N)
▲ {
▲ int power = 1;
do
power
delta[i]
} while
▲ }
▲ int unisearch(int *a, int key)
int i = delta[0] - 1; /* midpoint of array */
▲ {
▲ int d = 0;
while (1) {
} else if (delta[d] ==
} else
} else {
i ▲ }
▲ /* Example of use: */
▲ #define N 10
▲ int main(void)
▲ {
▲ int i, a[N] = {1,3,5,6,7,9,14,15,17,19};
for (int i = 0; i < 20; ++i)
printf("%d is at index %d\n", i, unisearch(a, i)); </syntaxhighlight>
==References==
Line 60 ⟶ 65:
==External links==
*[https://github.com/adrianuswarmenhoven/uniformbinarysearch_go/blob/master/Pascal/unizoek.pas An implementation of Knuth's algorithm] in [[Pascal (programming language)|Pascal]], by Han de Bruijn
*[https://github.com/adrianuswarmenhoven/uniformbinarysearch_go An implementation of Knuth's algorithm] in [[Go (programming language)|Go]], by [[:nl:Adrianus_Warmenhoven|Adrianus Warmenhoven]]
[[Category:Search algorithms]]
|