哈希冲突
哈希冲突
不同关键字通过相同哈希哈数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞。
哈希冲突的解决:
1、开放地址法(前提是散列表的长度大于等于所要存放的元素)
发生哈希冲突后,按照某一次序找到下一个空闲的单元,把冲突的元素放入。
2、线性探查法
从发生冲突的单元开始探查,依次查看下一个单元是否为空,如果到了最后一个单元还是空,那么再从表首依次判断。如此执行直到碰到了空闲的单元或者已经探查完所有单元。
3、平方探查法
从发生冲突的单元加上12,22,32,…,n2,直到遇到空闲的单元
4、双散列函数探查法
定义两个散列函数,分别为s1和s2,s1的算法和前面一致,s2取一个1~m-1之间并和m互为素数的数。s2作为步长。
更适合于造表前无法确定表长的情况;平均查找长度较短;适合结点规模较大时。
5、分离链接法:
将哈希值相同的元素构成一个链表,head放在散列表中。一般链表长度超过了8就转为红黑树,长度少于6个就变为链表。缺点:指针需要额外的空间
树
树的遍历
在学习链表和数组这两种线性的数据结构的时候,元素之间的次序是十分容易看出的,毕竟元素的位置就是排着队的,自带次序关系,如果想要遍历整个数据结构,无非就是选择倒着遍历还是正着遍历。
但是在学习二叉树这种半线性结构的时候,也想要遍历整棵树,可是树没有数组、链表这么明显的次序关系,所以需要人为的定义次序关系,即前中后序(VLR,LVR,LRV),这一个过程本质上就是将树的半线性结构转换成线性
结构。
而对于任意一个树节点,选择前中后序中的任意一种,就等于将这个树节点和它的左右孩子的顺序给出。以前只是机械的记忆顺序。
下面举例说明,这是一颗二叉树。由整体思维可以将这个二叉树看成三个大的结点。

即蓝红紫结点,按照我们人为规定的次序,先序,中序,后序整体进行排序

这个时候整体上就将一棵二叉树排好序了。
那么现在需要局部的排序。
局部的排序也需要按照实现人为规定的次序。
由于蓝色结点只有一个元素,所以前中后序都只有他自己一个,就不必排序
所以下面只需要看红色和紫色。
红色子树局部排序

紫色子树局部排序

最后将局部排序结果和相同顺序的整体结果组合。
先序遍历:

中序遍历:
全站分卷索引 · 42 卷
- 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
- 2找出所有子集的异或总和再求和
- 3哈希表
- 4哈希冲突
- 5红黑树与AVL树
- 6平衡二叉树(AVL树)
- 7将有序数组转换为二叉搜索树
- 83. 分割(组合问题)
- 9方法论
- 10509. 斐波那契数
- 1162. 不同路径
- 1296. 不同的二叉搜索树
- 13322. 零钱兑换
- 14爬楼梯
- 15背包小总结 (01背包、完全背包)
- 16子序列问题
- 17674. 最长连续递增序列
- 18115. 不同的子序列
- 19总结
- 20技巧总结
- 21时间序列模型
- 22区间DP模型
- 23664. 奇怪的打印机
- 24编辑距离
- 25回文串
- 26DP递推公式总结
- 27排序算法
- 28其他算法
- 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
- 302. TOP N问题
- 313. 分布式的TOP N问题
- 322. Astar数据结构 + 公式
- 334. 代码实现
- 345. 总体代码
- 35堆排序
- 36单源最短路
- 37思维导图
- 38链表
- 39回溯
- 40贪心
- 41动态规划
- 42排序