--- 哈希表和哈希沖突 ---

哈希(散列)方法是對插入的數據通過哈希函數計算出一個哈希地值,并將這個哈希地址作為儲存改數據的地址,這樣下次再查找這個數據時,只需要通過哈希函數再獲取到該地址然后直接去拿就好

這樣就做到了不經過任何比較,一次就能從表中拿到元素的O(1)的時間復雜度,他將哈希函數計算出來的值和目標值建立了一一映射的關系

比如有一個數組大小為5? 下標為0 1 2 3 4

再插入值時,我對他進行 %5 取余操作,再儲存2時就映射到了下標2,于是將值放到數組下標2的位置,%5 這就是一個簡單的哈希函數而構建出來的表(這個數組)就稱為哈希表(散列表)

沖突

對于剛剛的例子,很容易看出單數據多了,就會出現不同的數據映射到相同的位置,這種不同的數據通過哈希函數計算出來了相同的哈希地址,就稱為哈希沖突或者哈希碰撞,把具有相同哈希值但是不是相同的數據稱為同義詞

沖突的避免

要知道哈希沖突時不可解決的,但數據量大之后,什么可能都會出現,而我們能做的是減低沖突率

避免哈希函數的最有效的辦法是優化哈希函數,哈希函數計算出來的地址應該要平均分布到空間中,如果有m個地址,那么哈希函數計算出來的值就應該平均的分布到0 - m-1

負載因子的調節

負載因子的定義 α = 數據的總數 / 哈希表的長度

α是哈希函數裝滿程度的標注因子,且發送哈希沖突的可能性和α成正比,因為數據越多,發送哈希沖突的可能性更大

所以要降低沖突率就要減低負載因子,而儲存數據的總數是不能變的,于是需要擴大哈希表的大小

沖突的解決分為開散列和閉散列

閉散列

當沖突發生時,哈希表還沒有被填滿,所以表中一定還有空的位置,那么就找出這個空的位置來放沖突元素

線性探測

若計算出的哈希地址沖突了,就往后繼續探測一個空的位置,直接放入

再刪除元素的時候,采用的是標志位的偽刪除法,因為使用線性探測法,一個哈希地址對應的有可能是多個元素,而這其他的元素,要基于這個哈希地址來往后查找,如果這個位置被刪除了,那么就表示這里就沒有元素,而和他沖突的元素也就不存在了

二次探測

線性探測的缺點是沖突元素容易產生堆積,這于尋找下一個位置有關系,因為是挨個挨個找到空位置,而二次探測為了避免該問題是跳著尋找空位置的,尋找下標的公式是

,也可以是h0-i^2,Hi是最終的下標,H0是計算出來的沖突地址,m是表大小,i是1 2 3.... 是動態遞增的,沖突一次i就加一

有研究表明,但α 小于0.5時,新的數據一定能插入,且任何位置都不會被探測倆次,因此再還有一般的空位置時,就不會存在沖突的情況,那么再搜索時就不用考慮沖突的情況,但如果大于了0.5就要考慮擴容表了

所以哈希表對空間的利用率比較底,這是哈希的缺陷

開散列 哈希桶

開散列又叫鏈地址法,將沖突的元素歸于一個集合,每一個子集稱為一個桶桶中的元素又鏈表聯系起來

實現:在哈希表中儲存的是一個鏈表,當沖突的元素就直接儲存再這個鏈表中,再查找時就先通過哈希函數找到這個鏈表,再遍歷這個鏈表來獲取到元素,因為沖突的次數一般都是常熟級的,所以遍歷這個鏈表的時間也可以近似忽略,所以搜索還是O(1) 的復雜度

但當元素過多之后,遍歷這個鏈表所需要的時間也不能被接受了,于是這個桶也可以是另一個哈希表或者是一顆搜索樹

雖然哈希的發展是一直在和哈希沖突做斗爭,但是我們在平時使用時,哈希沖突發送的情況也不是很頻繁,對于增刪查改的時間復雜度視為是O(1)? 的

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93854.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數學建模-評價類問題-優劣解距離法(TOPSIS)

1-AI帶你認識TOPSIS📘 一、TOPSIS 方法簡介1. ??基本定義:????TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution)??,中文通常稱為:???優劣解距離法?????逼近理想…

Go協程:從匯編視角揭秘實現奧秘

🚀 Go協程:從匯編視角揭秘實現奧秘 #Go語言 #協程原理 #并發編程 #底層實現 引用: 關于 Go 協同程序(Coroutines 協程)、Go 匯編及一些注意事項。 🌟 前言:重新定義并發編程范式 在當今高并發…

MySQL 事務(重點)

MySQL 這個東西注定是可能會被多個用戶/客戶端來同時訪問的,這是肯定的,MySQL 中存放的都是數據,數據可能有一個上層線程在用,也有可能另一個線程也要用...數據是被所有人共享的,所以就注定了 MySQL 這樣的服務在一個時…

uniapp:h5鏈接拉起支付寶支付

場景:APP內點擊支付寶支付,后臺返回類似鏈接https://qr.alipay.com/bax***********c3050 通常做法是,使用plus.runtime.openURL(deeplink);先打開瀏覽器,瀏覽器會提示打開支付寶,之后是支付流程。現在可以省略跳轉h5的…

吳恩達 Machine Learning(Class 3)

Week 11.1 K-means Cluster centroidK-means 是無監督學習中聚類算法的一種,核心在于更新聚類質心;首先將每個點分配給幾個聚類質心,取決于那些點離哪個質心更近;然后將幾個聚類質心移動到分配給他的所有點的平均值,不…

