这个问题是关于线性搜索与在连续的存储预排序后的数组的二进制搜索的效率的效率...
我有Fortran语言编写的应用程序(77!)。 我的部分的代码的一个频繁操作是找到索引在一个数组,使得gx(i) <= xin < gx(i+1)
我现在实现了这个作为一个binary search
-遗憾的声明标签和goto
-我什么评论相当于statments将使用Fortran 90的...
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
然而,今天,我读维基百科上关于二进制搜索,我碰到这个就来了:
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.
我不完全理解这种说法 - 我的印象是,缓存取聚集在一个大的时间(ISH)块,所以如果我们开始在数组的开头,我认为大多数阵列的将是缓存已经(至少,它更将是一个线性搜索),所以我不认为这事。
所以我的问题是,有没有办法知道哪些算法的性能会更好(线性或二进制搜索?)是否有数组大小的边界? 我目前使用大小的数组约100元...