复习 有向图的邻接矩阵 定义:设有向图 d = , v = {v1 , v2 , … , vn}...

13

Click here to load reader

Upload: wynter-michael

Post on 03-Jan-2016

188 views

Category:

Documents


8 download

DESCRIPTION

复习 有向图的邻接矩阵 定义:设有向图 D = , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em} 令 a ij 为顶点 vi 邻接到顶点 vj 边的条数,称 (a ij )) nxn 为 D 的邻接矩阵,记作 A(D) , 或简记为 A . 2 )邻接矩阵的性质 ( 1 )每 列元素之和 为结点的入度,即 ∑ a ij = d + (vi) , i = 1 , 2 , … , n , 所有列的和 ∑∑ a ij = ∑ d + (vi) = m ,等于边数 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}
Page 2: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

复习有向图的邻接矩阵定义:设有向图 D = <V, E>, V = {v1, v2,…, vn}, E = {e1, e2,

…, em} 令 aij为顶点 vi邻接到顶点 vj边的条数,称 (aij))nxn为 D 的邻接矩阵,记作

A(D),或简记为A.2 )邻接矩阵的性质 ( 1 )每列元素之和为结点的入度,即 ∑ aij = d+(vi), i = 1 , 2 ,…, n

, 所有列的和 ∑∑ aij = ∑ d+(vi) = m ,等于边数 每行元素之和为结点的出度,所有行的和也等于边数( 2 )邻接矩阵中元素 aij 反映了有向图中结点 vi到 vj通路长度为 1 的条数 主对角线上元素反映了有向图中结点到自身的环(回路)的条数( 3 )要利用 A(D)计算出 D 中长度为 L 的通路数和回路数 , 就需要用到邻接矩阵的

幂次运算( 4 ) A2中的元素值 bij是结点 vi到 vj长度为 2 的通路条数: 说明:由矩阵的乘积定义 bij = ∑k aik * akj

A3矩阵中的 Cij元素值,表示了 vi到 vj长度为 3 的通路条数。推论 设 BL = A + A2 十… +AL (L≥1), 则 BL中元素 bij为 D 中长度小于或等于 L 的通路数, 其中主对角线上元素值为 D 中长度小于或等于 L 的回路数

Page 3: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

例:给定有向图 D , 4 个顶点 7 条边 邻接矩阵为

0 1 0 0

A= 0 0 1 1

1 1 0 1

1 0 0 0

4*4 矩阵中有 7 个 1(边)

0 0 1 1

A2= 2 1 0 1

1 1 1 1

0 1 0 0

反映图中任意两个顶点间

有多少长度为 2 的通路

2 1 0 1

A3= 1 2 1 1

2 2 1 2

0 0 1 1

反映图中任意两个顶点间

有多少长度为 3 的通路

1 2 1 1

A4= 2 2 2 3

3 3 2 3

2 1 0 1

反映图中任意两个顶点间

有多少长度为 4 的通路

3 4 2 3

B4= 5 5 4 6

7 7 4 7

3 2 1 2

反映图中任意两个顶点间

有多少长度为小于等于4 的通路

Page 4: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

( 3 ) A(D)中所有元素之和为 D 中长度为 1 的通路总条数。 主对角线的元素之和值为图中所有长度为 1 的环的条数 要利用 A(D)计算出 D 中长度为 L 的通路数和回路数 , 就需要用到邻接矩

阵的幂次运算( 4 ) A2 中的元素值 bij是结点 vi 到 vj长度为 2 的通路条数: 说明:由矩阵的乘积定义 bij = ∑k aik * akj

A3 矩阵中的 Cij元素值,表示了 vi 到 vj长度为 3 的通路条数。( 5 )定理:设 A 为有向图 D 的邻接矩阵, V = {v1 , v2 ,…, vn} 为 D 的

顶点集, 则 A 的 L 次幂 AL(L≥1)中元素 cij 为 D 中 vi 到 vj长度为 L 的通路数, 其中 cii 为 vi到自身长度为 L 的回路数 ∑∑cij(所有元素之和 ) 为 D 中长度为 L 的通路总数, 其中 ∑ cii 为 D 中长度为 L 的回路总数.推论 设 BL = A + A2 十… +AL (L≥1), 则 BL 中元素 bij 为 D 中长度小于或等于 L 的通路数, 其中主对角线上元素值为 D 中长度小于或等于 L 的回路数

Page 5: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

4 、有向图的可达矩阵 1 )定义:设 D = <V , E>为有向图 , V = {v1 , v2 ,…, vn} 令 1 vi可达 vi pij = 0 否则 称 (pij)nxn 为 D 的可达矩阵,记作 P(D),简记为 P 2 )可达矩阵的性质 ( 1 )主对角线元素均为 1 (每个结点自身可达) ( 2 )可通过图的邻接矩阵 A 的 n-1次幂 Bn-1得到(将其非零元素换

为 1 ,主对角线元素均设为 1 即可)

2 2 1 2

B3= 3 3 2 3

4 4 2 4

1 1 1 1

