算法导论学习笔记(3)

课时6 顺序统计 中值

  同时找出最小值和最大值:先将一对输入元素互相比较,然后把较小者与当前最小值比较,把较大者与当前最大值比较。

  randomized-select算法:查找数组中的第i小的元素

    依靠快速排序,把数组分为2部分,看要查找的元素在哪个部分中,接着查找。

    T(n)=Ο(n),在平均情况下,任何顺序统计量都可以在线性时间内得到

  select算法:是一个最坏情况运行时间为Ο(n)的选择算法,基本思想是保证对数组的划分是个好的划分

    1 将数组划分为n/5组,每组5个元素,最后一组由(n mod 5)个元素组成

    2 寻找每组的中位数,插入排序

    3 找出中位数的中位数

    4 根据中位数的中位数进行划分

    5 看i在哪部分中

 

课时7 哈希表

  前置知识:

  栈:后进先出

  队列:先进先出

  链表:链表中的顺序是由各对象中的指针所决定的,可以简单灵活地表示动态集合

  双向链表:每个对象包含一个关键字域和两个指针域,

  哨兵:哑对象,可以用来简化边界条件,

  散列表:采用的数组尺寸与所要存储的关键字数是成比例的,在散列表中,不是直接把关键字用作数组下标,而是根据关键字计算出下标。

  碰撞:就是指多个关键字映射到同一个数组下标位置,可以用链接技术解决

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

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

 

二叉查找树:

  是按二叉树结构来组织的,这样的树可以用链表结构表示,其中每个结点都是一个对象,结点中包括(key域,卫星数据,左儿子,右儿子,父节点),根结点是树中唯一的父节点域为null的结点。

  性质:一个结点,它左子树中的结点都比它小,它右子树中的结点都比它大。

  可以用中序遍历算法排列出二叉查找树,

红黑树:

  一种二叉查找树,但是每个结点上增加一个存储位表示结点的颜色,可以是red或black,通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出二倍,因而是接近平衡的。

  树中的结点包括:color,key,left,right,p,我们将把这些null视为指向二叉查找树的外结点的指针,而把带关键字的结点视为树的内结点。

  满足的性质:

    1 每个结点或是红的,或是黑的

    2 跟结点是黑的

    3 每个叶结点是黑的

    4 如果一个结点是红的,则它的两个儿子都是黑的

    5 对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点

posted @ 2013-09-08 18:43  褐色键盘  阅读(145)  评论(0)    收藏  举报