2012-04-27 3 views
-1

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

(1) '방법이 있어야합니다'- 왜? (2) 배열이 RAM에 있다면 32 비트 시스템에서'log_2 (n) <32'입니다. 그렇게 나쁜가요? (3) 더 나은 점근 적 복잡성 ['Omega (logn)']이나 더 나은 상수를 가진 구현을 찾고 있습니까? – amit

+0

표준 C는 O (log (n)) 시간에 배열을 검색하는 ['bsearch()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/bsearch.html)를 정의합니다. 비교 기반 검색으로는 더 잘할 수 없다고 생각합니다. – pmg

+0

모든 비교 기반 알고리즘의 로그 경계가 낮습니다. 당신의 믿음을 뒷받침하는 증거가 만들어졌습니다. – UmNyobe

답변

-1

예, 해시 테이블을 사용하십시오. 평균적인 경우 더 빠릅니다.

+3

이는 정렬 된 배열이 아님을 의미합니다. – UmNyobe

+1

@UmNyobe : 정렬 된 배열 **과 ** hashmap : key-> index' 둘 다 저장할 수 있습니다. 내가 뭔가를 놓친다면 정정 해줘.하지만 나는 다른 정렬 된 배열 연산을 assymptotically 느리게 만들 것이라고 생각하지 않는다. 나는 그것이 좋은 해결책이라고 생각하지 않지만, 가능하다. – amit

+0

@amit 예. OP는 그가 필요한 것을 더 명확히해야합니다. 나는 downvoter 아니지만 – UmNyobe

관련 문제