av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

瀏覽:2日期:2022-06-23 08:55:56
一、插補(bǔ)查找算法

插補(bǔ)查找算法又稱(chēng)為插值查找,它是折半查找算法的改進(jìn)版。插補(bǔ)查找是按照數(shù)據(jù)的分布,利用公式預(yù)測(cè)鍵值所在的位置,快速縮小鍵值所在序列的范圍,慢慢逼近,直到查找到數(shù)據(jù)為止。根據(jù)描述來(lái)看,插值查找類(lèi)似于平常查英文字典的方法。例如,在查一個(gè)以字母 D 開(kāi)頭的英文單詞時(shí),決不會(huì)用折半查找法。根據(jù)英文詞典的查找順序可知,D 開(kāi)頭的單詞應(yīng)該在字典較前的部分,因此可以從字典前部的某處開(kāi)始查找。鍵值的索引計(jì)算,公式如下:

middle=left+(target-data[left])/(data[right]-data[left])*(right-left)

參數(shù)說(shuō)明:

middle:所求的邊界索引。 left:最左側(cè)數(shù)據(jù)的索引。 target:鍵值(目標(biāo)數(shù)據(jù))。 data[left]:最左側(cè)數(shù)據(jù)值。 data[right]:最右側(cè)數(shù)據(jù)值。 right:最右側(cè)數(shù)據(jù)的索引。

例如,已經(jīng)有排序好的數(shù)列:34、53、57、68、72、81、89、93、99。要查找的數(shù)據(jù)是 53,使用插補(bǔ)查找法步驟如下:

步驟1:將數(shù)據(jù)列出來(lái)并利用公式找到邊界值,計(jì)算過(guò)程如下:

將各項(xiàng)數(shù)據(jù)帶入公式:

Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

將數(shù)據(jù)取整,因此所求索引是 2,對(duì)應(yīng)的數(shù)據(jù)是 57,將查找目標(biāo)數(shù)據(jù) 53 與 57 進(jìn)行比較,如下圖所示。

Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

步驟2:將 53 與 57 進(jìn)行比較,結(jié)果是 53 小于 57,所以查找 57 的左半邊數(shù)據(jù),不用考慮右半邊的數(shù)據(jù),索引范圍縮小到 0 和 2 之間,公式帶入:

Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

取整之后索引是 1,對(duì)應(yīng)的數(shù)據(jù)是 53,將查找目標(biāo)數(shù)據(jù) 53 與 53 進(jìn)行比較,如下圖所示:

Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

步驟3:將 53 與 53 進(jìn)行比較,所得結(jié)果相等,查找完成。說(shuō)明:如果多次分割之后沒(méi)有找到相等的值,表示這個(gè)鍵值沒(méi)有在這個(gè)數(shù)列中。

通過(guò)上述的步驟1就能看出,插補(bǔ)查找算法比折半查找算法的取值范圍更小,因此它的速度要比折半法查找快,這就是插補(bǔ)查找算法的優(yōu)點(diǎn)。

二、實(shí)例:利用插補(bǔ)查找用戶輸入的數(shù)據(jù)

用戶可以隨意輸入一組數(shù)據(jù),例如本實(shí)例輸入一組數(shù)據(jù):34、53、57、68、72、81、89、93、99。在這組數(shù)據(jù)中用插補(bǔ)查找法分別查找數(shù)據(jù) 57、53、93、89、100,且顯示每次查找的過(guò)程。用 Python 代碼實(shí)現(xiàn)此過(guò)程,具體代碼如下:

def insert_search(data, num): ''' 自定義查找函數(shù):該函數(shù)使用的是插補(bǔ)查找算法 :param data: 原數(shù)列data :param num: 鍵值num :return: ''' # 計(jì)算 left_index = 0 # 最左側(cè)數(shù)據(jù)的索引 right_index = len(data) - 1 # 最右側(cè)數(shù)據(jù)的索引 print('正在查找.......') # 提示 while left_index <= right_index:# 使用公式計(jì)算出索引值middle = left_index + (num - data[left_index]) / (data[right_index] - data[left_index]) * (right_index - left_index)# 取整middle = int(middle)# print(middle)if num == data[middle]: return middle # 如果鍵值等于邊界值,返回邊界位置elif num < data[middle]: # 輸出位置在數(shù)列中的左半邊 print(f'{num} 介于位置{left_index + 1}[{data[left_index]}]和邊界值{middle + 1}[{data[middle]}]之間,找左半邊......') right_index = middle - 1 # 如果鍵值小于邊界值,最右邊數(shù)據(jù)索引等于邊界位置減1else: # 輸出位置在數(shù)列中的左半邊 print(f'{num} 介于位置{middle + 1}[{data[middle]}]和邊界值{right_index + 1}[{data[right_index]}]之間,找右半邊......') left_index = middle + 1 # 如果鍵值大于邊界值,最左邊數(shù)據(jù)索引等于邊界位置加1 return -1 # 自定義函數(shù)到此結(jié)束inp_num = 0 # 定義變量,用來(lái)輸入鍵值num_list = [34, 53, 57, 68, 72, 81, 89, 93, 99] # 定義數(shù)列print('數(shù)據(jù)內(nèi)容是:')for index, ele in enumerate(num_list): print(f' {index + 1}[{ele}]', end='') # 輸出數(shù)列print('')flag = True # 開(kāi)關(guān),用來(lái)管控是否多次查找while flag: # 循環(huán)查找 inp_num = int(input('請(qǐng)輸入要查找的鍵值:').strip()) # 輸入查找鍵值 result = insert_search(num_list, inp_num) # 調(diào)用自定義的查找函數(shù)——insert_search()函數(shù) if result == -1: # 判斷查找結(jié)果是否是-1print(f'沒(méi)有找到[{inp_num}]') # 若為-1,提示沒(méi)有找到值 else:# 若不為-1,提示查找位置print(f'在{result + 1}個(gè)位置找到[{inp_num}]') char = input('本次查找結(jié)束,是否繼續(xù)查找,請(qǐng)輸入 y(Y) 或 n(N):').strip() if char.upper() == 'N':flag = False

程序執(zhí)行結(jié)果如下圖所示:

Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)

到此這篇關(guān)于Python查找算法之插補(bǔ)查找算法的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 插補(bǔ)查找算法內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品久久久久无码av | 久久中文字幕在线 | av在线一区二区三区 | 九九热国产精品视频 | 亚洲成人精品一区二区 | 羞羞视频在线网站观看 | 日韩最新网址 | 成人亚洲综合 | 成人高清网站 | 国产精品一区一区 | 国产精品视频久久久 | 日韩久久久久久久久久久 | 羞羞视频网站免费观看 | 久久久日韩精品一区二区三区 | 黄色一级片aaa | 成人精品免费视频 | 免费毛片网 | 欧美日韩精品一区二区三区四区 | 91麻豆产精品久久久久久 | 91精品在线看 | 人人插人人 | 在线免费观看黄网 | 日本字幕在线观看 | 久久综合色综合 | 欧美 日韩 国产 成人 在线 | 91免费电影| 国产激情一区二区三区 | 国产精品久久午夜夜伦鲁鲁 | 欧美日韩高清免费 | 91成人在线视频 | 国产在线精品一区二区三区 | 亚洲一区二区久久 | 免费国产一区二区 | 久久久久黄色 | 欧美一区二区小视频 | 精品欧美一区二区精品久久久 | a国产一区二区免费入口 | 正在播放国产精品 | 久久69精品久久久久久国产越南 | 粉色午夜视频 | 国产一区久久久 |