1樓:孟羽然
有一點你搞錯了。hash演算法不是為了快速找出相同的元素,而是為了快速判斷兩個元素不相等。
所有雜湊函式都有如下乙個基本特性:如果兩個雜湊值是不相同的(根據同一函式),那麼這兩個雜湊值的原始輸入也是不相同的。這個特性是雜湊函式具有確定性的結果。
但另一方面,雜湊函式的輸入和輸出不是一一對應的,如果兩個雜湊值相同,兩個輸入值很可能是相同的,但並不能絕對肯定二者一定相等。
例如:設計乙個針對字串的hash演算法,簡單地返回字串的首字母:
def hash_string(str):
return str[0]
那麼:hash_string(a)=hash(gfdgfd)=g
hash_string(b)=hash(xzcfs)=x
這樣就可以最快速地判斷出兩個字串不相等。這個hash演算法常用於將大量檔案分散儲存。
對於首字母相同的兩個字串,本演算法得到的hash值肯定相同,這就是出現了命中衝突。解決命中衝突有很多策略,比如:再雜湊法、鏈位址法、公共溢位法……等等。
乙個好的hash演算法,應該保證高命中率和均勻分布。
2樓:凱瑟喵精
找相同字元:
把字串分成單字元陣列;
for(i=0;i 什麼是雜湊演算法? 3樓:諸葛恕褚女 雜湊函式是乙個數學方程式,它可用文字(如電子郵件資訊)來生成稱為資訊摘要的**。著名的雜湊函式如:md4,md5,shs。 用於數字鑑別的雜湊函式必須有特定的屬性,使它在密碼使用方面有足夠的安全性。尤其是,下面的內容一定不能被發現: 用來雜湊出特定值的文字。也就是說,如果你知道資訊摘要,你應該不能解出資訊的內容。 用來雜湊出相同值的兩個不同的資訊。 如果能夠發現用來雜湊出特定值的某個資訊,攻擊者就能夠用假資訊替代經過簽名的真資訊。而有些人也能夠聲稱自己實際上簽名了雜湊出相同值的乙個不同的資訊,以此虛假地否認這條資訊。這樣就破壞了數字簽名的無法否認的屬性。 如果能夠發現用來雜湊出相同值的兩個不同的資訊,攻擊者就能夠給乙個資訊簽名,這個資訊和另乙個資訊都可以雜湊出相同值,但二者的意思卻是完全不同。 hash演算法原理 4樓:匿名使用者 雜湊表,它是基於高速訪問的角度設計的,也是一種典型的「空間換時間」的做法。顧名思義,該資料結構能夠理解為乙個線性表,可是當中的元素不是緊密排列的,而是可能存在空隙。 雜湊表(hash table,也叫雜湊表),是依據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。 比方我們儲存70個元素,但我們可能為這70個元素申請了100個元素的空間。70/100=0.7,這個數字稱為負載因子。 我們之所以這樣做,也是為了「高速訪問」的目的。我們基於一種結果盡可能隨機平均分布的固定函式h為每乙個元素安排儲存位置,這樣就能夠避免遍歷性質的線性搜尋,以達到高速訪問。可是因為此隨機性,也必定導致乙個問題就是衝突。 所謂衝突,即兩個元素通過雜湊函式h得到的位址同樣,那麼這兩個元素稱為「同義詞」。這類似於70個人去乙個有100個椅子的飯店吃飯。雜湊函式的計算結果是乙個儲存單位位址,每乙個儲存單位稱為「桶」。 設乙個雜湊表有m個桶,則雜湊函式的值域應為[0,m-1]。 5樓:匿名使用者 這個問題有點難度,不是很好說清楚。 我來做乙個比喻吧。 我們有很多的小豬,每個的體重都不一樣,假設體重分布比較平均(我們考慮到公斤級別),我們按照體重來分,劃分成100個小豬圈。 然後把每個小豬,按照體重趕進各自的豬圈裡,記錄檔案。 好了,如果我們要找某個小豬怎麼辦呢?我們需要每個豬圈,每個小豬的比對嗎? 當然不需要了。 我們先看看要找的這個小豬的體重,然後就找到了對應的豬圈了。 在這個豬圈裡的小豬的數量就相對很少了。 我們在這個豬圈裡就可以相對快的找到我們要找到的那個小豬了。 對應於hash演算法。 就是按照hashcode分配不同的豬圈,將hashcode相同的豬放到乙個豬圈裡。 查詢的時候,先找到hashcode對應的豬圈,然後在逐個比較裡面的小豬。 所以問題的關鍵就是建造多少個豬圈比較合適。 如果每個小豬的體重全部不同(考慮到毫克級別),每個都建乙個豬圈,那麼我們可以最快速度的找到這頭豬。 缺點就是,建造那麼多豬圈的費用有點太高了。 如果我們按照10公斤級別進行劃分,那麼建造的豬圈只有幾個吧,那麼每個圈裡的小豬就很多了。我們雖然可以很快的找到豬圈,但從這個豬圈裡逐個確定那頭小豬也是很累的。 所以,好的hashcode,可以根據實際情況,根據具體的需求,在時間成本(更多的豬圈,更快的速度)和空間本(更少的豬圈,更低的空間需求)之間平衡。 hash演算法原理? 6樓:慣性水瓶 雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,這個小的二進位制值稱為雜湊值。 雜湊演算法用來產生一些資料片段(例如訊息或會話項)的雜湊值的演算法。使用好的雜湊演算法,在輸入資料中所做的更改就可以更改結果雜湊值中的所有位;因此,雜湊對於檢測資料物件(例如訊息)中的修改很有用。 雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。 雜湊函式的計算結果是乙個儲存單位位址,每個儲存單位稱為「桶」。設乙個雜湊表有m個桶,則雜湊函式的值域應為 [0,m-1]。 hash是什麼意思 7樓:匿名使用者 hash,一般翻譯做「雜湊」,也有直接音譯為」雜湊「的,就是把任意長度的輸入(又叫做預對映, pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一的確定輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。 hash主要用於資訊保安領域中加密演算法,他把一些不同長度的資訊轉化成雜亂的128位的編碼裡,叫做hash值. 也可以說,hash就是找到一種資料內容和資料存放位址之間的對映關係 了解了hash基本定義,就不能不提到一些著名的hash演算法,md5 和 sha1 可以說是目前應用最廣泛的hash演算法,而它們都是以 md4 為基礎設計的 8樓:匿名使用者 是用來加密的一種方式檔案校驗 我們比較熟悉的校驗演算法有奇偶校驗和crc校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。 md5 hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(checksum)演算法,不少unix系統有提供計算md5 checksum的命令。 數字簽名 hash 演算法也是現代密碼體系中的乙個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了乙個重要的角色。 對 hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。 而且這樣的協議還有其他的優點。 鑑權協議 如下的鑑權協議又被稱作"挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。 9樓:匿名使用者 hash全稱是「hash house harriers」(簡稱「hash"、「hhh」,或「 3h」 ),是一項世界性的休閒活動,起源於2023年馬來西亞的吉隆坡,如今在全世界184個國家幾千個城市中都有開展,包括中國的北京、廣州、上海、深圳、烏魯木齊等城市。 hash活動沒有固定的成員和組織,也不存在固定的模式,各個城市的具體做法各有不同,但所有的hash都有兩個共同的主題:跑步和啤酒,其參加者也因此自稱「the running club with a drinking problem」。經過幾十年的發展,hash活動已經超越簡單的體育鍛煉活動,而形成了一種特色鮮明、獨具魅力的文化。 超級帥 nix繫系統 es unix 例子 ivs7aet4nzqpm 說明 linux或者其他linux核心系統中 長度 13 個字元 描述 第1 2位為salt,例子中的 iv 位salt,後面的為hash值 系統 md5 unix 例子 1 12345678 xm4p3prkbgknntaqg... hash,一般翻譯做 雜湊 也有直接音譯為 雜湊 的,就是把任意長度的輸入 又叫做預對映,pre image 通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一的確定輸入值... 呃,沒大明白,增加鍵值對,意思是這樣麼 my hash 1,2,3,4 初始化my key a my value b hash value 說的是這個?對雜湊的values進行排序,my sort values sort values hash 就這樣加上去就好.h a a b b foreach ...md5演算法的輸出結果就是hash值麼
MD5和HASH區別,MD5和Hash有什麼區別和聯絡,儘量用簡潔的語言描述
perl怎麼增加hash鍵值對,Perl中如何改變雜湊中的值?