HashMap是由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突存在的;在JDK8后,当链表长度大于阈值(默认为8)时,链表转化为红黑树,以减少搜索时间。 红黑树简述: https://juejin.im/post/5a27c6946fb9a04509096248#com ...
分类:
其他好文 时间:
2019-02-24 00:47:51
阅读次数:
278
哈希表:是一种key-value存储数据的结构 使用哈希表的两个步骤: 1.无序数组:将键值key转化为对应的索引(f(key)),根据索引来寻找对应的值(value) 2.解决哈希冲突:当key值不同,但f(key)相同 哈希函数:将key映射到对应的索引的映射函数f(x)即为哈希函数。 1.键为 ...
分类:
编程语言 时间:
2019-01-18 17:25:11
阅读次数:
154
文章部分代码图片和总结来自参考资料 哈希和常用的方法 散列,从中文字面意思就很好理解了,分散排列,我们知道数组地址空间连续,查找快,增删慢,而链表,查找慢,增删快,两者结合起来形成散列表。如下图。 常见的hash 散列方法有 : 直接定址法:直接以关键字k或者k加上某个常数(k+c)作为哈希地址。 ... ...
分类:
编程语言 时间:
2018-12-23 12:47:58
阅读次数:
193
基本概念 哈希表(hash table):又称散列表,其基本思路是,设要存储的元素个数是n,设置一个长度为m的连续存储单元,以每个元素的关键字作为自变量,通过哈希函数(h(k))把k映射到一个内存单元,并把该元素存在这个内存单元中,把像这样构造的线性表存储结构称为哈希表。 哈希冲突(hash col ...
分类:
其他好文 时间:
2018-12-17 23:54:23
阅读次数:
315
我们可以维护一个$f[i][j]$代表%$i$意义下得$j$的答案。然后维护就炸了。 先设$x=\sqrt{n}$然后我们发现,当$i x$时我们直接暴力复杂度为$O(x)$,然后我们对$i\leq{x}$的i维护$f[i][j]$,这样询问复杂度$O(1)$,维护复杂度$O(x)$。就可以通过此题 ...
分类:
其他好文 时间:
2018-12-15 19:44:17
阅读次数:
164
想了好久,没想到优秀的解法,结果是个暴力~~大吃一静.jpg~~ 分类讨论,预处理$p\le \sqrt{n}$ 的情况,其他直接暴力,复杂度$O(n \sqrt{n} )$ cpp include include include include using namespace std; int p ...
分类:
其他好文 时间:
2018-11-25 13:21:25
阅读次数:
118
HashMap集合的默认容量为什么是16而不是15? 假设有两个key的hash值为8、9; --容量16-- 8 &(16-1) 1000 & 1111 = 1000 =>8号位置 9 &(16-1) 1001 & 1111 = 1001 =>9号位置 --容量15--hash冲突,碰撞 8 &( ...
分类:
其他好文 时间:
2018-11-17 19:05:33
阅读次数:
207
根号算法 这道题暴力92pts。。。 所以说暴力出奇迹! 其实用什么哈希都是在做幌子,要你求的就是从$k$位置开始,隔$p$个数的数字加起来的和。 我们考虑用一个二维数组存下来,用$ans[p][k]$表示模数为$p$,余数为$k$的答案。 如果把所有的模数都处理,跟暴力是没有差别的,甚至还会更劣。 ...
分类:
其他好文 时间:
2018-11-04 23:01:59
阅读次数:
158
哈希冲突处理实践 实验要求 把自己的学号加21,例如学号为1,把22添加到序列后面,使用链地址法,解决冲突。 编程实现,并测试。 要求计算asl,输出冲突次数。 关键代码及结果截图 "代码链接" ...
分类:
其他好文 时间:
2018-10-22 21:22:29
阅读次数:
118
散列查找 两项基本工作 计算位置 解决冲突 散列函数的构造方法 1. 直接定址法 2. 除留取余法 3. 数字分析法 4. 折叠法 5. 平方取中法 字符关键词的散列函数构造 1. ASCII 码加和法 2. 移位法 ...
分类:
编程语言 时间:
2018-10-18 10:50:57
阅读次数:
210