균일 이진 검색

Uniform binary search

균일한 바이너리 검색도널드 크누스가 발명한 고전적인 바이너리 검색 알고리즘의 최적화로서 크누스의 <컴퓨터 프로그래밍기술>에 수록되어 있다.각 반복에서 상한과 하한의 중간점을 차지하지 않고 룩업 테이블을 사용하여 단일 배열 인덱스를 업데이트하므로, Knuth의 MIX와 같은 아키텍처에 최적화되어 있다.

  • 테이블 검색은 일반적으로 추가 및 이동보다 빠르며,
  • 동일한 배열 또는 동일한 길이의 여러 배열에서 많은 검색이 수행됨

C 구현

균일한 이진 검색 알고리즘은 C에서 구현했을 때 다음과 같이 보인다.

#Define LOG_N 4  정태의 인트로 삼각주를 달다[LOG_N];  공허하게 하다 make_make(인트로 N) {     인트로  = 1;     인트로 i = 0;      하다 {         인트로 절반 = ;          <<= 1;         삼각주를 달다[i] = (N + 절반) / ;     } 하는 동안에 (삼각주를 달다[i++] != 0); }  인트로 숨김을 풀다(인트로 *a, 인트로 핵심을) {     인트로 i = 삼각주를 달다[0] - 1;  /* 어레이의 중간 지점 */     인트로 d = 0;      하는 동안에 (1) {         만일 (핵심을 == a[i]) {             돌아오다 i;         } 다른 만일 (삼각주를 달다[d] == 0) {             돌아오다 -1;         } 다른 {             만일 (핵심을 < a[i]) {                 i -= 삼각주를 달다[++d];             } 다른 {                 i += 삼각주를 달다[++d];             }         }     } }  /* 사용 예: */ #N 10호 정의  인트로 본래의(공허하게 하다) {     인트로 a[N] = {1, 3, 5, 6, 7, 9, 14, 15, 17, 19};      make_make(N);      을 위해 (인트로 i = 0; i < 20; ++i)         활자화하다(%d이(가) %d 인덱스에 있음\n", i, 숨김을 풀다(a, i));      돌아오다 0; } 

참조

외부 링크