日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python按hash分组_Python算法系列-哈希算法

發布時間:2024/1/1 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python按hash分组_Python算法系列-哈希算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哈希算法又稱散列函數算法,是一種查找算法。就是把一些復雜的數據通過某種映射關系。映射成更容易查找的方式,但這種映射關系可能會發生多個關鍵字映射到同一地址的現象,我們稱之為沖突。在這種情況下,我們需要對關鍵字進行二次或更多次處理。出這種情況外,哈希算法可以實現在常數時間內存儲和查找這些關鍵字。

一、常見數據查找算法簡介

常見的數據查找算法:

順序查找:是最簡單的查找方法。需要對數據集中的逐個匹配。所以效率相對較低,不太適合大量數據的查找問題。

二分法查找:效率很高,但是要求數據必須有序。面對數據排序通常需要更多的時間。

深度優先和廣度優先算法:對于大量的數據查找問題,效率并不高。這個我們后面專門講解。

阿希查找算法:查找速度快,查詢插入,刪除操作簡單等原因獲得廣泛的應用。

二、什么是哈希

哈希查找的原理:根據數量預先設一個長度為M的數組。使用一個哈希函數F并以數據的關鍵字作為自變量得到唯一的返回值,返回值的范圍是0~M-1。這樣就可以利用哈希函數F將數據元素映射到一個數組的某一位下標,并把數據存放在對應位置,查找時利用哈希函數F計算,該數據應存放在哪里,在相應的存儲位置取出查找的數據。

這里就有一個問題:

關鍵字的取值在一個很大的范圍,數據在通過哈希函數進行映射時。很難找到一個哈希函數,使得這些關鍵字都能映射到唯一的值。就會出現多個關鍵字映射到同一個值的現象,這種現象我們稱之為沖突。

哈西算法沖突的解決方案有很多:鏈地址法,二次再散列法。線性探測再散列建立一個公共溢出區

注意:鏈地址法本質是數組+鏈表的數據結構

鏈地址法存儲數據過程:

首先建立一個數組哈希存儲所有鏈表的頭指針。由數組的關鍵字key通過對應的哈希函數計算出哈希地址。找到相應的桶號之后,建立新的節點存儲該數據。并把節點放到桶內的鏈表的最后面或者最前面。

鏈地址法查找數據:由數據關鍵字通過哈希。函數計算關鍵字對應的哈希地址之后順序比較同類不節點。是否與所查到的關鍵字一樣,直到找到數據為止,如果全部節點都不和關鍵字一樣,則書名哈系表里沒有該數據。解決了哈希函數的沖突。

用鏈地址法構造的散列表插入和刪除節點操作易于實現,所以構造鏈表的時間開銷很低。但是指針需要開辟額外的地址空間,當數據量很大時會擴大哈希表規模,內存空間要求較大。

三、實例:兩個數字的和

1.問題描述

要求在給定的一些數字中找出兩個數,使得它們的和為嗯,前提是這些數據中保證有答案,并且只有一個答案。例如給3、4、5、7、10。從中選出兩個數字使它們的和為11,可以選擇4和7。

2.雙指針辦法解決

def twosum(nums,target):

res = [] #存放結果編號

newnumber = nums [:] #將數據深拷貝一份

newnumber.sort() #對拷貝結果排序

left = 0 #定義左指針

right = len(newnumber) -1 # 定義右指針

while left < right:

if newnumber[left] + newnumber[right] ==target: #在原始數組中第一個元組尋找原始下標

for i in range(0,len(nums)):

if nums[i] == newnumber[left]:

res.append(i) #將下標結果接入集

break

for i in range(len(nums) - 1 , -1 , -1):#向回找,尋找第二個元組

if nums[i] == newnumber[right]:

res.append(i)

break

res.sort()

break

elif newnumber[left] +newnumber[right] < target:

left = left +1

else :

right = right -1

return (res[0] + 1 ,res[1] + 1 )

s =twosum([3,4,5,7,10],11)

print('下標是:',s)

雙指針解決方案:

第一步:對數據進行排序

第二步:移動指針尋找答案

第三步:發現答案去原始數據中查找這兩個元素的位置

顯然第一步和第三步很浪費時間,我們使用哈希算法,規避排序問題,直接查找數據和下標的對應關系。

