(js描述的)数据结构[哈希表1.1](8)
(js描述的)数据结构[哈希表1.1](8)
一.数组的缺点
1.数组进行插入操作时,效率比较低。
2.数组基于索引去查找的操作效率非常高,基于内容去查找效率很低。
3.数组进行删除操作,效率也不高。
二.哈希表
1.几乎所有的编程语言都有直接或间接的应用这种数据结构
2.哈希表是基于 数组 实现的,但相对于数组有很多优势。
1.它可以提供非常快速的 插入-删除-查找 操作
2.无论多少数据,插入和删除需要接近常量的时间。即O(1)的时间级
3.哈希表的速度比树还要快,基本可以瞬间找到想要的元素。
4.哈希表相对于树来说编码要容易
3.哈希表对于数组的一些不足
1.哈希表中的数据是没有顺序的,所以不能以一种固定的方式来遍历其中的元素。
2.通常情况下,哈希表中的key是不允许重复的,不能放置相同的key,用于保存不同的元素。
4.哈希表的实质
1.哈希表不同于(数组和链表,甚至于树可以画出他的结构)。
2.他的结构就是数组,但他神奇的地方在于它对下标值的一种变换,这种变换称为 哈希函数 , 通过哈希函数可以获取到 HashCode。
5.哈希表的一些概念
1.哈希化:将大数字转化为数组范围内下表的过程,我们称之为哈希化。(对大数字取余)
2.哈希函数:通常我们会将单词转化成大数字,大数字在进行哈希化的代码实现放在一个函数中,这个韩式称为哈希函数。
3.哈希表:最终的数据插入到的这个数组,对整个结构的封装,我们称之为是一个哈希表。
6.解决 哈希化后的下标值冲突 方案
------------------------1. 链地址法---------------------------

1)每个存储单元存放的不再是单个数据,而是一个链条。
2)链条的结构可以是,数组或者链表。
3)比如是链表,一旦哈希化的下标值发生重复。将重复的元素插入到链表的首端或者尾端即可。
4)查询的时候,先根据哈希化后的下标值找到相应的位置,再取出链表,依次查询寻找需要的数据
5)根据业务需要选择数组还是链表,需要插在链条的最前面,选择链表。
插在后端选择数组或者链表都可以。
------------------------2. 开放地址法---------------------------

