商店允许顾客通过电话订购商品,并在几天后上门自取。商店的数据库使用客户的电话号码作为其检索的关键字(客户知道自己的电话号码,而且这些电话关键字几乎是唯一的)。如何组织商店的数据库,以允许更加高效的进行插入和检索操作呢?

将纸质订单表格放在10x10的箱数组中,使用客户电话号码的后两位作为散列索引(为什么将后两位作为索引而不是前两位),将订单放到合适的箱子格中。当客户来取商品时,销售人员顺序搜索对应箱子中的所有订单——这就是利用顺序搜索来解决散列冲突的开放散列。


非哈希表特点:关键字在表中的位置和本身没有确定的关系,检索的过程将每个关键字与数据库中的关键字进行比较,查找的效率取决于比较的次数(如果为顺序组织,可以进行二分检索,时间复杂度为O(log(n));如果为非顺序组织,只能顺序检索,时间复杂度为O(n))。

哈希表的特点:关键字与他的位置有确定的关系,因此插入和检索都非常方便。关键问题:1、设计好的散列函数,使得各种可能的结果尽可能随机 2、当冲突出现时,如何解决冲突

1、开放定址法

假如多个关键字key0,key1,key2,...keys经过散列函数映射为同一地址,即产生地址冲突,那么可以为这些keyi(0<=i<=s)求得一个地址序列。

H0 = H(key0)    Hi = ( H(keyi) + di ) mod m

对增量id有两种取法:1、di = 1,2,3,... (线性探测再散列)   2、 di = 1,-1,2,-2,4,-4,......k2,-k2(平方探测再散列)

2、链地址法

将哈希地址相同的元素链接在同一链表中

3、再哈希法

通过另一个哈希函数计算新的地址值,直到不冲突为止

4、建立公共溢出区

Hash(散列函数)简单应用引出解决散列冲突的四种方法的更多相关文章

  1. java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...

  2. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    最近时间有点紧,暂时先放参考链接了,待有时间在总结一下: 查了好多,这几篇博客写的真心好,互有优缺点,大家一个一个看就会明白了: 参考 1. 先看这个明白拉链法(链地址法),这个带源码,很好看懂,只不 ...

  3. Maven 知识点总结以及解决jar报冲突的几种方法

    1.常见的命令 Compile Test Package Install Deploy Clean 2.坐标的书写规范 groupId 公司或组织域名的倒序 artifactId 项目名或模块名 ve ...

  4. Hash算法解决冲突的四种方法

    Hash算法解决冲突的方法一般有以下几种常用的解决方法 1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为 ...

  5. 【Java集合学习】HashMap源码之“拉链法”散列冲突的解决

    1.HashMap的概念 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io ...

  6. Python:说说字典和散列表,散列冲突的解决原理

    散列表 Python 用散列表来实现 dict.散列表其实是一个稀疏数组(总是有空白元素的数组称为稀疏数组).在一般书中,散列表里的单元通常叫做表元(bucket).在 dict 的散列表当中,每个键 ...

  7. Hash冲突的四种解决办法

    一.哈希表简介 非哈希表的特点:关键字在表中的位置和它自检不存在一个确定的关系,查找的过程为给定值一次和各个关系自进行比较,查找的效率取决于给定值进行比较的次数. 哈希表的特点:关键字在表中位置和它自 ...

  8. Java集合(九)哈希冲突及解决哈希冲突的4种方式

    Java集合(九)哈希冲突及解决哈希冲突的4种方式 一.哈希冲突 (一).产生的原因 哈希是通过对数据进行再压缩,提高效率的一种解决方法.但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致 ...

  9. after及before伪元素及解决父元素塌陷的几种方法

    一.伪类和伪元素 CSS中伪类和伪元素有很多,也很好用!如果熟练使用的话可以解决很多问题 首先明白什么是伪类:伪类是基于当前元素的状态,而不是元素的id class等静态标志,它是动态变化的,它会在一 ...

随机推荐

  1. angularjs与vue循环数组对象是区别

    一直都觉得angularjs和vue是想类似的,今天在限制加载的数据条数时发现 其不同,话不多说,直接看代码: 1.angularjs <li ng-repeat="item in d ...

  2. 实验楼学习linux第一章第四节linux目录结构及文件基本操作

    linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...

  3. 20155325 信息安全技术 实验二 Windows口令破解

    内容一览 实验结果 遇到的问题 思考题 详细步骤与解析(为了使存做笔记资料而做) 实验结果 字典破解 暴力破解 -不同密码强度的破解时间比较 用户名 密码 破解方式 破解时间 TEST (年月日) 字 ...

  4. 20155331 2016-2017-2 《Java程序设计》第九周学习总结

    20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...

  5. 20145209 实验二 《Java面向对象程序设计》 实验报告

    20145209 实验二 <Java面向对象程序设计> 实验报告 实验内容 1.初步掌握单元测试和TDD. 2.理解并掌握面向对象三要素:封装.继承.多态. 3.初步掌握UML建模. 4. ...

  6. 什么是thinkphp

    ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验 ...

  7. MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 的解决方法

    解决方法如下:  方法 1.在线修改提高允许的max_connection_errors数量: A. 登录Mysql数据库查看max_connection_errors: mysql>show ...

  8. DSP5509的USB协议开发

    1. 使用的板子 2. 原理图相关,这个1.5K的上拉电阻,全速和高速上拉在D+,低速上拉在D- 3. 中断处理函数没有搞明白是什么意思?这个工程我怎么基本看不懂? interrupt void US ...

  9. 【MySQL高级特性】高性能MySQL第七章

    2017-07-25 14:15:43 前言:MYSQL从5.0和5.1版本开始引入了很多高级特性,例如分区.触发器等,这对有其他关系型数据库使用 背景的用户来说可能并不陌生.这些新特性吸引了很多用户 ...

  10. 八、EnterpriseFrameWork框架基础功能之自定义报表

    本章写关于框架中的“自定义报表”,类似上章“字典管理”也是三部分功能组成,包括配置报表.对报表按角色授权.查看报表:其核心思想就是实现新增一个报表而不用修改程序代码.不用升级,只需要编写一个存储过程, ...