16
• 9.1-1 按按按按按按按按按按按按按 n-1 按按按 按按按 lgn 按按按按按 按按按按按按按按按按按按按按按按 n 按按按按按按按 lgn-1 按按按 按按 按按 n+lgn-2 按按按 • 9.1-2 按按按按按按 3n/2-2 按按按按按按按按 按按按按按按按按按 按按按 按按按按按按按按按按按按按按按按按按按按按 按按按按 按按按按按按按按 。一, n- 1 按按按 ( 按按按按按按按 n-1 按按按按按 ) 按按按 按按按按按按按 ,, n-1 按 按按 按按按按按按按按按按按按按按按按 2n-2 按按按 按按按按按按按按按 N 按按按按按按按按按按 S 按按按按按按按 L 按按按按按按按按按按按按按按按按 ,:

9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

  • Upload
    inoke

  • View
    256

  • Download
    8

Embed Size (px)

DESCRIPTION

9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需 n+lgn-2 次比较 - PowerPoint PPT Presentation

Citation preview

Page 1: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需 n+lgn-2 次比较

• 9.1-2 题目是要证明 3n/2-2 是最少的比较次数,而不是要构造出这样的算法。我们把某个元素与其它元素间的大小关系称作一条信息,那么最大元素包含 n-1 条信息 ( 这个元素比其它 n-1 个元素都大 ) ,同样,最小元素也包含 n-1 条信息,同时求出最大和最小元素就需要获得 2n-2 条信息。未比较过的元素记为 N ,比较后较小的元素记为 S ,较大的元素记为 L ,那么每次比较获得的信息数如下表:

Page 2: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 在最坏情况下,只能在两个未比较过的元素间比较才能得到两条信息,其余的比较至多得到一条信息,而未比较过的元素至多有 n 个,这样为了得到 2n-2 条消息至少需要 n/2+(2n-2-n)=3n/2-2 次比较

Page 3: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 9.2-4 最坏时 Randomized-Partition 每次都返回余下元素中最大的一个,划分序列是 {9,8,7,6,5,4,3,2,1,0}

• 9.3-1 每组 7 个元素时大于 x 的元素为 , 此时递归式为

用代换法解得复杂度为 O(n)

每组 3 个元素时同理可得递归式为

用代换法解得复杂度为 Ω(nlogn)

1 24( 2) 82 7 7

nn

Page 4: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 9.3-2 SELECT 中大于 x 的元素至少为 当 n>=140时满足 3n/10-6>= ,同理可证小于的情况

• 9.3-4 通过比较得到的第 i 小的元素,在比较过程中比这个元素小的元素构成的集合即为 i – 1 个小数集合,而比较过程中比这个元素大的元素则构成了 n – i 个大元素集合。不需要增加比较次数,只需要每次保留比较信息即可

• 9.3-7 (1) Find the median i of S O(n)

(2) Construct a new set S‘, such that for every element x in S,

there is a corresponding element y in S’, where y = |x - i| n 次 (3) Find the kth order statistics d inS‘ kn 次 (4) For each element x in S,if |x - i| <= d,add x to set T n 次 (5) return T

1 33( 2) 62 5 10

nn