MyBatis 動態查詢語句詳解:讓 SQL 更靈活可控

MyBatis 動態查詢語句詳解:讓 SQL 更靈活可控 在日常的數據庫操作中,我們經常會遇到需要根據不同條件拼接 SQL 語句的場景。比如查詢用戶時,可能需要根據姓名、年齡、性別等多個條件進行篩選,而這些條件往往是動態變化的 —— 有時…

Java基礎語法three

一、一維數組一維數組初始化數據類型[] 數組名new 數據類型[數組長度]//動態初始化數據類型[] 數組名new 數據類型[]{值}//靜態初始化數據類型[] 數組名{值}數組長度一旦確定,就不可更改。數組是序排序;數組屬于引用數據類型的變量,數組的元素…

【數據結構】排序算法全解析:概念與接口

1.排序的概念及其運用 1.1 排序的概念 排序:所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。 穩定性:假定在待排序的記錄序列中,存在多個具有相同的關鍵字的…

在 CentOS 7 上使用 LAMP 架構部署 WordPress

CentOS 7 LAMP 架構部署 WordPress全步驟本文將詳細介紹如何在 CentOS 7 系統上通過 LAMP(Linux Apache MariaDB PHP)架構部署 WordPress 博客平臺。 在CentOS 7上基于LAMP架構部署WordPress 一、系統基礎配置 1. 修改主機名(本機IP&#…

Node.js導入MongoDB具體操作

在Node.js應用程序中,導入MongoDB是一項常見任務。本文將詳細介紹如何在Node.js中連接和操作MongoDB數據庫,包括安裝必要的包、配置連接、執行基本的CRUD操作等步驟。1. 安裝必要的包首先,確保你已經安裝了Node.js和npm。然后,通過…

HTML--pre標簽的作用

原文網址&#xff1a;HTML--pre標簽的作用-CSDN博客 簡介 本文介紹HTML里pre標簽的作用。 <pre> 元素表示預定義格式文本。里邊的文本會保留原格式&#xff0c;以等寬字體的形式展現出來&#xff0c;文本中的空白符&#xff08;比如空格和換行符&#xff09;都會顯示出…

機器學習--數據預處理

目錄 一、數據清洗&#xff1a;讓數據純凈如新 1、缺失值處理&#xff1a; 2、異常值處理 3、重復值處理 二、數據變換&#xff1a;重塑數據的 “形狀” 1、歸一化 2、標準化 三、總結與展望 機器學習小白必看&#xff1a;數據預處理實戰筆記 最近投身于機器學習的學習…

Python 數據可視化:Matplotlib 與 Seaborn 實戰

Python 數據可視化&#xff1a;Matplotlib 與 Seaborn 實戰????在當今數據驅動的時代&#xff0c;數據可視化成為了理解和傳達數據信息的關鍵手段。Python 作為一門強大的編程語言&#xff0c;擁有豐富的數據可視化庫&#xff0c;其中 Matplotlib 和 Seaborn 尤為突出。本文…

計算機網絡技術學習-day4《路由器配置》

目錄 一、路由器基礎認知 1. 路由器的核心功能 2. 路由器與交換機的區別 二、路由器配置基礎操作 1. CLI&#xff08;命令行界面&#xff09;模式體系 2. 基礎配置命令示例 &#xff08;1&#xff09;基礎信息配置 &#xff08;2&#xff09;接口IP地址配置&#xff08;…

IDEA(十四) IntelliJ Idea 常用快捷鍵(Mac)

目錄準備&#xff1a;Mac鍵盤符號和修飾鍵說明一、編輯類快捷鍵二、Search/Replace&#xff08;查詢/替換&#xff09;三、編譯、運行四、debug 調試五、Navigation&#xff08;導航&#xff09;六、Refactoring&#xff08;重構&#xff09;七、VCS/Local History八、Live Tem…

八月月報丨MaxKB在教育及教學科研領域的應用進展

在2025年5月的“MaxKB用戶應用月度報告”中&#xff0c;我們對MaxKB開源智能體平臺在教育行業的典型應用場景進行了總結。MaxKB在教育行業的應用主要集中在教學輔助、學術研究、校園服務、行政辦公、財務管理、招生等場景。 目前&#xff0c;“DeepSeekMaxKB”的組合正在被包括…

一周學會Matplotlib3 Python 數據可視化-繪制自相關圖

鋒哥原創的Matplotlib3 Python數據可視化視頻教程&#xff1a; 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib&#xff0c;學習Matplotlib圖形參數基本設置&…

第三十三天(信號量)

非常非常非常.....的重要在共享內存的代碼里面p1.c實質是有問題lt._flag 1;//這里先置1if(c Q)sprintf(lt._buf,"quit");elsesprintf(lt._buf,"大家好&#xff0c;%d 我系渣渣輝. %d 是兄弟就來砍我吧!!! %d",i,i1,i2);while(*((int *)shmptr));//如果別…

Scikit-learn通關秘籍:從鳶尾花分類到房價預測

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠。 決策樹/SVM/KNN算法對比 模型評估指標解析 讀者收獲&#xff1a;掌握經典機器學習全流程 …

rsync + inotify 數據實時同步

rsync inotify 數據實時同步 一、rsync簡介 rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步&#xff0c; 支持本地復制&#xff0c;或者與其他SSH、rsync主機同步 二、rsync三種命令 Rsync的命令格式常用的有以下三種&#xff1a;&#…