《数据结构》学习-- Hash(1) --Hash简介

本文是《数据结构与算法分析》的学习笔记,介绍了哈希表的优缺点,如常数时间内的插入、删除和查找操作。讨论了哈希表的构成要素,包括哈希表大小、哈希函数以及冲突解决方案。强调了哈希函数选择的重要性,应尽量减少冲突并保持数据分布均匀。最后,提到了字符串哈希函数的计算方法,并指出哈希表在面试中的重要性。
摘要由CSDN通过智能技术生成

本系列是《数据结构与算法分析-C语言描述》(Data Structures and Algorithm Analysis in C,作者Mark Weiss)一书的学习笔记,当我在做cc150需要补某个知识点时,就会把这本书翻出来学习一下,同时分享~

如果你有任何问题和建议,希望能与我分享.

1. Hash Table(哈希表)的优缺点

优点:平均常数时间(constant average time)内完成插入、删除和寻找(insert,delete,find)操作。
缺点:任何顺序信息(order information)将不被有效记录,因此诸如findMax,findMin或者按顺序打印全表,都无法在线性时间内被完成。

2. Hash Table 概览

一个最简单的Hash Table例子就是一个(非常大的)数组。举例来说,如果我们知道输入数据是[0,999] 范围内的整数,那么我们只要创建一个长度为1000的int数组,那么对于插入一个数据(把相应数组位置置1),寻找一个数据(判断数组位置是否为1),删除一个数据(把数组位置置0),都非常容易。

3. Practical Hash Table

当然,实际上我们的输入数据可能范围非常大,以至于无法创建一个那么大的数组,或者输入数据不是整数而是字符串、浮点数或者用于自定义的类型。因此,直接映射、纯数组方式构成的Hash Table不能满足我们的所有需求。

3.1 Hash Table要素

要构成实用的Hash Table,有几大要素:

  1. Hash表主体
    Hash表的主体一般是一个由和输入数据相同的数据结构构成的数组。如,输入数据是int,那么就是int数组,如输入数据是string,那么就是string数组。
  2. Hash表大小
    一般来说,Hash表的大小应该是一个质数,且表的大小和填充内容的多少也有关。(在下一章中详细介绍)
  3. Hash Function
    用来将输入数据映射到一个整数,从而找到应该放在Hash表中哪个位置。
  4. 冲突解决方案(Collision Resolution)
    实际中,Hash的大小可能没有输入数据范围大,又因为Hash Function不可能保证所有输入数据都映射到不同的位置,因此两个不同的输入数据被分配到同一个Hash表位置是常有的事,如何解决这种冲突是非常非常重要的。(在下一章中详细介绍)

3.2 Hash Function

正如上面说的,Hash Function的作用是将输入数据映射到不同的Hash表位置。举例来说,如果Hash表大小为10,输入数据是正整数,那么我们可以将输入数据模10以后的结果作为Hash表位置,这样保证每个数据都存在一个对应的合法的位置。

3.2.1 Hash Function如何选择呢?

答案是不一定。具体情况具体分析。但有几个主要的参考要素:

  1. 尽可能减少冲突。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值