文档是用幕布写的,上传到csdn格式有些变化,附上原文档链接:点这里
19级算法设计与分析期末复习重点
- 数据结构
- 红黑树
- 红黑树的性质
- 1.本身是一棵二叉查找树
- 2.每个结点要么是黑色要么是红色
- 3.树根结点的颜色为黑色
- 4.叶结点(nil)为黑色
- 5.如果某个结点为红色,则它的左、右孩子结点均为黑色
- 6. 对树中任一结点,所有从该结点出发到其叶结点的路径中均包含相同数目的黑色结点
- 红黑树的操作及时间
- 插入:时间复杂度O(lgn)
- 删除:时间复杂度O(lgn)
- 查找结点,找前驱、后继:时间复杂度O(lgn)
- 红黑树的应用
- 序统计树
- 概念
- 序统计就是在一系列数中找出最大、最小值,某个数的序值等操作。
- 解决动态序统计问题
- Size[x]域的定义为:以x为根的子树所包含的内部结点数(包括x本身)
- Size[x]=Size[x.left]+Size[x.right]+1
- 找第i个最小值操作:算法时间:O(lgn)
- 求x的序值操作:算法时间:O(lgn)
- 完成一次插入或删除操作:时间为O(lgn)
- 概念
- 区间树
- 概念
- 关键字=区间的低端点
- 新增域int:区间的端点值
- 新增域max:x.max=Max(x.int.high, x.left.max, x.right.max )
- 查找操作:算法时间O(lgn)
- 概念
- 序统计树
- 数据结构的扩张步骤
- 1. 挑选一个合适的基本数据结构
- 2. 决定在基本数据结构上应增加的信息
- 3. 修改基本数据结构上的操作并维持原有的性能
- 4. 修改或设计新的操作
- 定理
- 1.具有n个内部结点的红黑树高度h最多为2lg(n+1) ,即h=O(lgn)
- 2.黑高度:黑高度bh(x)表示从x结点出发(不包含x结点)到其叶结点路径上的黑色结点个数。
- 3.令f为具有n个结点的红黑树扩张后的一个域,如果结点x的f域值仅需通过结点x、left[x]、right[x]以及f(left[x])、f(right[x])就可获得,那么插入和删除操作对树T中所有结点f值进行维护将维持O(lgn)的性能
- 区间树的查找算法,要么返回与i重叠的某个结点,要么返回为空表示树T中未找到与i重叠的区间。
- 红黑树的性质
- 二项堆
- 二项树
- 定义
- 仅包含一个结点的有序树是一棵二项树称为B0树。
- 二项树Bk由二棵Bk-1树组成
- 其中一棵Bk-1树的根作为另一棵Bk-1树根的最左孩子(k≥0)。
- 性质
- 1. 有2^k个结点 ,即n=2^k
- 2. 树的高度为k , 即k=lgn(注:二项树的高度从0开始计数)
- 3. 深度为i处恰好有 个结点 0≤i≤k
- 4. 根的度最大且为k,若根的孩子从左到右编号为k-1,k-2,…,1,0,则孩子i恰好是子树Bi的根。
- 5. 一棵具有n个结点的二项树中,任一结点的最大度为lgn
- 定义
- 二项堆
- 定义
- 二项堆H是一个满足下述条件的二项树的集合:
- ①H中的每棵二项树满足最小堆性质
- ②对任意的非负整数k,H中至多有一棵二项树根的度为k(保证每一棵二项树度的唯一性)
- 定义
- 根表的性质
- eg:head[H]------->B0-------->B2-------->B3
- ①根表为一单链表
- ②根表链接所有二项树的根结点
- ③根表按照度的递增序链接
- 二项堆的操作
- 1. 创建空堆:算法时间O(1)
- 2. 插入结点:算法时间O(lgn)
- ①将待插入结点变为一个只有一个结点的二项堆
- ②合并两个二项堆
- 3. 合并堆H1,H2:算法时间O(lgn)
- ① 先把两个根表合并为一个根表
- ②合并度相同的两颗二项树。(如果有3个度相等的二项树,优先合并后两个)
- 4. 取最小值:算法时间O(lgn)
- 遍历根表
- 5. 抽取最小值:算法时间O(lgn)
- ① 把该二项树根结点移除,所有孩子形成一个二项堆
- ②合并两个二项堆
- 6. x减值为k&#
- 二项树
- 红黑树