反映图中任意两个顶点间

有多少长度小于等于 3的通路

1 1 1 1

P= 1 1 1 1

1 1 1 1

1 1 1 1

反映图中任意两个顶点间

是否可达

转树

Page 6: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

第 十六 章 树一、 无向树1 )定义: 连通无回路(初级回路或简单回路)的无向图称为无向树,或简称

树 常用 T 表示树,平凡图称为平凡树. 若无向图 G 至少有两个连通分支,则称 G 为森林. 在无向树中,悬挂顶点称为树叶,度数大于或等于 2 的顶点称为分支点.2 )树的等价定义 设 G = <V , E> 是 n 阶 m 条边的无向图, 则下面各命题是等价的: (1)G是树. (2)G中任意两个顶点之间存在惟一的路径.(不同路径则构成回路) (3) G是连通的且 m = n - 1. (4) G中无回路且 m = n - 1. (5)G中没有回路,但在任何两个不同的顶点之间加一条新边, 在所得图中得到惟一的一个含新边的初级回路. (6)G是连通的,但删去任何一条边后,所得图不连通.3 )无向树的性质 定理: 设 T 是 n 阶非平凡的无向树,则 T 中至少有两片树叶 设: k 个度为 1 的结点,其余结点的度大于等于 2 例:无向树 T 中度为 4 、 3 、 2 的结点各一个,其余为树叶,树叶=?

Page 7: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

4) 阶数 n 比较小的所有非同构的无向树. 例: 画出 6 阶所有非同构的无向树. m=n-1=5 从树的节点之和来分析:例: 7 阶无向树中有 3 片树叶和 1 个 3 度顶点,其余 3 个顶点的度数均无 1 和 3 .

试画出满足要求的所有非同构的无向树. 从树的节点之和来分析: Ti为满足要求的无向树,则边数 mi = 6, 于是∑ d(vi)= 12= 3 + 3 + d(v5)+d(v6)+d(v7) 二、生成树定义 2 :设 T 是无向图 G 的子图并且为树,则称 T 为 G 的树. 若 T 是 G 的树且为生成子图,则称 T 是 G 的生成树. 设 T 是 G 的生成树,∀ e∈ E(G),若 e ∈ E(T),则称 e 为 T 的树枝

, 否则称 e 为 T 的弦.并称导出子图 G[E(G)- E(T)]为 T 的余树,记作

T . 注: T 不一定连通,也不一定不含回路( 2 )生成树的性质 定理: 无向图 G 具有生成树当且仅当 G 是连通图. 设 G 为 n 阶 m 条边的无向连通图,则 m =|E(G)|≥|E(T)| =n - 1.( 3 )设 G 是 n 阶 m 条边的无向连通图, T 为 G 的生成树, 则 T 的余树 T 中含 m - n十 1 条边 ( 即 T 有 m—n+1条弦 ) ( 4 )任何无向连通图 G 都存在生成树 ( 5 )设 n 阶无向简单图 G 中有 m 条边,则 m>=n-1.

Page 8: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

3)带权图的最小生成树 (1) 定义 5 设无向连通带权图: G = <V , E , W > , T 是 G 的一棵

生成树. T 的各边权之和称为 T 的权,记作 W(T); G 的所有生成树中权最小的生成树称为 G 的最小生成树 (2) 最小生成树的求法(这里介绍避圈法 Kruskal算法 ) 设 n 阶无向连通带权圈 G = < V , E, W > 有 m 条边. 不妨设 G 中没有环 ( 否则,可以将所有的环先删去 ) ,将 m 条边按权从

小到次顺序排列,设为 e1,e2 ,… ,em 取 e1 在 T 中,然后依次检查 e2 , e3 ,…, em. 若 ej(j≥2)与已

在 T 中的边 不能构成回路,则取 ej 在 T 中,否则弃去 ej. 算法停止时得到的 T 为 G 的最小生成树

Page 9: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

§16.3 根树及其应用 设 D 是有向图,若 D 的基图是无向树,则称 D 为有向树,在所有的有向树

中,根树最重要,所以在此只讨论根树。一、根树 1 、 定义:设 T 是 n(n≥2)阶有向树 若 T 中有一个顶点的入度为 0 ,其余顶点的入度均为 1 ,则称 T 为根树。 入度为 0 的顶点称为树根(相当于文件系统的盘符)。 入度为 1 出度为 0 的顶点称为树叶(具体文件)。 入度为 1 出度不为 0 的顶点称为内点(文件夹),内点和树根统称为分支

。 从树根到 T 的任意顶点 v 的通路 ( 路径 ) 长度称为 v 的层数。 层数最大顶点的层数称为树高.将平凡树也称为根树。 在根树中,由于各有向边的方向是一致的,所以画根树时可以省去各边上

的所有箭头,并将树根画在最上方.2 、根树中顶点的关系定义:设 T 为一棵非平凡的根树, ∀vi,vj∈ V(T),若 vi可达 vj,则称 vi 为 vj的祖先, vj 为 vi的后

