CSC 10400 Discrete Mathematical Structures Lecture 12
Transcription
CSC 10400 Discrete Mathematical Structures Lecture 12
CSC 10400 Discrete Mathematical Structures Lecture 12 Instructor: Pavel Rytir Email: rytirpavel@gmail.com The City College of New York Spring 2015 Section 12.1 Tree: Definitions, Properties and Examples Tree Properties on Trees Forest Tree Tree A loop-free undirected graph is a tree if it is connected and contains no cycles. Only G1 is a tree. G2 contains a cycle, and G3 is not connected. FG1 is also a spanning tree of G2 . Theorem If u and v are distinct vertices in a tree T , then there is a unique path that connects u and v . Theorem If u and v are distinct vertices in a tree T , then there is a unique path that connects u and v . Proof. Because T is connected, there is at least one path connecting u and v . If there are more than one path between u and v , then from two such paths some of the edges would form a cycle. Because T has no cycles, there is a unique path connecing u and v . Theorem If G is an undirected graph, then G is connected if and only if G has a spanning tree. Theorem If G is an undirected graph, then G is connected if and only if G has a spanning tree. Proof. If G has a spanning tree T , then for every pair of vertices u and v , there is a path in T connecting them. Thus, G is connected. If G is connected and G is not a tree, we break each cycle by deleting an edge in the cycle. The resulting subgraph is connected and contains all vertices in G . If the resulting subgraph is a tree, we are done. Otherwise, the resulting subgraph has a cycle, and we can continue to break the cycle, until we obtain a tree. Hence, G has a spanning tree. Theorem In every tree T = (V , E ), |V | = |E | + 1. Theorem In every tree T = (V , E ), |V | = |E | + 1. Proof. If |E | = 0, the tree consists of a single isolated vertex, so |V | = 0. Suppose |E | = |V | + 1 for every |E | ≤ k for some k. When |E | = k + 1, we delete an edge from T , and obtain two trees T1 = (V1 , E1 ) and T2 = (V2 , E2 ). Clearly, |V | = |V1 | + |V2 | and |E | = |E1 | + |E2 | + 1. Thus, we have |E | = |E1 | + |E2 | + 1 = (|| V1 − 1) + (|V2 | − 1) + 1 = |V | − 1 By mathematical induction, |V | = |E | + 1. Theorem For any tree T = (V , E ), if |V | ≥ 2, then T has at least two vertices with degree 1. Theorem For any tree T = (V , E ), if |V | ≥ 2, then T has at least two vertices with degree 1. Proof. Let P |V | = n ≥ 2. First, we have |E | = |V | − 1 = n − 1. Second, v ∈V deg (v ) = 2|E | = 2(n − 1). Because T is connected, we have deg (v ) ≥ 1 for every node v . If there are k vertices with degree 1, then we have n − k vertices has degree at least 2. Thus X k + 2(n − k) ≤ deg (v ) = 2(n − 1) v ∈V Solve this inequality, we have k ≥ 2. Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (a) G is a tree. (b) G is connected, but the removal of any edge from G disconnects G into two subgraphs that are trees. (c) G contains no cycles, and |V | = |E | + 1. (d) G is connected and |V | = |E | + 1. (e) G contains no cycles and if u, v ∈ V with (u, v ) ∈ / E , then the graph obtained by adding the edge (u, v ) to G has exactly one cycle. Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (a) G is a tree. (b) G is connected, but the removal of any edge from G disconnects G into two subgraphs that are trees. Proof. (a) ⇒ (b). If G is a tree, then G is connected. Let e = {u, v } be any edge of G . If G − e is connected, there are at least two paths in G from u to v , contradicting that G is a tree. Thus, G − e is disconnected. Removing e from G partitions G into two components: one led by u and the other one led by v . Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (b) G is connected, but the removal of any edge from G disconnects G into two subgraphs that are trees. (c) G contains no cycles, and |V | = |E | + 1. Proof. (b) ⇒ (c). If G has a cycle, then let e = {u, v } be an edge of the cycle. But G − e will be connected, contradicting the hypothesis in part (b). So G has no cycle. Because G is a loop-free undirected graph, by the definition, we know that G is a tree. Consequently, we have |V | = |E | + 1 Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (c) G contains no cycles, and |V | = |E | + 1. (d) G is connected and |V | = |E | + 1. Proof. (c) ⇒ (d). Suppose G has r components: G1 , G2 , . . . , Gr . For 1 ≤ i ≤ r , select a vertex vi ∈ Gi , and add r − 1 edges {v1 , v2 , }, {v2 , v3 }, . . . , {vr −1 , vr } to G to form a new graph G 0 = (V , E 0 ). The graph G 0 still has no cycle, i.e., G 0 is a tree. Since G 0 is a tree, we know that |V | = |E 0 | + 1. But from part (c), |V | = |E | + 1, so |E | = |E 0 | and r − 1 = 0. Because r = 1, it follows that G is connected. Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (d) G is connected and |V | = |E | + 1. (e) G contains no cycles and if u, v ∈ V with (u, v ) ∈ / E , then the graph obtained by adding the edge (u, v ) to G has exactly one cycle. Proof. (d) ⇒ (e). Let C be a cycle in G with r vertices and r edges. Since G is connected, the remaning vertices of G can each be connected to a vertex in C by a path. Each such connection requires at least one new edge. Thus, |E | ≥ |V |, contradicting |V | = |E | + 1. Therefore, G has no cycle and connected, i.e., G is a tree. Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (d) G is connected and |V | = |E | + 1. (e) G contains no cycles and if u, v ∈ V with (u, v ) ∈ / E , then the graph obtained by adding the edge (u, v ) to G has exactly one cycle. Proof. (d) ⇒ (e) (Continue...) When we add a new edge (u, v ) into G , there are two paths between u and v : one is the unique path P between u and v , because G is a tree; the other one is the edge (u, v ). Therefore, P ∪ {(u, v )} is a cycle C1 . Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (d) G is connected and |V | = |E | + 1. (e) G contains no cycles and if u, v ∈ V with (u, v ) ∈ / E , then the graph obtained by adding the edge (u, v ) to G has exactly one cycle. Proof. (d) ⇒ (e) (Continue...) If the new graph has the second cycle C2 , C2 must contain the edge (u, v ); otherwise, G would contain a cycle. If C2 6= C1 , because C2 = P 0 ∪ {u, v }, where P2 is a path from u to v in G , we have P 6= P 0 . Thus, there are two distinct paths from u to v in G , contradicting that G is a tree. Therefore, there has exactly one cycle in the new graph. Theorem The following statements are equivalent for a loop-free undirected graph G = (V , E ) (e) G contains no cycles and if u, v ∈ V with (u, v ) ∈ / E , then the graph obtained by adding the edge (u, v ) to G has exactly one cycle. (a) G is a tree. Proof. (e) ⇒ (a) If G is not connected, let G1 and G2 be the components of G with u ∈ G1 and v ∈ G2 . Adding an new edge (u, v ) will not result in a cycle. Thus, G is connected. Because G has no cycle. G is a tree. Section 12.2 Rooted Trees Rooted trees Tree traversals: preorder, postorder and inorder Graph traversal: BFS and DFS Balanced trees Rooted Tree A tree is a rooted tree if we specify one node as the root of the tree. Figure: A tree with root node r . Ancestors, Descendents, Parents, Children and Siblings Let T = (V , E ) be a tree with root node r . Ancestors For any node x in the tree, if a node y 6= x locates on the path from r to x, then y is an ancestor of x. Ancestors, Descendents, Parents, Children and Siblings Let T = (V , E ) be a tree with root node r . Ancestors For any node x in the tree, if a node y 6= x locates on the path from r to x, then y is an ancestor of x. Descendents If x is an ancestor of y , then y is a descendent of x. Ancestors, Descendents, Parents, Children and Siblings Let T = (V , E ) be a tree with root node r . Ancestors For any node x in the tree, if a node y 6= x locates on the path from r to x, then y is an ancestor of x. Descendents If x is an ancestor of y , then y is a descendent of x. Parents If x is an ancestor of y , and (x, y ) is an edge in the tree, then x is the parent of y . Ancestors, Descendents, Parents, Children and Siblings Let T = (V , E ) be a tree with root node r . Ancestors For any node x in the tree, if a node y 6= x locates on the path from r to x, then y is an ancestor of x. Descendents If x is an ancestor of y , then y is a descendent of x. Parents If x is an ancestor of y , and (x, y ) is an edge in the tree, then x is the parent of y . Children If x is the parent of y , then y is a child of x. Ancestors, Descendents, Parents, Children and Siblings Let T = (V , E ) be a tree with root node r . Ancestors For any node x in the tree, if a node y 6= x locates on the path from r to x, then y is an ancestor of x. Descendents If x is an ancestor of y , then y is a descendent of x. Parents If x is an ancestor of y , and (x, y ) is an edge in the tree, then x is the parent of y . Children If x is the parent of y , then y is a child of x. Siblings If two distinct nodes x and y have the same parent, then x and y are siblings. Examples r ,a and c are ancestors of g . f , g , j, k, p and q are descendants of c. c is the parent of f and g . p and q are children of j. h and i are siblings. Leaves, Internal Nodes, and Levels Let T = (V , E ) be a tree with root r . Leaves A leaf is a node with no child. Internal nodes An internal node is a node with children. Levels For every vertex v , the level of v is the edges contained in the path from r to v . FThe root node has level 0! Examples The nodes p, q, k, d, s, t and u are leaves; and other nodes are internal nodes The node on level 0 is r. The nodes on level 1 is a, b. The nodes on level 2 is c, d, e. The nodes on level 3 are f , g , h, i. Subtree Let T = (V , E ) be a tree. For any node x, the subtree of T at x is the subgraph induced by x and its descendants. (a) A tree T (b) The subtree of T at b Preorder Traversal Let T = (V , E ) be a tree with root r . A preorder traversal on T is defined as follow. If T only contains the root r , then the preorder traversal is the root r itself. Otherwise, let T1 , T2 , . . . , Tk be the subtrees at the children of r , from left to right. The preorder traversal First, visits r . Then, traverses T1 in preorder. Traverses T2 in preorder and so on until traverses Tk in preorder. An Example of Preorder Traversal Let T be a tree with root 1, shown in the following figure. An preorder traversal of this tree is: 1, 2, 5, 11, 12, 13, 14, 3, 6, 7, 4, 8, 9, 10, 15, 16, 17 Postorder Traversal Let T = (V , E ) be a tree with root r . A postorder traversal on T is defined as follow. If T only contains the root r , then the postorder traversal is the root r itself. Otherwise, let T1 , T2 , . . . , Tk be the subtrees at the children of r , from left to right. The postorder First, traverses T1 in postorder. Then, traverses T2 in postorder and so on until traverses Tk in postorder. Finally, visits r . An Example of Postorder Traversal Let T be a tree with root 1, shown in the following figure. An postorder traversal of this tree is: 11, 12, 13, 14, 5, 2, 6, 7, 3, 8, 9, 15, 16, 17, 10, 4, 1 Question How can computer calculate an expression, e.g., ((7 + 3)/5) ↑ ((8 − 5) ∗ 2), where a ↑ b = ab ? Question How can computer calculate an expression, e.g., ((7 + 3)/5) ↑ ((8 − 5) ∗ 2), where a ↑ b = ab ? Use a tree. ((7 + 3)/5) ↑ ((8 − 5) ∗ 2) =((7 + 3)/5) ↑ (3 ∗ 2) =((7 + 3)/5) ↑ 6 =(10/5) ↑ 6 =2 ↑ 6 =64 Polish Notation Question How can computer calculate an expression, e.g., ((7 + 3)/5) ↑ ((8 − 5) ∗ 2), where a ↑ b = ab ? Use the Polish notation, or prefix notation; i.e., presenting a ⊕ b by ⊕ab. Polish Notation Question How can computer calculate an expression, e.g., ((7 + 3)/5) ↑ ((8 − 5) ∗ 2), where a ↑ b = ab ? Use the Polish notation, or prefix notation; i.e., presenting a ⊕ b by ⊕ab. Therefore, the mathematical equation ((7 + 3)/5) ↑ ((8 − 5) ∗ 2) can be represented by Polish notation as ↑ / + 735 ∗ −852 Computation on Polish Notation ↑ / + 735 ∗ −852 = ↑ / + 735∗32 = ↑ /+7356 = ↑ / 10 56 =↑ 26 =64 Preorder Traversal and Polish Notation The tree corresponding to the equation ((7 + 3)/5) ↑ ((8 − 5) ∗ 2) is: Its preorder traversal is: ↑ / + 735 ∗ −852, which is exactly the polish notation of the equation. Binary Tree A tree is a binary tree if every internal node has at most two children. A tree is a complete binary tree if every internal node has exactly two children. (a) A binary tree T (b) A complete binary tree T Inorder Traversal Let T = (V , E ) be a binary tree with root r . A inorder traversal on T is defined as follow. If T only contains the root r , then the inorder traversal is the root r itself. Otherwise, let TL and TR be the subtrees at the left child and the right child R, respectively. The inorder traversal First, traverses TL in inorder, if TL exists. Then, visits r . Finally, traverses TR in inorder, if TR exists. An Example of Postorder Traversal Let T be a tree with root r , shown in the following figure. An postorder traversal of this tree is: p, j, q, f , c, k, g , a, d, r , b, h, s, m, e, i, t, n, u Depth-First Search Algorithm Depth-First search (DFS) algorithm can traverse a loop-free undirected graph. Depth-First Search Algorithm Depth-First search (DFS) algorithm can traverse a loop-free undirected graph. Initial a stack S with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. Depth-First Search Algorithm Depth-First search (DFS) algorithm can traverse a loop-free undirected graph. Initial a stack S with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. While S is not empty Depth-First Search Algorithm Depth-First search (DFS) algorithm can traverse a loop-free undirected graph. Initial a stack S with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. While S is not empty Pop an element u from the top of the stack S, and mark u as visited. Depth-First Search Algorithm Depth-First search (DFS) algorithm can traverse a loop-free undirected graph. Initial a stack S with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. While S is not empty Pop an element u from the top of the stack S, and mark u as visited. Find all unvisited vertices adjacent with u, push these vertices at the top of the stack S, and attach all edges from u to these vertices into the spanning tree T so that u is the parent of these vertices. FThe resulting tree T is exactly a spanning tree of the graph. An Example of DFS Step 1: S = {A}, T = {A}. Step 2: S = {B, C , D}, T = {A, B, C , D}. Step 3: S = {B, C , E , F }, T = {A, B, C , D, E , F }. Step 4: S = {B, C , E }, T = {A, B, C , D, E , F }. Step 5: S = {B, C }, T = {A, B, C , D, E , F }. Step 6: S = {B}, T = {A, B, C , D, E , F }. Step 7: S = ∅, T = {A, B, C , D, E , F }. An Example of DFS The spanning tree generated by DFS is: Breadth-First Search Algorithm Breadth-First search (BFS) algorithm can traverse a loop-free undirected graph. Breadth-First Search Algorithm Breadth-First search (BFS) algorithm can traverse a loop-free undirected graph. Initial a queue Q with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. Breadth-First Search Algorithm Breadth-First search (BFS) algorithm can traverse a loop-free undirected graph. Initial a queue Q with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. While Q is not empty Breadth-First Search Algorithm Breadth-First search (BFS) algorithm can traverse a loop-free undirected graph. Initial a queue Q with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. While Q is not empty Pop an element u from the front of the queue Q, and mark u as visited. Breadth-First Search Algorithm Breadth-First search (BFS) algorithm can traverse a loop-free undirected graph. Initial a queue Q with only one element v , and initial a spanning tree T which consists of only one vertex v as its root. While Q is not empty Pop an element u from the front of the queue Q, and mark u as visited. Find all unvisited vertices adjacent with u, push these vertices at the end of the queue Q, and attach all edges from u to these vertices into the spanning tree T so that u is the parent of these vertices. FThe resulting tree T is exactly a spanning tree of the graph. An Example of BFS Step 1: Q = {A}, T = {A}. Step 2: Q = {B, C , D}, T = {A, B, C , D}. Step 3: Q = {C , D, E }, T = {A, B, C , D, E }. Step 4: Q = {D, E , F }, T = {A, B, C , D, E , F }. Step 5: Q = {E , F }, T = {A, B, C , D, E , F }. Step 6: Q = {F }, T = {A, B, C , D, E , F }. Step 7: Q = ∅, T = {A, B, C , D, E , F }. An Example of BFS The spanning tree generated by BFS is: Height and Balanced Tree The height of a tree is the largest level number achieved by a leaf of the tree. A rooted tree T of height h is balanced if the level number of every leaf in T is h − 1 or h. (a) height = 3, balanced (b) height = 3, unbalanced Interview Question Suppose you are given 8 coins. Exactly one coin is fake. If we knows that the fake coin is heavier than others, and we have a two pan scale. How many weighings do we need to find the fake one? Interview Question Suppose you are given 8 coins. Exactly one coin is fake. If we knows that the fake coin is heavier than others, and we have a two pan scale. How many weighings do we need to find the fake one? Use the decision tree shown as follows. Thus, two weighings is sufficient and necessary. Interview Question Suppose you are given 12 coins. Exactly one coin is fake. If we do not know whether the fake coin is heavier or lighter than others, and we have a two pan scale. How many weighings do we need to find the fake one? Interview Question Suppose you are given 12 coins. Exactly one coin is fake. If we do not know whether the fake coin is heavier or lighter than others, and we have a two pan scale. How many weighings do we need to find the fake one? This problem is much more difficult than the previous one. The answer is 3. You can google/wiki it. Section 12.4 Weighted Trees and Prefix Codes Weighted trees Prefix code: Huffman code Weighted Tree Let w1 , w2 , . . . , wn be a set of positive numbers called weights. A tree T with n leaves is a weighted tree if we assign w1 , . . . , wn to the n leaves. Prefix Code A set P of binary sequences is called a prefix code if no sequence in P is the prefix of any other sequence in P. Examples 111, 0, 1100, 1101, 10 constitute a prefix code for letters a, b, c, d, e 111, 0, 110, 1101, 10 is not a prefix code because 110 is a prefix of 1101. Use Prefix Code Suppose that 111, 0, 1100, 1101, 10 is the prefix code corresponding to letters a, b, c, d, e respectively. The original message is acdbe. The encoding result is: 11111001101010 Use Prefix Code Suppose that 111, 0, 1100, 1101, 10 is the prefix code corresponding to letters a, b, c, d, e respectively. The original message is acdbe. The encoding result is: 11111001101010 Decoding Method: First, build a tree corresponding to the encoding rule. Scan the codes from the beginning to the end; search the tree until reaching leaves, and translate the substring into a letter. Question How to design a prefix code for a given alphabet (e.g., English letters) so that the expected code length for strings is minimum? Answer Question How to design a prefix code for a given alphabet (e.g., English letters) so that the expected code length for strings is minimum? Answer Use Huffman code. Huffman Code Let w1 , w2 , . . . , wn are weights assigned to n elements. The Huffman code can be constructed by Assign the given weights, one each to a set S of n isolated vertices. Each vertex is a root of complete binary tree of height 0 with a weight assigned to it. While |S| > 1 Choose two trees T and T 0 in S with the smallest two root weights w and w 0 respectively. Create a new tree T ∗ with root weight w ∗ = w + w 0 and having T and T 0 as its left and right subtrees, respectively. Place T ∗ into S and delete T and T 0 from S. When |S| = 1, this complete binary tree is a tree corresponding to Huffman code. An Example of Constructing a Huffman Code Suppose that letters a, b, c, d, e, f have weight 4, 7, 12, 17, 20, 28 respectively. The huffman code of a, b, c, d, e, f is 1000, 1001, 101, 00, 01, 11 respectively.