国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【哈希表】為什么哈希表的插入/刪除/查找時間復(fù)雜度為O(1)

這篇具有很好參考價值的文章主要介紹了【哈希表】為什么哈希表的插入/刪除/查找時間復(fù)雜度為O(1)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?1.先說結(jié)論

在使用哈希表時,往往會出現(xiàn)哈希沖突,此時就會通過鏈表/紅黑樹的方法來解決沖突,此時引入鏈表/紅黑樹那么時間復(fù)雜度就不是嚴格的O(1)。
我們首先要明白N代表什么,N是指問題的規(guī)模大小。
在使用哈希表時,所有的數(shù)據(jù)個數(shù)為N,鏈表的長度肯定不是N,(因為存在著很多鏈表,理論上時存在著所有的數(shù)據(jù)都在一個鏈表上,但在實際的開發(fā)中,是不會出現(xiàn)的),此外,在哈希表的插入中,當負載因子過大時,哈希表會進行擴容,數(shù)據(jù)會重新哈希,重新分配到鏈表上,確保每個鏈表上的元素不會過多,就近似會認為是O(1)了。

?2.哈希表的概念

順序結(jié)構(gòu)以及平衡樹中,元素關(guān)鍵碼與其存儲位置之間沒有對應(yīng)的關(guān)系,因此在查找一個元素時,必須要經(jīng)過關(guān)鍵碼的多次比較。順序查找時間復(fù)雜度為O(N),平衡樹中為樹的高度,即O( ),搜索的效率取決于搜索過程中元素的比較次數(shù)。

理想的搜索方法:可以不經(jīng)過任何比較,一次直接從表中得到要搜索的元素。 如果構(gòu)造一種存儲結(jié)構(gòu),通過某種函數(shù)(hashFunc)使元素的存儲位置與它的關(guān)鍵碼之間能夠建立一一映射的關(guān)系,那么在查找時通過該函數(shù)可以很快找到該元素。

當向該結(jié)構(gòu)中:

  • 插入元素
    根據(jù)待插入元素的關(guān)鍵碼,以此函數(shù)計算出該元素的存儲位置并按此位置進行存放
  • 搜索元素
    對元素的關(guān)鍵碼進行同樣的計算,把求得的函數(shù)值當做元素的存儲位置,在結(jié)構(gòu)中按此位置取元素比較,若關(guān)鍵碼相等,則搜索成功。
    該方式即為哈希(散列)方法,哈希方法中使用的轉(zhuǎn)換函數(shù)稱為哈希(散列)函數(shù),構(gòu)造出來的結(jié)構(gòu)稱為哈希表(HashTable)(或者稱散列表)

?3.哈希沖突

了解哈希表中數(shù)據(jù)發(fā)生沖突時的處理方法,也就是了解哈希表的底層原理。

3.1閉散列

閉散列:也叫開放定址法,當發(fā)生哈希沖突時,如果哈希表未被裝滿,說明在哈希表中必然還有空位置,那么可以把key存放到?jīng)_突位置中的“下一個” 空位置中去。

  • 通過哈希函數(shù)獲取待插入元素在哈希表中的位置
  • 如果該位置中沒有元素則直接插入新元素,如果該位置中有元素發(fā)生哈希沖突,使用線性探測找到下一個空位置,插入新元素
  • 采用閉散列處理哈希沖突時,不能隨便物理刪除哈希表中已有的元素,若直接刪除元素會影響其他元素的搜索。比如刪除元素4,如果直接刪除掉,44查找起來可能會受影響。因此線性探測采用標記的偽刪除法來刪除一個元素。
    【哈希表】為什么哈希表的插入/刪除/查找時間復(fù)雜度為O(1),Java學(xué)習(xí)成長記,java

二次探測

線性探測的缺陷是產(chǎn)生沖突的數(shù)據(jù)堆積在一塊,這與其找下一個空位置有關(guān)系,因為找空位置的方式就是挨著往后逐個去找,因此二次探測為了避免該問題,找下一個空位置的方法為: = ( + )% m, 或者:= ( - )% m。其中:i = 1,2,3…, 是通過散列函數(shù)Hash(x)對元素的關(guān)鍵碼 key 進行計算得到的位置,m是表的大小。 對于2.1中如果要插入44,產(chǎn)生沖突,使用解決后的情況為:
【哈希表】為什么哈希表的插入/刪除/查找時間復(fù)雜度為O(1),Java學(xué)習(xí)成長記,java

3.2開散列/哈希桶

開散列法又叫鏈地址法(開鏈法),首先對關(guān)鍵碼集合用散列函數(shù)計算散列地址,具有相同地址的關(guān)鍵碼歸于同一子集合,每一個子集合稱為一個桶,各個桶中的元素通過一個單鏈表鏈接起來,各鏈表的頭結(jié)點存儲在哈希表中。
【哈希表】為什么哈希表的插入/刪除/查找時間復(fù)雜度為O(1),Java學(xué)習(xí)成長記,java

  1. 每個桶的背后是另一個哈希表
  2. 每個桶的背后是一棵搜索樹

以上就是本文所有內(nèi)容,如果對你有幫助的話,點贊收藏支持一下吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-842018.html

