成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你用 Python 實現查找算法

開發 后端 算法
查找數據的最簡單策略就是線性查找,它簡單地遍歷每個元素以尋找目標,訪問每個數據點從而查找匹配項,找到匹配項后,返回結果,算法退出循環,否則,算法將繼續查找,直到到達數據末尾。線性查找的明顯缺點是,由于固有的窮舉搜索,它非常慢。

[[439902]]

本文介紹以下查找算法:

線性查找(Linear Search)

二分查找(Binary Search)

插值查找(Interpolation Search)

我們詳細了解一下它們各自的情況。

一. 線性查找

查找數據的最簡單策略就是線性查找,它簡單地遍歷每個元素以尋找目標,訪問每個數據點從而查找匹配項,找到匹配項后,返回結果,算法退出循環,否則,算法將繼續查找,直到到達數據末尾。線性查找的明顯缺點是,由于固有的窮舉搜索,它非常慢。它的優點是無須像其他算法那樣,需要數據排好序。

我們看一下線性查找的代碼:

  1. def LinearSearch(list, item): 
  2.     index = 0 
  3.     found = False 
  4.  
  5. # Match the value with each data element        
  6.     while index < len(list) and found is False
  7.         if list[index] == item: 
  8.             found = True 
  9.         else
  10.             index = index + 1 
  11.     return found 

現在,看一下代碼的輸出(見圖3-15)。

  1. list = [12, 33, 11, 99, 22, 55, 90] 
  2.  
  3. print(LinearSearch(list, 12)) 
  4.  
  5. print(LinearSearch(list, 91)) 

▲圖 3-15

需要注意的是,如果能成功找到數據,運行LinearSearch函數會返回True。

  • 線性查找的性能:如上所述,線性查找是一種執行窮舉搜索的簡單算法,其最壞時間復雜度是O(N)。

二. 二分查找

二分查找算法的前提條件是數據有序。算法反復地將當前列表分成兩部分,跟蹤最低和最高的兩個索引,直到找到它要找的值為止:

  1. def BinarySearch(list, item): 
  2.     first = 0 
  3.     last = len(list)-1 
  4.     found = False 
  5.  
  6.     while first<=last and not found: 
  7.         midpoint = (first + last)//2 
  8.         if list[midpoint] == item: 
  9.             found = True 
  10.         else
  11.             if item < list[midpoint]: 
  12.                 last = midpoint-1 
  13.             else
  14.                 first = midpoint+1 
  15.     return found 

輸出結果如圖3-16所示。

  1. list = [12, 33, 11, 99, 22, 55, 90] 
  2.  
  3. sorted_list = BubbleSort(list) 
  4.  
  5. print(BinarySearch(list, 12)) 
  6.  
  7. print(BinarySearch(list, 91)) 

▲圖 3-16

請注意,如果在輸入列表中找到了值,調用BinarySearch函數將返回True。

  • 二分查找的性能:二分查找之所以如此命名,是因為在每次迭代中,算法都會將數據分成兩部分。如果數據有N項,則它最多需要O(log N)步來完成迭代,這意味著算法的運行時間為O(log N)。

三. 插值查找

二分查找的基本邏輯是關注數據的中間部分。插值查找更加復雜,它使用目標值來估計元素在有序數組中的大概位置。

讓我們試著用一個例子來理解它:假設我們想在一本英文詞典中搜索一個單詞,比如單詞river,我們將利用這些信息進行插值,并開始查找以字母r開頭的單詞,而不是翻到字典的中間開始查找。一個更通用的插值查找程序如下所示:

  1. def IntPolsearch(list,x ): 
  2.     idx0 = 0 
  3.     idxn = (len(list) - 1) 
  4.     found = False 
  5.     while idx0 <= idxn and x >= list[idx0] and x <= list[idxn]: 
  6.  
  7. # Find the mid point 
  8.         mid = idx0 +int(((float(idxn - idx0)/( list[idxn] - list[idx0])) * ( x - list[idx0]))) 
  9.  
  10. # Compare the value at mid point with search value  
  11.         if list[mid] == x: 
  12.             found = True 
  13.             return found 
  14.  
  15.         if list[mid] < x: 
  16.             idx0 = mid + 1 
  17.     return found 

輸出結果如圖3-17所示。

  1. list = [12, 33, 11, 99, 22, 55, 90] 
  2.  
  3. sorted_list = BubbleSort(list) 
  4.  
  5. print(IntPolsearch(list, 12)) 
  6.  
  7. print(IntPolsearch(list,91)) 

▲圖 3-17

請注意,在使用IntPolsearch函數之前,首先需要使用排序算法對數組進行排序。

  • 插值查找的性能:如果數據分布不均勻,則插值查找算法的性能會很差,該算法的最壞時間復雜度是O(N)。如果數據分布得相當均勻,則最佳時間復雜度是O(log(log N))。

關于作者:伊姆蘭·艾哈邁德(Imran Ahmad) 是一名經過認證的谷歌講師,多年來一直在谷歌和學習樹(Learning Tree)任教,主要教授Python、機器學習、算法、大數據和深度學習。他在攻讀博士學位期間基于線性規劃方法提出了名為ATSRA的新算法,用于云計算環境中資源的優化分配。近4年來,他一直在加拿大聯邦政府的高級分析實驗室參與一個備受關注的機器學習項目。

 

本文摘編自《程序員必會的40種算法》,經出版方授權發布。

 

責任編輯:武曉燕 來源: 大數據DT
相關推薦

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2021-02-02 13:31:35

Pycharm系統技巧Python

2021-02-10 09:34:40

Python文件的壓縮PyCharm

2021-05-10 06:48:11

Python騰訊招聘

2021-03-23 09:05:52

PythonExcelVlookup

2022-08-04 10:39:23

Jenkins集成CD

2015-07-15 13:18:27

附近的人開發

2017-10-29 21:43:25

人臉識別

2011-03-28 16:14:38

jQuery

2021-02-06 14:55:05

大數據pandas數據分析

2021-02-04 09:00:57

SQLDjango原生

2017-10-27 10:29:35

人臉識別UbuntuPython

2009-04-22 09:17:19

LINQSQL基礎

2021-05-17 21:30:06

Python求均值中值

2018-12-29 09:38:16

Python人臉檢測

2021-04-01 09:02:38

Python小說下載網絡爬蟲

2020-03-08 22:06:16

Python數據IP

2012-01-11 13:40:35

移動應用云服務

2021-08-02 23:15:20

Pandas數據采集
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级大片免费观看 | 在线视频一区二区 | 亚洲高清在线 | 一级一级毛片免费看 | 午夜一区二区三区视频 | 国产三级大片 | 91网在线观看 | 久久久久免费精品国产 | 黑人精品欧美一区二区蜜桃 | 在线观看亚洲一区二区 | 精品不卡| 色狠狠一区 | 欧美性一区二区三区 | 国产一区二区三区四区五区加勒比 | 国产精品黄视频 | 久久91av| av不卡一区 | 欧美男人天堂 | 青青久视频 | 国产激情视频 | 欧美二区在线 | 久久久黑人 | 91免费在线播放 | 看av在线 | 亚洲国产精品va在线看黑人 | 国产成人精品一区二区三区在线观看 | h视频在线免费 | 一级片在线视频 | 久久精品日产第一区二区三区 | 狠狠伊人 | 日韩在线资源 | 日本成人中文字幕 | 特级一级黄色片 | 日本高清在线一区 | 久久久久久久一区二区三区 | av影音资源| 久久精品小视频 | 日韩在线精品视频 | 中文字幕在线观 | 欧美一区二区三区电影 | 美女久久久 |