慕碼人8056858
2019-03-13 21:19:03
在看 數據結構與算法JavaScript描述 這本書時有個疑惑為什么需要散列函數來將值轉為散列值?如有個數組,如果我想通過名字快速查找在peopel數組中的位置let people = [ {name: '大傻子', tel: '138111111'}, {name: '二傻子', tel: '138222222'}, {name: '小傻子', tel: '138333333'}]let _people = 取首字母的散列函數(peopele)// 得到 // _people = { '大': 0, '二': 1, '小': 2// }為什么不直接使用整個名字做散列值?
4 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
首先樓主沒有明白散列函數的意義散列函數的意義在于提高查找的效率
一段數據結構可能很大,比如100W條數據,其中以A開頭的數據有10W條,查找Abc
如果沒有散列函數,你要找到這個數據,可能需要遍歷100W條數據,才能找到,但是如果有散列函數,
比如散列首字母,那么只要查找hash表,就可以減少查找的目標變成10W條
那么就可以確定最多只需要遍歷這10W條數據就可以了

慕田峪9158850
TA貢獻1794條經驗 獲得超8個贊
你這里其實提了兩個問題
散列函數有什么用?
散列函數起到一個映射(mapping 或者投映 project)的作用。試想一下,隨著開發后面如果出現了處理重名的需求時候你要怎么改。用散列函數那么只需要在函數中修改一下映射關系即可。
為什么不用全名?
用全名也是可行的,它例子這里姓氏都不一樣,那么只用一個字符可以減少比較次數。(不太符合常理,個人覺得這個例子不是很好)
添加回答
舉報
0/150
提交
取消