1)开放地址法的主要工作方式是 寻找空白的的单元格来添加重复的数据
2)寻找位置的方法有三种 线性探测 , 二次探测, 再哈希化。
-------------线性探测---------------
1. 下标值重复时,采取index+1向后寻找空白位置插入数据。
2. 查找数据时,先去用哈希化后的索引去取值比对,如果不符合,向下继续线性查找。
3. 查找数据时,当哈希化后的索引值上的数据不符合,如果在线性查找时遇到数组项空白时,则停止查找,此数组中不存在目标数据。
4. 删除某数组中存的数据时,不能把值设置为null,可以进行特殊处理(比如设置为-1) 。来防止下次线性查找失败。
!!!!线性探索的问题:线性探测会产生聚集,即数据聚在在一连串的存储单元当中。影响之后的插入查询 删除 操作的效率,影响哈希表的性能。
-------------二次探测---------------
1. 二次探测, 对步长进行了优化,index + 1 平方 , + 2 平方, +3 平方,这样就可以一次探测比较长的距离,避免聚集带来的影响。
2. 可是还是会造成步长不一 的 一种聚集,还是会影响效率。
-------------再哈希化---------------
1.把关键字用另一个哈希函数再做一次哈希化,用这个哈希化 的 结果 作为步长,对于指定的关键字,步长在探索中是不变的,不同的关键字使用不同的步长。
2.需要和第一个哈希函数不同,不能输出为0.
3. stepszies(步长) = constant(常数,小于数组容量) - (key % constant)
结论: -------链地址法,使哈希表性能下降较为稳定。------开发地址法,由于填充因子,步长等因素会使性能下降的急剧。
(js描述的)数据结构[哈希表1.1](8)的更多相关文章
- (js描述的)数据结构[哈希表1.3](10)
1.哈希表的完善 1.容量质数(limit):需要恒为质数,来确保元素的均匀分布. 1)普通算法: 判断一个数是否为质数 function isPrime(num) { for (var i = 2; ...
- (js描述的)数据结构[哈希表1.2](9)
一. 优秀的哈希函数 1.快速的计算: 需要快速的计算来获得对应的hashCode(霍纳法则来减少乘除次数) 2.均匀的分布: 尽可能将元素映射到不同的位置,让元素在哈希表中均匀分布 二.哈希表的扩容 ...
- (js描述的)数据结构[队列结构,优先级队列](3)
(js描述的)数据结构[队列结构](3) 一.队列结构的特点: 1.基于数组来实现,的一种受限的线性结构. 2.只允许在表头进行删除操作,在表尾进行插入操作. 3.先进先出(FIFO) 二.队列的一些 ...
- 数据结构 哈希表(Hash Table)_哈希概述
哈希表支持一种最有效的检索方法:散列. 从根来上说,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素. 哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表.哈希 ...
- (js描述的)数据结构[字典](7)
(js描述的)数据结构[字典](7) 一.字典的特点 1.字典的主要特点是一一对应关系. 2.使用字典,剋通过key取出对应的value值. 3.字典中的key是不允许重复的,而value值是可以重复 ...
- (js描述的)数据结构[集合结构](6)
(js描述的)数据结构[集合结构](6) 一.集合结构特点 1.集合中的元素不能重复. 2.集合是无序的. 二.集合的代码实现 function Set() { this.items = {} //1 ...
- (js描述的)数据结构[双向链表](5)
(js描述的)数据结构[双向链表](5) 一.单向链表的缺点 1.只能按顺序查找,即从上一个到下一个,不能反过来. 二.双向链表的优点 1.可以双向查找 三.双向链表的缺点 1.结构较单向链表复杂. ...
- (js描述的)数据结构[链表](4)
(js描述的)数据结构 [链表](4) 一.基本结构 二.想比于数组,链表的一些优点 1.内存空间不是必须连续的,可以充分利用计算机的内存,事项灵活的内存动态管理. 2.链表不必再创建时就确定大小,并 ...
- (js描述的)数据结构[栈结构](2)
(js描述的)数据结构[栈结构](2) 一.什么是栈结构 1.一种受限制的线性结构,这种结构可以基于数组来实现. 2.可以抽象成一个容器,上面的是栈顶,底下的是栈底.所以仅允许对栈顶进行操作, 二.栈 ...
随机推荐
- Vue2.0 【第一季】第2节 v-if v-else v-show 指令
目录 Vue2.0 [第一季]第2节 v-if v-else v-show 指令 第二节 v-if v-else v-show 指令 2.1 v-if指令.v-else指令: 2.2 v-show的使 ...
- 问题描述:判断一个整数 n 是否为 2 的幂次方
一.2的幂次方的基本定义 什么样的数为2的幂次方?例如2^0=1,2^1=2,2^2=4……,符合公式2^n(n>=0)的数称为2的幂次方. 如何判断一个数是否为2的幂次方呢?基本思路:把一个数 ...
- 【JAVA进阶架构师指南】之一:如何进行架构设计
前言 本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优 ...
- treeselect 异步拿到数据后 要经过一个过滤 然后放入options 否则组件会崩溃
事件缘由:由于城市树会反复调用,所以不用api每次调用,改用数据缓存一次读取,各处使用.然后我把调用的数据放入treeselect,发现组件就崩溃了,但是api读取的数据就没问题. 查看不是props ...
- consoleInfo 输出 数组套对象 不显示...的方法 序列化 再反序列化
consoleInfo (...args) { // console.info('this', this) const name = this.$options.name let outName = ...
- 作为一位Vue工程师,这些开发技巧你都会吗?
路由参数解耦 一般在组件内使用路由参数,大多数人会这样做: export default { methods: { getParamsId() { return this.$route.params. ...
- 矩阵快速幂-QuickPow
矩阵快速幂引入: 1.整数快速幂: 为了引出矩阵的快速幂,以及说明快速幂算法的好处,我们可以先求整数的幂.如果现在要算X^8:则 XXXXXXXX 按照寻常思路,一个一个往上面乘,则乘法运算进行7次. ...
- Spring框架——AOP
Spring AOP 面向切面编程,OOP面向对象编程,将程序中所有参与模块都抽象成对象,然后通过对象之间的相互调用完成需求. AOP是OOP的一种补充,是在另外一个维度上抽象出对象,具体是指程序运行 ...
- 补充《解析“60k”大佬的19道C#面试题(上)》
[广州.NET技术俱乐部]微信群的周杰写了一篇文章<解析“60k”大佬的19道C#面试题(上)>https://www.cnblogs.com/sdflysha/p/20200325-19 ...
- 【2019多校第一场补题 / HDU6582】2019多校第一场E题1005Path——最短路径+网络流
HDU6582链接 题意 在一张有向图中,有一个起点和一个终点,你需要删去部分路径,使得起点到终点的最短距离增加(并不要求需要使得距离变成最大值),且删除的路径长度最短.求删去的路径总长为多少 分析 ...