Page 5: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 12.3-1 Tree-Insert(T,z) { T-Insert(T,z){ y=root(T); x=root(T); if(y==NIL){ if(key[z]<key[x]) key[y]=key[z]; if(left[x]==NIL) left[y]=NIL; left[x]=key[z]; right[y]=NIL; } else T-Insert(left[x],z); else else

T-Insert(y,z); if(right[x]==NIL) } right[x]=key[z];

else T-insert(right[x],z);

Page 6: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 12.3-3 中序遍历 O(n) ,最好情况下是完全二叉树,运行时间为 O(nlogn) ,最坏情况下是一个链,运行时间O(n^2)

• 12.3-6 自己定义一个 priority ,可以是左右子树的高、左右子树的大小或者等概率随机选择一个

• 13.1-1 略• 13.1-2 都不是,红色违反性质 4 ,黑色违反性质 5• 13.1-6 最多时是红黑相间的满二叉树,而且最底层内结

点为红色,此时内结点总数为 (2^2k)-1 ,最少时是全黑的满二叉树,此时内结点总数为

• (2^k)-1

Page 7: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 13.2.2 BST(Binary Search Tree) 上某个结点的旋转次数,是这个结点能够左旋和右旋的次数之和,即非空的右孩子结点和非空的左孩子结点数之和。对 BST 上所有结点的旋转次数求和,得到 BST的边数为 n – 1 ,这就是 n – node 的 BST 可能的旋转数目。

• 13.2.4 首先证明任意的二分查找树可通过至多 n-1 次旋转变成右行链。

• 再由对称性可知右行链可通过至多 n-1 次旋转变成任意的二分查找树,这样任意两棵二分查找树之间的转换至多需要 2(n-1) 次旋转。

Page 8: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 13.2.5 (1) 右行链就不可以通过右旋转换成其它的二分查找树。

• (2) 分析得递归式为• 取 k=0 就可得最坏情况下为 。• 13.3.1 取成黑色会改变树的黑高度,这样

调整起来更麻烦。• 13.3.2 略• 13.3.5 用归纳法证即可。

)10()1()()()( nkknTkTnOnT

)( 2n

Page 9: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 13.4-3 .删除过程如下:• 删去结点 8 ,其他结点颜色不变• 删去结点 12 ,则第四条性质不满足,依据 case 2 ,结点 19 改为黑

色,结点 31 改为红色• 删去结点 19 ,结点 31 成为结点 38 的左孩子,结点 31 改为黑色• 删去结点 31 ,则第四条性质不满足,依据 case 2 ,结点 41 改为红

色• 删去结点 38 ,结点 41 成为根结点,改为黑色• 删去结点 41 ,树空,结束

Page 10: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 14.1-1 .函数运行过程大致如下:• r=13, i=10, i<r 设 X 为 T 的左孩子,• 进入 r=8, i=10, i>r 设 Y 为 X 的右孩子,• 进入 r=3, i=2, i<r 设 Z 为 Y 的左孩子,• 进入 r=1, i=2, i>r 设 M 为 Z 的右孩子,• 进入 r=1, i=1, i=r 返回 M ,即值为 20 的结点

Page 11: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需
Page 12: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需
Page 13: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 14.3-6 .实现要求的数据结构有多种。一种参考的数据结构可以书中 14.3 节介绍的 Interval trees作为基础的数据结构,动态集合中的每个值作为结点的 low endpoint ,集合中下一个值作为 该结点的 high endpoint ,再在此基础上增加一个 min-gap 域,该域存放的值是以该结点为根的树中,所有结点的 high endpoint 与 low endpoint 值差异最小的值。

• Insert , Delete , Search 算法和 Interval trees 基本相同,时间复杂度为 。

• Min-Gap 算法的值可直接由根结点的 min-gap域的值直接得到,时间复杂度为

nlg

1

Page 14: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

• 19.1-1 if x is root degree(sibing[x])>degree(x)• if x is not root degree(sibing[x])=degree(x)-1• 19.1-3 证明: 1 )由树的构成可知: x 的第 i 孩子的二进

制表示为 x 二进制表示的最右 0 后第 i 位置反。• 由这个性质我们可以得到第 i 层节点的二进制表示中有 k

- i 个 1 。• 2 )包含 j 个 1 的节点个数为第 i 层的个数。• 3 )数学归纳法证明

Page 15: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

19.2-2 过程略 ( union 操作 )

19.2-3 ( 1 ) decrease-key ( 2 ) extract-min 过程略

19.2-6 算法思想:找到堆中最小值 min ,用 min-1代替 -∞.

[ 遍历堆中树的根节点 ]

Page 16: 9.1-1 按照竞争树的办法求最小值需 n-1 次比较,然后在 lgn 个与最小值比较过的元素中求出最小值即为原来 n 个元素的次小值,需 lgn-1 次比较,所以共需

课堂小测• 关键字 41,12,19,8插入一棵初始为空的红

黑树 ,画出插入过程 ,从建好的树中连续删除关键字 12,19

• 请给出一个时间 O(n^2) 的算法 ,使之能找出一个 N 个数的序列中最长的单调递增子序列 .