为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人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 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

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

查看完整回答
反对 回复 2019-03-15
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-03-15
?
大话西游666

TA贡献1817条经验 获得超14个赞

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

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


查看完整回答
反对 回复 2019-03-15
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

你这里其实提了两个问题

散列函数有什么用?

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

为什么不用全名?

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


查看完整回答
反对 回复 2019-03-15
  • 4 回答
  • 0 关注
  • 779 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信