到了這里,關(guān)于【哈希表】為什么哈希表的插入/刪除/查找時間復(fù)雜度為O(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • mysql插入數(shù)據(jù)會失???為什么?

    mysql插入數(shù)據(jù)會失?。繛槭裁??

    那天,我還在外面吃成都六姐的冒菜。 牛肉丸裹上麻醬后,狠狠嘬一口,都要入嘴了。 產(chǎn)品經(jīng)理突然發(fā)來消息。 \\\"線上有些用戶不能注冊了\\\" 心想著\\\"關(guān)我x事,又不是我做的模塊\\\",放下手機。 不對,那老哥上禮拜剛離職了,想到這里,夾住毛肚的手 微微顫抖 。 對面繼續(xù)發(fā):

    2024年02月05日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    目錄 一、線性表 1. 線性表的定義 2. 線性表的要素 二、線性表的基本操作 三、線性表的順序存儲結(jié)構(gòu) 1. 定義 2. 順序表的操作? ? ?? a. 插入操作 b. 刪除操作 c. 查找操作 d. 修改操作 e. 代碼實例 ??????? ?一個線性表是由零個或多個 具有相同類型的結(jié)點 組成的有序集合。

    2024年02月03日
    瀏覽(99)
  • 單鏈表——單鏈表的定義及基本操作(頭插法尾插法建表、查找、插入、刪除等)

    單鏈表——單鏈表的定義及基本操作(頭插法尾插法建表、查找、插入、刪除等)

    上一篇我們已經(jīng)完成了順序表的實現(xiàn)和基本操作元素的增加、刪除和查找 (鏈接直達:線性表元素的基本操作(C語言)【數(shù)據(jù)結(jié)構(gòu)】-CSDN博客) 我們知道順序表支持隨機訪問,可以通過下標來直接訪問,同時也可以進行排序等優(yōu)點;但是仍存在局限性,對順序表的中部進行增加

    2024年04月10日
    瀏覽(31)
  • 【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?

    【排序算法】插入排序與希爾排序,你不想知道為什么希爾比插入更快嗎?

    大家好??!本文阿輝講介紹插入排序和希爾排序,并將解釋為什么希爾排序比插入排序更快。 插入排序,實際上是我們平時都使用過的排序,為什么這么說呢???想必大家都玩過撲克牌吧,大家是如何整理手中的牌的呢?一定是想下面這樣對吧?? 沒錯,插入排序也是的么實

    2024年02月02日
    瀏覽(26)
  • this.viewer.entities.removeById()循環(huán)刪除為什么刪除不完

    在 Cesium 中, viewer.entities.removeById() 方法用于從場景中移除指定 ID 的實體。如果您在循環(huán)中使用這個方法來刪除多個實體,有可能會出現(xiàn)刪除不完全的問題,這是因為在刪除實體的同時,實體數(shù)組的長度在不斷減小,可能會導(dǎo)致索引錯位或者遺漏某些實體。 要安全地從實體集

    2024年02月11日
    瀏覽(48)
  • 區(qū)塊鏈的去中心化賬本有和意義?為什么要哈希運算?如何保證數(shù)據(jù)不可篡改?

    區(qū)塊鏈的去中心化賬本有和意義?為什么要哈希運算?如何保證數(shù)據(jù)不可篡改?

    1、中心化賬本是什么? 在互聯(lián)網(wǎng)的世界里,價值是用數(shù)字來呈現(xiàn)的。而數(shù)字文件是可以無限復(fù)制的,在互聯(lián)網(wǎng)的世界數(shù)字具有易錯、易改、易拷貝的特性,但是價值是不能復(fù)制的。為了解決這一難題發(fā)展為由一個中心化的機構(gòu)(支付寶/微信支付/銀聯(lián)等)負責(zé)記賬和記錄賬戶余

    2023年04月23日
    瀏覽(36)
  • 為什么mac插入了u盤沒反應(yīng) 蘋果mac插上usb后怎么找到

    為什么mac插入了u盤沒反應(yīng) 蘋果mac插上usb后怎么找到

    U盤使用簡單,便于攜帶,幾乎每個mac用戶都有一個u盤。使用新的u盤的時候,你有沒有遇到過mac插入了u盤沒反應(yīng)的情況呢?如果你是初次接觸Mac電腦,使用u盤可能會手足無措,因為Mac系統(tǒng)和Windows存在差異,本文就為大家介紹為什么mac插入了u盤沒反應(yīng),蘋果mac插上usb后怎么找

    2024年02月06日
    瀏覽(29)
  • 【譯】為什么AI難以概念化時間

    【譯】為什么AI難以概念化時間

    原作:FNTGAI 引言:如何彌合AI與先驗概念之間的鴻溝 ? 時間不是你能看到、聽到或觸摸到的東西。這就是康德所說的“先驗”,意味著它在感官中沒有對應(yīng)物。你無法給時間貼標簽或分類。這使得AI很難建立時間概念。例如,考慮一下當您詢問 ChatGPT 您與它交談了多長時間時

    2024年02月20日
    瀏覽(28)
  • 為什么不建議企業(yè)用薪資系統(tǒng)來跟蹤項目時間?

    為什么不建議企業(yè)用薪資系統(tǒng)來跟蹤項目時間?

    身處在一個每分鐘都很重要的世界里,企業(yè)必須勤于管理時間和工資。 雖然使用薪資系統(tǒng)進行時間跟蹤似乎是一個實用的解決方案,但這種方法可能導(dǎo)致許多問題。 本文將討論專用的時間跟蹤軟件對任何組織都必不可少的原因,以及依靠薪資系統(tǒng)進行時間管理可能產(chǎn)生的挑

    2024年02月12日
    瀏覽(48)
  • 在容器鏡像中為了安全為什么要刪除 setuid 和 setgid?

    在容器鏡像中刪除 setuid(set user ID)和 setgid(set group ID)權(quán)限通常是出于安全考慮。這兩個權(quán)限位允許進程在執(zhí)行時以文件所有者或文件所屬組的身份運行,而不是以調(diào)用進程的用戶身份運行。 刪除 setuid 和 setgid 權(quán)限的主要原因包括: 減少潛在的權(quán)限濫用: 如果容器中的

    2024年02月20日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包