JavaScript创建散列表时,散列函数有什么用?

发布于 2022-09-06 13:05:52 字数 384 浏览 22 评论 0

在看 数据结构与算法JavaScript描述 这本书时有个疑惑
为什么需要散列函数来将值转为散列值?
如有个数组,如果我想通过名字快速查找在peopel数组中的位置

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


let _people = 取首字母的散列函数(peopele)

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

为什么不直接使用整个名字做散列值?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

や三分注定 2022-09-13 13:05:52

扩展性啊,扩展性
如果又要往people里面放一个age或者addr字段的话,你的_people怎么办?
别说约定|之类的,那都是妖术,妖术啊少年!

和我恋爱吧 2022-09-13 13:05:52

就算加了几个字段,但是首字母和index对应关系还是没变! 还是不需要散列函数呀?

挽清梦 2022-09-13 13:05:52

首先楼主没有明白散列函数的意义
散列函数的意义在于提高查找的效率

一段数据结构可能很大,比如100W条数据,其中以A开头的数据有10W条,查找Abc
如果没有散列函数,你要找到这个数据,可能需要遍历100W条数据,才能找到,但是如果有散列函数,
比如散列首字母,那么只要查找hash表,就可以减少查找的目标变成10W条
那么就可以确定最多只需要遍历这10W条数据就可以了

丢了幸福的猪 2022-09-13 13:05:52

谢邀,你这里其实提了两个问题

散列函数有什么用?

散列函数起到一个映射(mapping 或者投映 project)的作用。试想一下,随着开发后面如果出现了处理重名的需求时候你要怎么改。用散列函数那么只需要在函数中修改一下映射关系即可。

为什么不用全名?

用全名也是可行的,它例子这里姓氏都不一样,那么只用一个字符可以减少比较次数。(不太符合常理,个人觉得这个例子不是很好)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文