????? 散列偷遗,就是通過某種精心設(shè)計的算法將一段可能很長的數(shù)據(jù)轉(zhuǎn)化為較短的信息串(通常為固定長度)未檩,廣泛應(yīng)用于網(wǎng)頁傳輸中的協(xié)議矛辕,軟件完整性檢查囤屹,計算機(jī)安全領(lǐng)域等熬甚。
散列表是通過特定的哈希算法將一個大的集合映射出一個小的集合,從而的到一個更方便檢索的關(guān)鍵碼肋坚。
哈希算法有很多種形式例如數(shù)字分析法乡括,中平法,折疊法智厌,這里我采用的是除余法诲泌。
基本思路:
??? 取出列表中的每個元素除以待存貯的列表的長度取余數(shù) ,將余數(shù)作為關(guān)鍵碼铣鹏,由于是將一個大集合映射成為一個小集合所以必然出現(xiàn)沖突的情況敷扫,解決沖突我采用開地址的方法,當(dāng)發(fā)生沖突的時候诚卸,將索引加1葵第,直到找到一個空位置時,存入數(shù)據(jù)合溺。
開始代碼:
1. 準(zhǔn)備數(shù)據(jù)和存儲表卒密,為了實現(xiàn)字典,和方便獲取索引值(如果我的存儲列表為空棠赛,那么我是無法獲取索引值的)哮奇,我通過循環(huán)向列表里填充了-1
2. 用除余法定義散列函數(shù)膛腐,求出數(shù)值所對應(yīng)的關(guān)鍵碼,當(dāng)出現(xiàn)沖突時屏镊,用變量a 記錄依疼,每次發(fā)生沖突a+1,用于求出平均查找長度而芥,同時index 也要加1律罢,用于算出正確的關(guān)鍵碼,這時出現(xiàn)了一個情況:如果出現(xiàn)了一種較壞的情況index加到了超出列表的索引范圍。就應(yīng)該將索引值設(shè)為0棍丐,從頭開始存入數(shù)據(jù)
3. 根據(jù)數(shù)據(jù)在列表中檢索找到數(shù)據(jù)(算法和插入類似)误辑,返回數(shù)據(jù)的關(guān)鍵碼,沒找到返回flase
4.主函數(shù)和輸出
整體代碼