算法设计与分析课程Part1笔记(6)

6. 哈希表与平衡二叉树

6.1 全域散列(UniversalHashing)


        根据假设可知,有边为0,那么求碰撞的概率转化为求左边等式等于0的概率,可以证明左边等式是集合中的一个随机元素。

可以举例子n=7, x4-y4=2 or3,a4=0,1,2,3,4,5,6时,计算左边的值。

        所以可以看到为0的概率为1/n,这样碰撞的概率也是1/n。

6.2 链式哈希表的性能分析

        假设对数据集S进行哈希时,是通过全域哈希簇中随机的一个哈希函数,并且每个哈希函数是链式实现,有n个buckets。

那么所有操作的时间复杂度为O(1)。这里以查询操作为例进行证明。

        证明之前,将条件进行一下声明,这里的哈希函数是从全域散列中随机选取的;数据集S的数量为O(n),通常S的元素个数与n的比值α成为装载因子,为O(1),在链式哈希表中,装载因子可以大于1,而开放式地址法中是不可能超过1的;通过哈希函数h计算的过程复杂度为O(1)。


6.3 Bloom Filter

Bloom Filter支持插入和查找,注意,不支持删除。Bloom Filter能够保证只要插入过就能查找成功,但是存在较小的概率对于未插入过的元素也查找成功。

Bloom Filter由于其在较小空间下的高效性,使得应用十分广泛,其最早用于拼写错误的查找,现在还用于非法密码的监测和网络路由中。

Bloom Filter由两部分组成,一个是n维的比特数组A,即数组中的每个元素非0即1;另一个是k个哈希函数,k值为常数也不会太大。

 

6.4 平衡二叉搜索树

平衡二叉树的构造:每个节点有一个key值;节点有左右叶子节点指针和双亲指针;每个节点的叶子节点不会超过2个。

BST的特点:对于节点x,任意;任意.

BST的一些操作:

  BST中的查找search(key k)

    --start at root

    --if k<key traverse left

    --if k>key traverse right

  BST中的插入insert(key k):

    --search for k (unsuccessfully)

    --rewrite final nul pointer to point to thenew node with key k

  BST中的Min/Max:

    --start at root

    --follow left (right) child pointers untilyou cann’t anymore

    --return

  BST中的前驱和后继节点的访问:

    --if k’s left subtree no-empty, return maxkey in left subtree

    --otherwise: follow parent pointers untilyou get to a key less than k

  BST中按序访问(即二叉树的中根遍历):

    --let r=root of BST with usbtrees Tl and Tr

    --recurse Tl

    --print r

    --recurse Tr

  BST中的删除(k):

    --search for k

    --if k node has no children just delete knode

    --if k node has one child, just splice outk node (替换)

    --if k node has two children,

      --computer k’s predecessor L

      --swap k and L

注,BST中的search/insert/deletion操作,在最坏的情况下,是O(Height).

BST可以用于查找第i大或小的元素,这里需要树中的每个节点存储额外的信息来便于处理,任意节点x,其存储了size(x),若y和z为x的孩子节点,则size(x)=size(y)+size(z)+1.


6.5 红黑树

        在BST中的search和insert都和树的高度有关,红黑树通过一些设定,可以保证这两者的执行时间为O(logn).

        红黑树的特性:每个节点为红或者黑;根节点是黑色的;在每一行没有2个节点同时为红的情况发生(所谓的同一行,这里说的是父子两个节点,这个条件也就是说红色节点的孩子节点只有可能为黑);从根出发到叶子节点的路径上黑节点的数目等同。

        注:长度为3的链表不能为一颗红黑树。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胖5566

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值