其實二分查找算法就和我們在一個英文字典中找一個單詞一樣,比如要找middle這個單詞,先把字典翻到大概中間的位置,那么現在字典就被分成兩個部分了,middle這個單詞要么在第一個部分,要么在第二個部分,如果正好翻到p那一頁,那么說明middle在前面的那個部分,再從前面那個部分找一個大概中間的位置,用不了多長時間就找到middle了。 我們查字典的這個方法就是二分查找算法,但是前提是字典是排好序的,如果字典是亂序的,那么就沒法用 二分查找算法了。
仔細想來,插入算法也可以用類似二分查找算法的思路來操作,一般插入算法的前提肯定是已經排好序了,用二分插入算法效率很高。
從二分查找算法實現來看,它實際上是在降低候選數據規模的一種思路。
如果用最簡單的一個一個查找,那么n個數據第一次查找的時候候選數據規模是n,第二次查找的時候候選數據規模是n-1。。。
每次數據規模減1.
如果二分查找的話,那么n個數據第一次 查找的時候候選數據規模是n,第二次查找的時候候選數據規模是n/2,第三次查找的時候數據規模是n/4。
可以看到二分查找算法降低數據規模的作用十分明顯。
哈希算法也是一種查找算法,它的意思是先給候選數據建立索引,然后按照索引和候選數據一一對應的關系存起來,查找的時候是先把待查找數據用哈希函數算出索引值,然后就找到了候選數據了。處理問題的思路其實是一種把無序數據變得“有序”,
這個有序就是建立索引的過程,是一種預處理的思路,你讓我查找數據,我先不找,先把數據擺弄擺弄,擺弄好了再找。我並不是很贊同書上說的哈希算法是一種空間換時間的算法,感覺沒有說道點子上啊。