3.哈希算法求解

def twosum(nums,target):

'''

這個函數只能解決兩個數字和,且答案有且僅有一個的情況

'''

dict = {}

for i in range(len(nums)):

m = nums[i]

if target - m in dict:#判定target - m 是否在字典中

return (dict[target-m]+1,i +1) #存在返回連個數的下標

dict[m] = i #若不存在則記錄鍵值對的值

s =twosum([3,4,5,7,10],11)

print('下標是:',s)

字典使用dict[key] = value 來記錄鍵值對的關系

四、總結

使用哈希算法解決查找問題,不僅效率高,而且代碼更少更容易理解,我們使用哈希算法解決查找問題將事半功倍,

這個示例問題是一個經典問題,還有后續一些問題,三個數、四個數求和問題。

總結

以上是生活随笔為你收集整理的python按hash分组_Python算法系列-哈希算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲 在线 | 美女黄色一级片 | 绯色av蜜臀vs少妇 | 高清在线一区二区三区 | 日韩欧美在线不卡 | 国产aⅴ无码片毛片一级一区2 | 国产精品一区二区免费在线观看 | 亚洲va天堂va国产va久 | www.中文字幕 | 欧美日韩国产亚洲沙发 | 欧美另类专区 | 国内视频一区二区三区 | 91精品人妻一区二区三区蜜桃欧美 | 黄色大片在线免费观看 | 91制服诱惑 | 久久91精品国产 | www久久99| 日韩在线视频免费播放 | 亚洲永久免费av | 国产欧美精品一区二区三区 | 国产免费一区二区三区在线播放 | 激情国产精品 | v天堂在线观看 | 日韩av无码一区二区三区不卡 | 国产伦理在线 | 一区二区三区国产精品 | 91高清视频在线 | 深夜福利久久 | 无码国产精品一区二区高潮 | 韩国三级中文字幕hd浴缸戏 | 欧美午夜三级 | 中文在线a√在线 | 欧美激情一二三区 | av中文字幕免费在线观看 | 色一情一伦一子一伦一区 | 山村大伦淫第1部分阅读小说 | 国产精品久久久久久久久免费软件 | 91成年人视频| 麻豆视频免费版 | 欧美婷婷 | 神马午夜激情 | 摸摸摸bbb毛毛毛片 午夜爽爽影院 | 国产成人一区二区三区电影 | 日本加勒比在线 | 国产乱论| 天堂av资源在线 | 国内精品久久久久久久久 | 青青草原在线免费观看视频 | 天堂资源在线播放 | 国产欧美一区二区三区在线 | 欧美一级淫片 | 中文字幕一区二区三区四区视频 | 色播久久 | 性一交一乱一区二区洋洋av | 91精品国产综合久久国产大片 | 婷婷视频在线 | 在厨房拨开内裤进入毛片 | 理论片大全免费理伦片 | 潘金莲三级80分钟 | 蜜桃精品视频在线观看 | 美女扒开屁股让男人捅 | 欧美成人不卡 | 99久久久无码国产精品免费麻豆 | 欧美视频久久久 | 动漫av在线免费观看 | 日本免费www | 少妇无内裤下蹲露大唇视频 | 日韩精品视频网站 | 国产一级片在线播放 | 日本jizz在线观看 | 日本99视频 | 欧日韩不卡视频 | 一级国产精品 | 国产精品无码电影 | 久久77777| 日韩精品色哟哟 | 日本va欧美va欧美va精品 | 一本不卡| 成av人片在线观看www | 日韩精品视频久久 | 尤物视频官网 | 欧美日韩在线第一页 | 午夜18视频在线观看 | 牛牛影视一区二区三区 | 黄色片亚洲 | 免费黄色链接 | 欧美精品福利视频 | 女人天堂网 | 自拍在线视频 | 久久久久久久久久久久久女过产乱 | 欧美激情一区二区三区p站 欧美mv日韩mv国产网站app | 四虎在线免费观看视频 | 性视频在线播放 | 国产日韩一区二区在线 | 偷拍老头老太高潮抽搐 | 成人免费在线网站 | 99热在线只有精品 | 香蕉视频污视频 | 男人天堂aaa |