想问大家一个散列表的问题。

zhangxh19870612 2009-05-27 11:13:47
今天在学散列函数,看到这样一句话:
① h:U→{0,1,2,…,m-1} ,通常称h为散列函数(Hash Function)。散列函数h的作用是压缩待处理的下标范围,使待处理的|U|个值减少到m个值,从而降低空间开销。
我不明白,把关键字都映射到散列表上,这样散列表的大小和关键字集合的大小应该是一样的啊,为什么会说散列表的大小小于关键字集合的大小呢?请大家帮我解答下,谢谢。
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongpy 2009-05-28
  • 打赏
  • 举报
回复
散列函数将关键字转化成索引值来访问散列表,多个关键字对应一个索引值,从而降低空间开销。
crst_zh 2009-05-28
  • 打赏
  • 举报
回复
散列不是一一对应,既可以把 把多的映射到少的区间,也可以把少的映射到多的区间,在映射之后有一个映射函数,可以直接去寻址。

多的对应到少的区间必然会出现冲突,这就要用冲突消解的办法,比如开放地址法,再散列等等。
Treazy 2009-05-28
  • 打赏
  • 举报
回复
输入一个Key 经过散列函数产生一个 散列表Key
由于不同的Key 经过散列函数可能会产生相同的 散列表Key
因此经过散列函数的产生的散列表,其大小肯定小于等于Key的大小
光宇广贞 2009-05-28
  • 打赏
  • 举报
回复
我也不明白,

看楼下,从我这里开始站队。
mengde007 2009-05-28
  • 打赏
  • 举报
回复
搞了半天还是没明白过来;
liliangbao 2009-05-28
  • 打赏
  • 举报
回复
帮顶
zhangxh19870612 2009-05-28
  • 打赏
  • 举报
回复
如果是多个关键字经散列函数映射是同一地址的话,这个就叫冲突吧?这个不是根据解决冲突的方法,把他们另外安排到其他的地方吗?这样的话,关键字的大小还是和散列表一样的啊应该,这是怎么回事呢?这个问题我都想了很久了,不知道是怎么回事。

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