大数据算法导论第四周
2017-12-07 16:14
190 查看
PPT课件地址
使用链表解决冲突
散列函数
布隆过滤器
散列函数个树与假正概率
二叉搜索树
查询二叉树
插入
删除
二叉树的弱点
红黑树
红黑树是最好的搜索树
习题
布隆过滤器
二叉树
红黑树
B树
关键字转化为自然数
除法散列
乘法散列
现实中常用的散列函数:MD5,SHA
原理
TREE-SEARCH(x,k)
if(x==NIL or k==x.key)
return x
if(k< x.key)
return TREE-SEARCH(x.left,k)
else
return TREE-SEARCH(x.right,k)
ITEARTIVE-TREE-SEARCH(x,k)
while (x !=NIL and k!=x.key)
if(k< x.key) x=x.left
else
x=x.right
return x;
插入
TREE-INSERT(T,z)
y=NIL
x=T.root
while (x!=NIL)
y=x
if(z.key < x. key)
x=x.left
else
x=x.right
z.p=y
if(y==NIL)
T.root=z //tree T was empty
else if(z.key < y.key)
y.left = z
else
y.right = z
添加
RB-INSERT(T,z)
y=T.nil
x=T.root
while (x!=T.nil)
y=x
if(z.key< x.key)
x=x.left
else
x=x.right
z.p=y
if(y==T.nil)
T.root = z
else if(z.key< y.key)
y.left = z
else y.right =z
z.left = T.nil
z.right = T.nil
z.color = RED
RB-INSERT-FIXUP(T,z)
while(z.p.color == RED)
if(z.p==z.p.p.left)
y=z.p.p.right
if(y.color == RED)
z.p.color = BLACK
y.color =BLACK
z.p.p.color =RED
z=z.p.p
else if z==z.p.right
z=z.p
LEFT-ROTATE(T,z)
z.p.color = BLACK
z.p.p.color =RED
RIGHT-ROTATE(T,z.p.p)
else(same as then clause with “right” and “left” exchanged)
T.root.color = BLACK
随机构建二叉树
跟节点是黑色
每个叶节点(NIL)是黑色
如果每个节点是红色的,则它的两个节点都是黑色的
对每个节点,从该节点到其他所有后代叶节点的简单路径上,均包含相同数目的黑色节点
目录
用户数据查找(搜索)的数据结构使用链表解决冲突
散列函数
布隆过滤器
散列函数个树与假正概率
二叉搜索树
查询二叉树
插入
删除
二叉树的弱点
红黑树
红黑树是最好的搜索树
习题
用户数据查找(搜索)的数据结构
散列表布隆过滤器
二叉树
红黑树
B树
散列表
使用链表解决冲突
散列函数
什么是好的散列函数关键字转化为自然数
除法散列
乘法散列
现实中常用的散列函数:MD5,SHA
布隆过滤器
用途:判断某个值是否在指定的集合中存在原理
散列函数个树与假正概率
二叉搜索树
查询二叉树
查询TREE-SEARCH(x,k)
if(x==NIL or k==x.key)
return x
if(k< x.key)
return TREE-SEARCH(x.left,k)
else
return TREE-SEARCH(x.right,k)
ITEARTIVE-TREE-SEARCH(x,k)
while (x !=NIL and k!=x.key)
if(k< x.key) x=x.left
else
x=x.right
return x;
插入
TREE-INSERT(T,z)
y=NIL
x=T.root
while (x!=NIL)
y=x
if(z.key < x. key)
x=x.left
else
x=x.right
z.p=y
if(y==NIL)
T.root=z //tree T was empty
else if(z.key < y.key)
y.left = z
else
y.right = z
添加
RB-INSERT(T,z)
y=T.nil
x=T.root
while (x!=T.nil)
y=x
if(z.key< x.key)
x=x.left
else
x=x.right
z.p=y
if(y==T.nil)
T.root = z
else if(z.key< y.key)
y.left = z
else y.right =z
z.left = T.nil
z.right = T.nil
z.color = RED
RB-INSERT-FIXUP(T,z)
while(z.p.color == RED)
if(z.p==z.p.p.left)
y=z.p.p.right
if(y.color == RED)
z.p.color = BLACK
y.color =BLACK
z.p.p.color =RED
z=z.p.p
else if z==z.p.right
z=z.p
LEFT-ROTATE(T,z)
z.p.color = BLACK
z.p.p.color =RED
RIGHT-ROTATE(T,z.p.p)
else(same as then clause with “right” and “left” exchanged)
T.root.color = BLACK
二叉树的弱点
已排序数据,瘦长型二叉树随机构建二叉树
红黑树
每个节点或是红色,或是黑色跟节点是黑色
每个叶节点(NIL)是黑色
如果每个节点是红色的,则它的两个节点都是黑色的
对每个节点,从该节点到其他所有后代叶节点的简单路径上,均包含相同数目的黑色节点
红黑树是最好的搜索树
一棵树有n个内部节点的红黑树的高度至多为2lg(n+1)相关文章推荐
- 第四周任务2:多文件组织项目
- 算法导论实验:第二章插入排序 P10
- (第四周任务一) 定义类的成员函数
- 大数据系列修炼-Scala课程02
- 第四周上机任务--任务三--设计一个“正整数”类,并通过一系列的成员函数对其性质进行做出判断(VS2008)
- 大数据系列修炼-Scala课程08
- 第四周实验报告(任务3)
- 集训第四周(高效算法设计)H题 (贪心)
- 第四周作业 4
- 暑假集训第四周阶段二E - Max Sum最大连续子数组和
- 第四周任务三 各种数的判断
- 第四周工作总结
- 第四周任务一
- 第四周1002题解
- 第四周上机任务3
- 学习《算法导论》第二章 合并排序 总结
- 第四周实验报告3(判断一个数是什么数)
- 算法导论基础篇:两个栈实现一个队列
- 第四周任务三:设计一个“正整数”类
- 算法导论—B树