电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python查找算法之插補查找算法的實現

瀏覽:10日期:2022-06-23 08:55:56
一、插補查找算法

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

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

參數說明:

middle:所求的邊界索引。 left:最左側數據的索引。 target:鍵值(目標數據)。 data[left]:最左側數據值。 data[right]:最右側數據值。 right:最右側數據的索引。

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

步驟1:將數據列出來并利用公式找到邊界值,計算過程如下:

將各項數據帶入公式:

Python查找算法之插補查找算法的實現

將數據取整,因此所求索引是 2,對應的數據是 57,將查找目標數據 53 與 57 進行比較,如下圖所示。

Python查找算法之插補查找算法的實現

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

Python查找算法之插補查找算法的實現

取整之后索引是 1,對應的數據是 53,將查找目標數據 53 與 53 進行比較,如下圖所示:

Python查找算法之插補查找算法的實現

步驟3:將 53 與 53 進行比較,所得結果相等,查找完成。說明:如果多次分割之后沒有找到相等的值,表示這個鍵值沒有在這個數列中。

通過上述的步驟1就能看出,插補查找算法比折半查找算法的取值范圍更小,因此它的速度要比折半法查找快,這就是插補查找算法的優點。

二、實例:利用插補查找用戶輸入的數據

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

def insert_search(data, num): ''' 自定義查找函數:該函數使用的是插補查找算法 :param data: 原數列data :param num: 鍵值num :return: ''' # 計算 left_index = 0 # 最左側數據的索引 right_index = len(data) - 1 # 最右側數據的索引 print('正在查找.......') # 提示 while left_index <= right_index:# 使用公式計算出索引值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]: # 輸出位置在數列中的左半邊 print(f'{num} 介于位置{left_index + 1}[{data[left_index]}]和邊界值{middle + 1}[{data[middle]}]之間,找左半邊......') right_index = middle - 1 # 如果鍵值小于邊界值,最右邊數據索引等于邊界位置減1else: # 輸出位置在數列中的左半邊 print(f'{num} 介于位置{middle + 1}[{data[middle]}]和邊界值{right_index + 1}[{data[right_index]}]之間,找右半邊......') left_index = middle + 1 # 如果鍵值大于邊界值,最左邊數據索引等于邊界位置加1 return -1 # 自定義函數到此結束inp_num = 0 # 定義變量,用來輸入鍵值num_list = [34, 53, 57, 68, 72, 81, 89, 93, 99] # 定義數列print('數據內容是:')for index, ele in enumerate(num_list): print(f' {index + 1}[{ele}]', end='') # 輸出數列print('')flag = True # 開關,用來管控是否多次查找while flag: # 循環查找 inp_num = int(input('請輸入要查找的鍵值:').strip()) # 輸入查找鍵值 result = insert_search(num_list, inp_num) # 調用自定義的查找函數——insert_search()函數 if result == -1: # 判斷查找結果是否是-1print(f'沒有找到[{inp_num}]') # 若為-1,提示沒有找到值 else:# 若不為-1,提示查找位置print(f'在{result + 1}個位置找到[{inp_num}]') char = input('本次查找結束,是否繼續查找,請輸入 y(Y) 或 n(N):').strip() if char.upper() == 'N':flag = False

程序執行結果如下圖所示:

Python查找算法之插補查找算法的實現

到此這篇關于Python查找算法之插補查找算法的實現的文章就介紹到這了,更多相關Python 插補查找算法內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 路面机械厂家| 钢木实验台-全钢实验台-化验室通风柜-实验室装修厂家-杭州博扬实验设备 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 深圳市万色印象美业有限公司| 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 |