JavaScript创建散列表时,散列函数有什么用?
在看 数据结构与算法JavaScript描述
这本书时有个疑惑
为什么需要散列函数来将值转为散列值?
如有个数组,如果我想通过名字快速查找在peopel数组中的位置
let people = [
{name: '大傻子', tel: '138111111'},
{name: '二傻子', tel: '138222222'},
{name: '小傻子', tel: '138333333'}
]
let _people = 取首字母的散列函数(peopele)
// 得到
// _people = {
'大': 0,
'二': 1,
'小': 2
// }
为什么不直接使用整个名字做散列值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
扩展性啊,扩展性
如果又要往
people
里面放一个age
或者addr
字段的话,你的_people
怎么办?别说约定
|
之类的,那都是妖术,妖术啊少年!就算加了几个字段,但是首字母和index对应关系还是没变! 还是不需要散列函数呀?
首先楼主没有明白散列函数的意义
散列函数的意义在于提高查找的效率
一段数据结构可能很大,比如100W条数据,其中以A开头的数据有10W条,查找Abc
如果没有散列函数,你要找到这个数据,可能需要遍历100W条数据,才能找到,但是如果有散列函数,
比如散列首字母,那么只要查找hash表,就可以减少查找的目标变成10W条
那么就可以确定最多只需要遍历这10W条数据就可以了
谢邀,你这里其实提了两个问题
散列函数有什么用?
散列函数起到一个映射(mapping 或者投映 project)的作用。试想一下,随着开发后面如果出现了处理重名的需求时候你要怎么改。用散列函数那么只需要在函数中修改一下映射关系即可。
为什么不用全名?
用全名也是可行的,它例子这里姓氏都不一样,那么只用一个字符可以减少比较次数。(不太符合常理,个人觉得这个例子不是很好)