최근 인터뷰에서이 질문을 받았습니다. 이진 검색에서 중간 값보다 큰 값과 다른 값의 두 가지 비교가 있습니다. 한 번만 확인해야하는 방식으로 최적화 할 수 있습니까?비교 횟수로 이진 검색 최적화
1
A
답변
2
네, 여러 가지 방법으로 가능합니다.
일부 버전의 Fortran ("arithmetic IF"참조)에있는 3 방향 비교를 수행합니다.
x86 (및 기타) 어셈블리에서 트릭을 사용하면 cmp
을 사용할 수 있지만 여전히 두 개의 분기를 사용할 수 있습니다.
트릭을 사용하여 Deferred Detection of Equality.
2
아니요, 불가능합니다. 연산자를 전환 할 수는 있지만 (예 : 더 크고 작음보다 크고 같음) 대신 두 가지 비교가 필요합니다. 바이너리 검색에서 실제로 세 가지 결과가 나옵니다. 두 가지를 비교하고 둘 중 어느 것도 사실이 아니라면 세 번째 결과 만 가능합니다. 예를 들어
: 당신은 주위의 연산자를 전환하면 연루 하나가 변경됩니다
if (lookup < mid)
searchLower();
else if (lookup > mid)
searchUpper();
else
found(lookup);
,하지만 당신은 두 comparisions을 항상 필요합니다.
관련 문제
- 1. 이진 검색 알고리즘 최적화
- 2. 비교 검색에서 이진 검색 및 eps
- 3. 이진 비교
- 4. 이진 검색 C++ STL
- 5. 이진 검색 질문
- 6. SQL : 최소 횟수로 발생한 열에서 값 검색
- 7. 이진 문자열 비교
- 8. 이진 메시지 비교
- 9. ruby 이진 문자열 비교
- 10. 이진 검색 트리에서 값 검색
- 11. 중복 이진 표현의 비교 RBR
- 12. 검색 엔진 최적화 검색 (SEO)
- 13. 파이썬 2 목록 비교 최적화
- 14. 자바 - 선형 검색과 이진 검색의 성능을 비교
- 15. 이 내 이진 검색입니다 이진 검색
- 16. 이진 검색 구현
- 17. Xcode 4 이진 검색
- 18. LINQ가있는 이진 필드에서 검색
- 19. 이진 검색 트리 업데이트
- 20. 이진 검색 트리
- 21. 이진 검색 트리 소멸자
- 22. 분기없는 이진 검색
- 23. 이진 검색 트리 공식
- 24. 자바 이진 검색 트리
- 25. 자바 이진 검색 arraylist
- 26. Ruby의 이진 데이터 검색
- 27. Java의 이진 검색 트리
- 28. ruby의 이진 검색 트리
- 29. 이진 검색 트리 문제
- 30. 배열의 이진 검색
캐시를 원하십니까? –