大数据算法导论第四周

来源:互联网 发布:怎么开淘宝天猫店 编辑:程序博客网 时间:2024/05/18 02:42

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)是黑色
  • 如果每个节点是红色的,则它的两个节点都是黑色的
  • 对每个节点,从该节点到其他所有后代叶节点的简单路径上,均包含相同数目的黑色节点
    这里写图片描述

红黑树是最好的搜索树

  • 一棵树有n个内部节点的红黑树的高度至多为2lg(n+1)