zoukankan      html  css  js  c++  java
  • 《算法导论》笔记 第11章 11.2 散列表

    【笔记】

    函数h将关键字域U映射到散列表T[0..m-1]的槽位上。h(k)是关键字k的散列值。

    碰撞:两个关键字映射到同一个槽上。

    链接法:把散列到同一槽中的所有元素都放在一个链表中。

    给定一个能存放n个元素的、具有m个槽位的散列表T,定义T的装载因子α为n/m,即一个链中平均存储的元素数。

    对一个用链接技术来解决碰撞的散列表,在简单一致散列的假设下,一次不成功查找的期望时间为θ(1+α)。

    在简单一致散列的假设下,对于用链接技术解决碰撞的散列表,平均情况下一次成功的查找需要θ(1+α)时间。

    平均来说,查找操作需要常数常量的时间。


    【练习】

    11.2-1 假设用一个散列函数h,将n个不同的关键字散列到一个长度为m的数组T中。假定采用的是简单一致散列法,那么期望的碰撞数是多少?更准确的,集合{{k,l}:k!=l,且h(k)=h(l)}的期望的基是多少?

    不会!


    11.2-2 对于一个用链接法解决碰撞的散列表,说明将关键字5、28、19、15、20、33、12、17、10插入到该表中的过程。设该表中有9个槽位,并设散列函数为h(k)=k mod 9。



    11.2-3 Marley教授做了这样一个假设,即如果将链接模式改动一下,使得每个链表都能保持已排序顺序,散列的性能就可以有很大的提高。Marley教授的改动对成功查找、不成功查找、插入和删除操作的运行时间有什么影响?

    查找仍与链表长度成正比,唯一的区别是插入操作也与链表长度成了正比。


    11.2-4 说明在散列表内部,如何通过将所有未占用的槽位链接成一个自由链表,来分配和去配元素的存储空间。假定一个槽位可以存储一个标志、一个元素加上一个或两个指针。所有的字典和自由链表操作应具有O(1)的期望运行时间。该自由链表需要是双链表吗?

    应该是双向链表。

    初始化时相邻槽之间两个指针指向前驱与后继。

    存储槽x时,x前驱的后继为x的后继,x后继的前驱为x前驱,即可将空槽删去一个。


    11.2-5 证明:如果|U|>nm,有一个U的大小为n的子集,它包含了均散列到同一槽位中的关键字,这样对于带链接的散列表,最坏情况下的查找时间为θ(n)。





  • 相关阅读:
    三维聚源
    js--继承
    1.名字忘了
    html5--画布
    Html批量读取json
    get获取Json
    5-jQuery
    Sublime Text
    Redis,JedisPool工具类
    向指定url发送Get/Post请求
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681499.html
Copyright © 2011-2022 走看看