python programming training(三):搜索算法
目錄
1. 二分查找(Binary Search)
2. 順序查找(Order Search)
3. 哈希表查找技術?
???????
線性表查找技術:是指進行查找運行的查找表所采用的存儲結構是線性表的存儲結構。
在線性表查找技術中,對數據元素的查找包括:二分查找和順序查找和分塊查找。
1. 二分查找(Binary Search)
二分查找又稱折半查找,是一種效率較高的查找方法。二分查找要求線性表是有序表,即表中結點按關鍵字有序排列,并且要用順序表作為表的存儲結構。
二分查找是一種在有序數組中查找某一特定元素的搜索算法。
過程:搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束,如果是某一個特定元素小于或大于中間元素,則在數組小于或大于中間元素的那一半中進行查找,然后重復這個過程(遞歸),直到元素被找到,或找不到(數組為空,return -1)。
python3取整函數:
- int()向下取整
- round()四舍五入
- ceil()向上取整
二叉判定樹:深度為的滿二叉樹,折半二叉樹,以中間值為結點。
--> python遞歸實現
# 二分查找-遞歸實現 def binarysearch(num_list, left, right, x):# 需要判斷left和right索引位置if left <= right:mid = int((left + right)/2)# temp = num_list[mid]if num_list[mid] == x:return midelif num_list[mid] < x:left = mid + 1# 注意:使用遞歸調用的時候,要注意return返回,否則會出現Nonereturn binarysearch(num_list, left, right, x)else:right = mid - 1return binarysearch(num_list, left, right, x)else:return -1if __name__ == '__main__':num_list = [10, 20, 30, 40, 50, 60, 70, 75, 80, 90, 100]index = binarysearch(num_list, 0, len(num_list)-1, 75)print(index)-->python循環實現
# 二分查找-循環實現 def binarySearch_loop(num_list, x):left = 0right = len(num_list)-1while left <= right:mid = int((left+right)/2)if num_list[mid] == x:return xelif num_list[mid] < x:left = mid + 1else:right = mid - 1return -12. 順序查找(Order Search)
順序查找是最簡單的查詢方法,它的基本思想是:從表的一端開始,順序掃描線性表,依次將掃描到的結點關鍵字與給定值Key相比較。
# 順序查找 def orderSearch(num_list, x):for i in range(len(num_list)):if num_list[i] == x:return ireturn -1if __name__ == '__main__':num_list = [10, 20, 30, 40, 50, 60, 70, 75, 80, 90, 100]index = orderSearch(num_list, 65)print(index)3. 哈希表查找技術?
背景:由存儲值查找位置索引時,在用線性查找和二分查找的過程中,需要依據關鍵詞進行若干次的比較判斷,確定數據集合中是否存在關鍵字等于某個給定關鍵字的記錄以及該記錄在數據表中的位置,查找的效率與比較的次數密切相關。
problem:在查找事需要不斷進行比較的原因是建立數據表時,只考慮了個記錄的關鍵字之間的相對大小,即記錄在表中的關鍵字位置與關鍵字無直接關系。
-->線性查找或二分查找等方法需要順序地搜索整個記錄直到找到所需鍵值的記錄。但該方法十分耗時,尤其當列表非常大時耗時嚴重。
solve:如果能在記錄中的關鍵字位置與關鍵字之間建立某種直接關系,那么在進行查找時,就無須比較或只做很少的比較就能直接由關鍵字找到相應的記錄。
一個有效解決方法是計算所需記錄的偏移地址,并且在產生偏移地址處讀取記錄。?
哈希函數:就是通過公式將關鍵字值對轉換為偏移地址來檢索記錄。
哈希技術是查找和檢索與唯一標識相關信息的最好方法之一。
總結
以上是生活随笔為你收集整理的python programming training(三):搜索算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python programming t
- 下一篇: python programming t