亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

誰能給講講哈希碼

誰能給講講哈希碼

慕粉小蝸牛 2016-06-20 17:52:32
對哈希碼一直有點困惑
查看完整描述

2 回答

已采納
?
KFEB5

TA貢獻2條經驗 獲得超4個贊

哈希碼可以理解為數據的名字,在一大堆數據里找到某個數據,需要指定數據一個唯一的名字(重名可不好)。數據的名字可以隨便起,自然用編號最好。
生成hash碼的方法多種多樣。核心就是唯一標識數據。
數據有了名字之后怎么使用這個名字呢?建立一個花名冊,就像分配宿舍一樣,一個名字后面對應一個宿舍,根據名字就可以迅速找到目標,否則就要一個個房間找過來。這比喻這基本上和hash表的原理類似。另一個更合適的比喻是字典,新華字典那種。
恩,差不多就是這樣

查看完整回答
3 反對 回復 2016-06-20
  • 慕粉小蝸牛
    慕粉小蝸牛
    什么地方能用到哈希碼,什么地方用不到那,比如集合list比較值就不用哈希碼,hashset則用,,,能說下嗎,謝謝
  • KFEB5
    KFEB5
    集合list,比較值?沒有看懂。list和hashset的算法和用途是不一樣的。hashset主要是為了快速的隨機查找數據(隨機的意思是任意的查找),比如我想知道‘鋼鐵’的意思,那么我就會通過鋼鐵的拼音規則查找字典目錄,這個查找目錄的過程依賴于這個目錄的結構(拼音按照字母表排序規則),可以理解為hashcode的編碼規則,是一種邏輯上的數據結構。 而list就沒有這樣的要求,可以隨便線性的放置任意數據,你可以選擇按序排放,但并不需要為每個對象起個名字(hashcode)。 實際上你可以仔細看一下asd8532,他提供的解釋非常棒。我為了盡量讓語句通俗一點,用了很多比喻,但是任何比喻都會偏離原來的本意。你用不著在我的比喻上進行拓展的想象,直接觀察相關的算法可以有更加準確的認識。
?
asd8532

TA貢獻143條經驗 獲得超187個贊

哈希算法并不是一個特定的算法而是一類算法的統稱。哈希算法也叫散列算法,一般來說滿足這樣的關系:f(data)=key,輸入任意長度的data數據,經過哈希算法處理后輸出一個定長的數據key。同時這個過程是不可逆的,無法由key逆推出data。

如果是一個data數據集,經過哈希算法處理后得到key的數據集,然后將keys與原始數據進行一一映射就得到了一個哈希表。一般來說哈希表M符合M[key]=data這種形式。
哈希表的好處是當原始數據較大時,我們可以用哈希算法處理得到定長的哈希值key,那么這個key相對原始數據要小得多。我們就可以用這個較小的數據集來做索引,達到快速查找的目的。

稍微想一下就可以發現,既然輸入數據不定長,而輸出的哈希值卻是固定長度的,這意味著哈希值是一個有限集合,而輸入數據則可以是無窮多個。那么建立一對一關系明顯是不現實的。所以"碰撞"(不同的輸入數據對應了相同的哈希值)是必然會發生的,所以一個成熟的哈希算法會有較好的抗沖突性。同時在實現哈希表的結構時也要考慮到哈希沖突的問題。

密碼上常用的MD5,SHA都是哈希算法,因為key的長度(相對大家的密碼來說)較大所以碰撞空間較大,有比較好的抗碰撞性,所以常常用作密碼校驗。


查看完整回答
4 反對 回復 2016-06-20
  • 2 回答
  • 3 關注
  • 2053 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號