O (log (n)) 시간에 정렬 된 숫자 배열에서 숫자를 검색하려면 이진 검색을 사용하고 있습니다. 다음 검색 내 C 함수이다O (log (n)) 미만의 정렬 된 배열에서 검색 실행 시간
search(int array[],int size,int search)
{
int first=0;
int last=size-1;
int middle = (first+last)/2;
while(first <= last)
{
if (array[middle] < search)
first = middle + 1;
else if (array[middle] == search)
{
printf("%d found at location %d.\n", search, middle+1);
break;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if (first > last)
printf("Not found! %d is not present in the list.\n", search);
}
여기
size
배열의 크기 및 search
검색 할 수있다. 위의 프로그램보다 적은 복잡도로 검색을 수행 할 수있는 방법이 있습니까?
(1) '방법이 있어야합니다'- 왜? (2) 배열이 RAM에 있다면 32 비트 시스템에서'log_2 (n) <32'입니다. 그렇게 나쁜가요? (3) 더 나은 점근 적 복잡성 ['Omega (logn)']이나 더 나은 상수를 가진 구현을 찾고 있습니까? – amit
표준 C는 O (log (n)) 시간에 배열을 검색하는 ['bsearch()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/bsearch.html)를 정의합니다. 비교 기반 검색으로는 더 잘할 수 없다고 생각합니다. – pmg
모든 비교 기반 알고리즘의 로그 경계가 낮습니다. 당신의 믿음을 뒷받침하는 증거가 만들어졌습니다. – UmNyobe