首页 > 其他分享 >数据结构笔记

数据结构笔记

时间:2023-08-28 21:46:20浏览次数:45  
标签:取模 hash 复杂度 笔记 hashCode 冲突 哈希 数据结构

2-3树&红黑树

 

 

哈希表

哈希函数的设计

例如26个字符 new一个int[26]。可以用来做哈希

整型值

小范围正整数,直接使用正整数。

大整数 通常做法 取模  比如取后四位 mod 1000 模一个素数分布效果更好

如果对日期这种取模,只能在01-31,会造成分布不均匀。

要具体分析。

浮点型

32位或64位机器,浮点型会有特殊表示。

32位前8位

64位是前11位

使用整数的方式来解析

 

Java的hashCode

haseSet存数据,会先计算hashCode,有冲突则通过equals判断是否是同一个对象。

 

哈希冲突

链地址法

  • 数组,长度M
  • 元素对M取模
    • (hashCode(k1) & 0x7fffffff) % M
    • 前面是31位的0做与,去掉第一位的符号位。
  • 算完模后,例如4,索引为4的位置,就存上就好了。
  • 有冲突时
  • 在链表尾部加冲突的节点。
  •  也可以用平衡树存

扩容 hashMap 默认 数组长度*0.75  即 16*0.75=12 12个长度就扩容。

 

开放地址法

所有索引都有机会存不同的hash值。

正常先存储,遇到hash冲突,就把冲突的元素,向后去找空的空间。

比如对10取hash值。

占满了,就会一直探测。

改进:

平方探测法

每次向下找平方,不是+1

二次hash法

 

对于开放地址法,扩容合适,也是O(1)复杂度

再Hash法 Rehashing

Coalesced Hashing

结合seperate Chaining 和 Open Addressing

 

 

SQRT O(sqrt(n)) 根号N时间复杂度

代码实现更方便,虽然时间复杂度会比线段树O(logn)高一些。

分块分组的思想,解决区间问题。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

todo

 

标签:取模,hash,复杂度,笔记,hashCode,冲突,哈希,数据结构
From: https://www.cnblogs.com/jiangym/p/17661054.html

相关文章

  • 数据结构与算法之美读书笔记
    读书笔记链接 时间复杂度分析只关注执行次数最多的一段代码加法法则:总复杂度等于量级最大的那段代码的复杂度乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 最好、最坏、平均时间复杂度 数组内存中一块连续的存储空间,有效使用CPU的缓存机制,可以很方便......
  • C笔记---01基础篇
    一、C语言内存分区1、程序代码区:存放CPU执行的机器指令。2、数据区  2.1常量区:字符串、数字等常量存放在常量区,const修饰的全局变量存放在常量区;常量区的内存是只读的,程序结束后由系统释放。  2.2全局区(静态区)又分为两个部分  (a)全局初始化数据区/静态数据区(data......
  • 梅科尔工作室-IoT-南向开发第四次培训笔记
    当使用MQTT协议进行开发时,以下是一些值得注意的方面:选择MQTT代理:MQTT代理是负责消息传递的中间件,你可以选择使用开源的MQTT代理,如EclipseMosquitto、EMQX等,或者使用云服务提供商的MQTT服务。定义主题(Topic)结构:在设计时,你需要合理地定义主题结构,以便发布者和订阅者可以有效地进行......
  • Markdown学习笔记
    标题标题只有1-6#ctrl+横排数字键字体加粗两个**斜体一个**列表无续列表-/**加空格有序列表数字+点加空格 引用这是一个引用右书名号加空格表格直接右键建立         代码块   这是一个代码块  ......
  • javascript学习笔记day7
    今天学了挺多新东西的,在学校教的东西都是很老了东西了,果然互联网完全真能靠自学,下面是今天的笔记varletconst优先使用const,即不会改变的变量,假设后续发现这个变量会改变就再使用letconsole.log打印属性console.dir打印信息innerText只修改标标签内容不解析标签innerHTML识......
  • 一般图最大匹配学习笔记
    Uoj#79LuoguP6113带花树算法(匈牙利算法\(Pro~max\))我们考虑现在访问到\(u\)点(黑色),\(u\)连向\(v\)点,分类讨论\(v\)点。1、\(v\)点没有被匹配过,直接令\(u\)点和\(v\)点匹配,然后更新答案2、\(v\)点匹配过,但之前还未被访问过,那么把\(v\)点染成白色,然后把\(v\)......
  • 学习笔记:分块
    前言非常粗略概念什么是分块算法?很简单就是暴力把一段长度为\(n\)的序列分成\(\sqrt{n}\)块块长为\(\sqrtn\)然后进行一系列暴力乱搞它的好处就是非常暴力好!先来看一道板子题目要求我们区间加一个数区间查询一段和这个东西怎么搞?考虑分块!首先呢把原数列......
  • 学习笔记414—Sigmoid函数求导
    Sigmoid函数求导基础知识: Sigmoid函数: Sigmoid图形: 生成Sigmoid图形代码:importtorchfromd2limporttorchasd2l%matplotlibinlinex=torch.arange(-8.0,8.0,0.1,requires_grad=True)sigmoid=torch.nn.Sigmoid()y=sigmoid(x)d2l.plot(x.detach(),y.detach(......
  • WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单
       现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作。下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考.......
  • WebService开发笔记 3 -- 增强访问 WebService 的安全性
    在WebService开发笔记1中我们创建了一个WebService简单实例,下面我们通过一个简单的用户口令验证机制来加强一下WebService的安全性:1.修改WebService服务端spring配置文件ws-context.xml<beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi=......