二分查找算法为什么要先排序
其實(shí)二分查找算法就和我們?cè)谝粋€(gè)英文字典中找一個(gè)單詞一樣,比如要找middle這個(gè)單詞,先把字典翻到大概中間的位置,那么現(xiàn)在字典就被分成兩個(gè)部分了,middle這個(gè)單詞要么在第一個(gè)部分,要么在第二個(gè)部分,如果正好翻到p那一頁(yè),那么說(shuō)明middle在前面的那個(gè)部分,再?gòu)那懊婺莻€(gè)部分找一個(gè)大概中間的位置,用不了多長(zhǎng)時(shí)間就找到middle了。 我們查字典的這個(gè)方法就是二分查找算法,但是前提是字典是排好序的,如果字典是亂序的,那么就沒(méi)法用 二分查找算法了。
?
仔細(xì)想來(lái),插入算法也可以用類似二分查找算法的思路來(lái)操作,一般插入算法的前提肯定是已經(jīng)排好序了,用二分插入算法效率很高。
?
?
從二分查找算法實(shí)現(xiàn)來(lái)看,它實(shí)際上是在降低候選數(shù)據(jù)規(guī)模的一種思路。
如果用最簡(jiǎn)單的一個(gè)一個(gè)查找,那么n個(gè)數(shù)據(jù)第一次查找的時(shí)候候選數(shù)據(jù)規(guī)模是n,第二次查找的時(shí)候候選數(shù)據(jù)規(guī)模是n-1。。。
每次數(shù)據(jù)規(guī)模減1.
如果二分查找的話,那么n個(gè)數(shù)據(jù)第一次 查找的時(shí)候候選數(shù)據(jù)規(guī)模是n,第二次查找的時(shí)候候選數(shù)據(jù)規(guī)模是n/2,第三次查找的時(shí)候數(shù)據(jù)規(guī)模是n/4。
可以看到二分查找算法降低數(shù)據(jù)規(guī)模的作用十分明顯。
?
?
哈希算法也是一種查找算法,它的意思是先給候選數(shù)據(jù)建立索引,然后按照索引和候選數(shù)據(jù)一一對(duì)應(yīng)的關(guān)系存起來(lái),查找的時(shí)候是先把待查找數(shù)據(jù)用哈希函數(shù)算出索引值,然后就找到了候選數(shù)據(jù)了。處理問(wèn)題的思路其實(shí)是一種把無(wú)序數(shù)據(jù)變得“有序”,
這個(gè)有序就是建立索引的過(guò)程,是一種預(yù)處理的思路,你讓我查找數(shù)據(jù),我先不找,先把數(shù)據(jù)擺弄擺弄,擺弄好了再找。我并不是很贊同書上說(shuō)的哈希算法是一種空間換時(shí)間的算法,感覺(jué)沒(méi)有說(shuō)道點(diǎn)子上啊。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yfish/p/9946474.html
總結(jié)
以上是生活随笔為你收集整理的二分查找算法为什么要先排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Sql语句内功心法
- 下一篇: python之路-day19-面向对象之