이것은 바보 같은 질문 일 수 있지만 이진 검색이 점근 적으로 최적이라는 증거를 알고있는 사람이 있습니까? 즉, 객체에 대해 유일하게 허용 된 연산이 비교 인 요소의 정렬 된 목록이 주어지면 검색이 o (lg n)에서 수행 될 수 없다는 것을 어떻게 증명할 수 있습니까? (이것은 lg n의 작은 것입니다.)이 작업을 허용하는 유일한 연산이 비교 인 요소로 제한하고 있음을 주목하십시오. O (lg n)을 기대할 수있는 잘 알려진 알고리즘이 있기 때문입니다 데이터에 대해 더 복잡한 연산을 수행 할 수 있다면 (예를 들어, 보간법 검색 참조).바이너리 검색의 최적 성
답변
:
가- 가능한 결과의 개수가 적어도 O (N)이어야한다.
- "결정 트리"의 노드에 의해 알고리즘에 의해 수행 된 결정을 나타낼 수 있습니다. 항목이 더 큰 경우 비교가 진행되고, 그렇지 않은 경우에는 다른 방식으로 진행됩니다. 트리의 노드는 알고리즘의 상태이고 잎은 결과입니다. 따라서 트리에 적어도 O (n) 개의 노드가 있어야합니다.
- O (n) 노드의 각 트리는 적어도 O (log N) 레벨을가집니다.
그건 아주 똑똑합니다 - 나는 알고리즘의 상태를 트리로 표현하는 것을 생각하지 않았습니다. 이것은 완벽하게 이해할 수 있습니다. 정말 고마워! – templatetypedef
@template : heaport/mergesort의 AFAIK 최적화도 비슷한 방식으로 입증되었습니다. – ybungalobill
좀 더 정밀도를 제안 할 수 있을까요? n 개의 모든 요소가 뚜렷하다고 가정하면 대상 값이 존재하지 않을 수 있으므로 정확히 n + 1 개의 결과가있을 수 있으므로 정확히 n + 1 * leaves * (노드가 아님)이 있습니다. n + 1 * leaves *에있는 트리는 적어도 log2 (n + 1) 레벨을가집니다. 어쩌면 당신은 "O (n) 노드의 각 트리가 적어도 O (log n) 레벨"이라는 말을하는 것이 맞지만 O()와 같은 방정식의 양쪽면에 대해서는 추론하기가 어렵습니다. :) –
논리가 간단합니다. n
개의 정렬 된 요소가 있다고 가정 해 보겠습니다.
- 1 개의 비교 결과 (첫 번째 요소가 작거나 더 높음)가 있습니다. 따라서 한 번의 비교로 충분하면
n <= 2
입니다. 그렇지 않은 경우 3 개의 요소 (a, b, c
)가 있고 알고리즘에 2 개의 가능한 결과가있는 경우 3 개의 요소 중 하나가 선택되지 않습니다. - 2 가지 비교 결과가 네 가지가 될 수 있습니다. 따라서 2 번의 비교로 충분하다면
n <= 4
. - 이와 마찬가지로,
k
의 비교가 충분할 경우n
은n <= 2^k
이어야합니다.
마지막 부등식을 반대로하면 로그가됩니다 : k >= log(2, n)
. here 가입일
당신이 상한선임을 증명하는 것처럼 보입니다. 이리. – ybungalobill
중복 된 요소가있을 경우 변경됩니까? –
이것은 실제로 하한 증거로 작동합니까? 당신은 O (lg n) 시간에 요소를 찾아 볼 수 있지만, 점근 적으로 더 빠른 알고리즘의 가능성을 배제했는지 정확하게 나타 냈습니다. – templatetypedef
Nikita가 설명했듯이 은 항상을 O (log n)보다 더 좋게 만들 수 없습니다.
몇 가지 추가 작업을 수행 할 수 있더라도 여전히 충분하지 않습니다. 보간 검색이 바이너리 검색보다 성능이 떨어지는 요소 시퀀스를 준비 할 수 있다고 확신합니다.
우리는 때문에 보간 검색이 낫다 말할 수있다 : 우리는 평균 성능이 아니라 최악의 경우를 고려
- .
- 각 가능한 들어오는 데이터 집합의 확률이 균일하지 않습니다.
답변은 - 들어오는 데이터 세트에 대한 추가 지식에 달려 있습니다.
추가 지식으로 꽤 많은 것들이있을 수 있습니다. 확률로 요소를 정렬하고 확률이 기하 분포라면 선형 검색조차도 O (1) 시간에 수행 할 수 있습니다! Btw, 때때로 좋은 생각이야. – ybungalobill
이 숙제가 있습니까? – Bernard
또한 모든 요소에 균일하게 액세스 할 수 있다고 가정합니까? 기타는 http://en.wikipedia.org/wiki/Fibonacci_search_technique을 참조하십시오. –
@Bernard - 아니요, 숙제가 아닙니다. 나는 나의 기준을 가지고있다. :-) 이것은 잠시 동안 저를 괴롭 히고있는 것입니다. – templatetypedef