在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  C++  HTML/ JavaScript創(chuàng)建散列表時(shí),散列函數(shù)有什么用?

JavaScript創(chuàng)建散列表時(shí),散列函數(shù)有什么用?

在看 數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述 這本書時(shí)有個(gè)疑惑
為什么需要散列函數(shù)來將值轉(zhuǎn)為散列值?
如有個(gè)數(shù)組,如果我想通過名字快速查找在peopel數(shù)組中的位置

let people = [
    {name: '大傻子', tel: '138111111'},
    {name: '二傻子', tel: '138222222'},
    {name: '小傻子', tel: '138333333'}
]


let _people = 取首字母的散列函數(shù)(peopele)

// 得到 
// _people = {
    '大': 0,
    '二': 1,
    '小': 2
// }

為什么不直接使用整個(gè)名字做散列值?

回答
編輯回答
陌如玉

就算加了幾個(gè)字段,但是首字母和index對(duì)應(yīng)關(guān)系還是沒變! 還是不需要散列函數(shù)呀?

2018年5月23日 14:24
編輯回答
久礙你

擴(kuò)展性啊,擴(kuò)展性
如果又要往people里面放一個(gè)age或者addr字段的話,你的_people怎么辦?
別說約定|之類的,那都是妖術(shù),妖術(shù)啊少年!

2018年2月19日 17:43
編輯回答
涼心人

謝邀,你這里其實(shí)提了兩個(gè)問題

散列函數(shù)有什么用?

散列函數(shù)起到一個(gè)映射(mapping 或者投映 project)的作用。試想一下,隨著開發(fā)后面如果出現(xiàn)了處理重名的需求時(shí)候你要怎么改。用散列函數(shù)那么只需要在函數(shù)中修改一下映射關(guān)系即可。

為什么不用全名?

用全名也是可行的,它例子這里姓氏都不一樣,那么只用一個(gè)字符可以減少比較次數(shù)。(不太符合常理,個(gè)人覺得這個(gè)例子不是很好)

2017年5月21日 16:04
編輯回答
夢(mèng)一場(chǎng)

首先樓主沒有明白散列函數(shù)的意義
散列函數(shù)的意義在于提高查找的效率

一段數(shù)據(jù)結(jié)構(gòu)可能很大,比如100W條數(shù)據(jù),其中以A開頭的數(shù)據(jù)有10W條,查找Abc
如果沒有散列函數(shù),你要找到這個(gè)數(shù)據(jù),可能需要遍歷100W條數(shù)據(jù),才能找到,但是如果有散列函數(shù),
比如散列首字母,那么只要查找hash表,就可以減少查找的目標(biāo)變成10W條
那么就可以確定最多只需要遍歷這10W條數(shù)據(jù)就可以了

2018年5月27日 20:39