算法导论学习笔记(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 对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点