Эффективность бинарного поиска и эффективность линейного поиска в Фортране

Этот вопрос касается эффективности линейного поиска и эффективности двоичного поиска предварительно отсортированного массива в непрерывном хранилище ...

У меня есть заявление, написанное на фортране (77!). Одна из частых операций для моей части кода - найти индекс в массиве так, чтобыgx(i) <= xin < gx(i+1), В настоящее время я реализовал это какbinary search - извините за ярлыки заявления иgoto - Я прокомментировал, что эквивалентные оценки будут использовать Fortran 90 ...

<code>        i=1
        ih=nx/2
201     continue  !do while (.true.)
           if((xin.le.gx(i)).and.(xin.gt.gx(i+1)))then  !found what we want
              ilow=i+1; ihigh=i
              s1=(gx(ihigh)-xin)/(gx(ihigh)-gx(ilow))
              s2=1.0-s1
              return
           endif
           if(i.ge.ih)then
              goto 202 !exit
           endif
           if(xin.le.(gx(ih))then !xin is in second half of array
              i=ih
              ih=nx-(nx-ih)/2
           else !xin is in first half of array
              i=i+1
              ih=i+(ih-i)/2
           endif
        goto 201  !enddo
</code>

Однако сегодня я читал в Википедии о бинарном поиске и наткнулся на это:

<code>Binary search can interact poorly with the memory hierarchy 
(i.e. caching), because of its random-access nature. For 
in-memory searching, if the span to be searched is small, a
linear search may have superior performance simply because 
it exhibits better locality of reference.
</code>

Я не совсем понимаю это утверждение - у меня сложилось впечатление, что выборки из кеша собирались в большие (ish) порции за раз, поэтому, если мы начнем с начала массива, я подумал, что большая часть массива будет в кеше уже (по крайней мере, столько, сколько было бы для линейного поиска), поэтому я не думал, что это будет иметь значение.

Итак, мой вопрос, есть ли способ определить, какой алгоритм будет работать лучше (линейный или двоичный поиск?) Есть ли граница размера массива? В настоящее время я использую массивы размером около 100 элементов ...

Ответы на вопрос(1)

Ваш ответ на вопрос