代; 若 vi邻接到 vj( 即 <vi,vj> ∈E(T)则称 vi 为 vj的父亲,而 vj 为 vi

的儿子 若 vj,vk的父亲相同,则称 vj 与 vk是兄弟

Page 10: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

3 、有序树 设 T 为根树,若将 T 中层数相同的顶点都标定次序,则称 T 为有序树。 根据根树 T 中每个分支点儿子数以及是否有序,可以将根树分成下列各类: (1) 若 T 的每个分支点至多有 r 个儿子,则称 T 为 r 叉树; 又若 r 叉树是有序的,则称它为 r 叉有序树. (2) 若 T 的每个分支点都恰好有 r 个儿子,则称 T 为 r 叉正则树; 又若 T 是有序的,则称它为 r 叉正则有序树. (3) 若 T 是 r 叉正则树,且每个树叶的层数均为树高,则称 T 为 r 叉完全正则

树, 又若 T 是有序的,则称它为 r 叉完全正则有序树。4 、 r 叉树的子树 定义: 设 T 为一棵根树,∀ v∈ V(T), 称 v 及其后代的导出子图 Tv 为 T 的以 v 为根的根子树. 如: 2 叉正则有序树的每个分支点的两个儿子导出的根子树分别称为左

子树和右子树.

Page 11: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

二、根树的应用1 、最优 2 叉树

定义:设 2 叉树 T 有 t 片树叶 v1, v2,…, vt,权分别为 w1, w2,…, wt,

称 W(T)=∑ wi l(vi)|为 T 的权,其中 l(vi)|是 vi的层数. 在所有有 t 片树叶,带权 w1, w2,…, wt的 2 叉树中,权最小的 2 叉

树称为最优 2 叉树 前面三棵带权 2 叉树W(T1) = 2 ( 2+2)+3*3+5*3+3*2 = 38W(T2) = 4(3+5)+3*3+2*2+2 = 47W(T3) = 3*(3+3)+5*2+2(2+2) = 36

下面介绍一种算法: Huffman算法(在给定权值下,如何构造最优 2 叉树) 给定实数 ( 权值 ) : w1, w2,…, wt,按从小到大排序为 w1≤w2≤…

≤wt. (1) 连接权为 w1, w2的两片树叶,得一个分支点,其权为 w1 + w2 (2) 在 w1+w2, w3, w4…, wt中选出两个最小的权,连接它们对应

的顶点 ( 不一定是树叶 ) ,得新分支点及所带的权. (3)重复 (2),直到形成 t—1个分支点, t 片树叶为止.例:权值为 2 , 2 , 3 , 3 , 5 的最优 2 叉树的构造过程: W(T4) = 3*(2+2)+5*2+2(3+3) = 34

Page 12: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

2 、前缀编码 在通信中,常用二进制编码表示符号. 对于不等长编码中出现的问题 1 ) 定义:设 a1a2 ,…, an-1an为长为 n 的符号串, 称其子串 a1, a1a2, …, a1a2…an-1分别为该符号串的 长度为 1 , 2 , …, n-1的前缀. 设 A = {b1 , b2 ,… bm }为一个符号串集合, 若对于任意的 bi , bj∈A (i≠ j) bi 与 bj互不为前缀,则称 A 为前缀码

. 若符号串 bi(i= 1 , 2 ,…, m)中只出现 0 , 1 两个符号,则称 A 为二元

前缀码 {1, 00, 011 , 0101 , 0100 , 01001 , 01000 }不是前缀码 因为 0100既是 01001又是 01000的前缀 {1, 00, 011 , 0101 , 01001 , 01000 }为前缀码. { 1 , 01, 111, 1100 , 0111 } 不是前缀码 2 )利用二叉树产生二元前缀码 3 )最优二元前缀码-利用哈夫曼树3 、二叉树的周游(遍历) 对于一棵二叉树的每一个结点都访问一次且仅一次的操作 周游的方法有三种: 中序遍历 访问的次序:左子树-根-右子树 前序遍历 访问的次序:根-左子树-右子树 后序遍历 访问的次序:左子树-右子树-根

Page 13: 复习 有向图的邻接矩阵 定义:设有向图 D =  , V = {v1 , v2 , … , vn} , E = {e1 , e2 , … , em}

树的周游(遍历)的结果: 得出结点的访问次序 1 )表达式的 ( 逆 ) 波兰式表示:( a*(b+c)+d*e*f)/(g+(h-i)*j)

对应的二叉树后序遍历的结果 : ((a(bc+)*)(d(ef*)*)+)(g((hi-)j*)+)/

逆波兰式 = abc+*def**+ghi-j*+/前序遍历的结果:/ (+(*a(+bc))(*d(*ef)))(+g(*(-hi)j))

=/+*a+bc*d*ef+g*-hij

2)二叉排序树 建立(不断添加结点为其子树:比根结点小的为左子树 比根结点大的为右子树 利用周游得出排序结果(中序遍历)作业: p319

1 、 2 、 3 、 4 、 13、 25、 31、 37、 38、 39、 41、 42(2 、 3 )