두 개의 정렬 된 배열 Haystack
및 Needles
이 있습니다. Needles
을 반복해야하고 다음 단계를 수행하기 위해 매번 Haystack
의 첫 번째 점을 Needle
보다 큰 값으로 찾습니다. 예를 들어목록에서 x보다 큰 첫 번째 값을 얻는 효율적인 방법은 무엇입니까?
:
double [] dHaystack = { 1.2, 2.6, 7.0, 9.3, 19.4 }
double [] dNeedles = { 1.4, 6.4, 6.5, 7.0, 10.3 }
// expected indices 0 1 1 2 3
그래서이 받아야 인덱스 바늘 값 이하인 제 인덱스이다.
명백한 방법은 각 바늘에 대한 건초 더미의 시작부터 반복하거나 마지막으로 발견 된 색인부터 반복하는 것입니다 (바늘도 정렬 됨).
하지만 내 머리의 일부가 "이분법"이라고 외치고 있습니다. 컴파일러가 간단한 블록 읽기 및 반복보다 최적화하기가 더 쉽기 때문에 이분법이 실제로 더 빨라질까요? 그것이 가치가 있기 위해서는 엄청나게 긴 건초 더미가 필요한가요? 그들 중 누구도
UPPER_BOUND 시작과 끝, 끝의 끝을지나 하나되는 대한 반복자를 취 적용하지 않는 경우
내 뇌는 "예제"를 외치며, 무엇을 최적화 할 것인지 생각할 필요가 없습니다. 그런 다음 다른 사람은 마지막으로 발견 된 솔기에서 검색하는 것이 좋습니다. 컴파일러를 똑똑하게 만들려고하지는 않을 것입니다. 일반적으로 매우 좋습니다 –