1k likes | 1.28k Views
Discrete Maths. 241-303 , Semester 1 2014-2015. Objective introduce more unusual tree algorithms and techniques you already know about binary (search) trees. 6 . Trees. Overview. 1. Uses of Trees 2. Huffman Codes 3. (Rooted) Tree Terminology 4. Spanning Trees
E N D
Discrete Maths 241-303, Semester 1 2014-2015 • Objective • introduce more unusual tree algorithms and techniques • you already know about binary (search) trees 6. Trees
Overview 1. Uses of Trees 2. Huffman Codes 3. (Rooted) Tree Terminology 4. Spanning Trees 5. Minimal Spanning Trees 6. Game Trees 7. More Information
1. Uses of Trees Davenport S. Williams S. Williams S. Williams Bartoli V. Williams V. Williams Wimbledon Womens Tennis
Organizational Chart President Vice-President for Academics Vice-President for Admin. Dean of Engineering Dean of Business Planning Officer Purchases Officer . . . . . . . . Head of CoE Head of EE Head of AC. . . . .
Saturated Hydrocarbons H H H H • Non-rooted (free) trees • a free tree is a graph with no cycles C H H C C C H H C H H H C H H H C H H Isobutane H C H H Butane H
A Computer File System / usr bin tmp bin ad spool ls mail who junk ed vi exs opr uucp printer
2. Huffman Codes • A Huffman code represents characters by variable-length bit strings • there are many different Huffman codes • By comparison, ASCII uses fixed-length codes. • Character ASCII code A 1000001 B 1000010 : : S 1010011 : :
A Huffman Code in Tree Form Root • Character Code A 1 O 00 R 010 S 0110 T 0111 1 0 A 1 0 O 1 0 1 0 R T S where do these come from?
Huffman uses Less Bits useful for network comms, text compression, etc. • ASCII coding of "RATS": • 1010010 1000001 1010100 1010011 • 4*7 = 28 bits • Huffman Coding (as in the tree): • 010 1 0111 0110 • 12 bits
Constructing a Huffman Code • A Huffman code is based on a table giving the frequency of the characters in the 'language'. • The 'language' can be a subset of a full language • e.g. business English, computer language keywords, the months of the year, a language made up of only {A, O, R, S, T}
Letter Frequencies for English • The most common letters, in full English, in order of frequency, are usually ETAOINSHRDLU. • This varies depending on the data source • e.g. novels, textbooks, cartoons
Example: The Haddock Language • The Haddock language contains only 5 characters: • !, @, #, $, % • we can make words like: • !!!@@ $%$# @@@@@@@@@ • We must create a frequency table by analysing existing examples of Haddock writing. continued
The frequency table we create: • Character Frequency ! 2/32 @ 3/32 # 7/32 $ 8/32 % 12/32 • We work with the numerators of the fractions.
Informal Algorithm • 1. Make a sequence of the frequencies: { 2, 3, 7, 8, 12} • 2. Repeatedly replace the smallest two frequencies by a sum until only 2 elements are left: • {2,3,7,8,12} ==> {2+3, 7, 8, 12}{5,7,8,12} ==> {5+7, 8, 12}{8,12,12} ==> {8+12, 12}{12,20} continued
3. Build a tree by expanding the sequence back to its full size. • Start with the 2 elements as a 2 branch tree. 1 1 0 1 0 0 ==> ==> ==> 1 0 1 0 1 0 12 20 12 8 12 5 7 8 12 continued
1 0 ==> 1 0 1 0 1 0 7 8 12 • 4. Replace each frequency by the character having that frequency: 2 3 1 0 1 0 1 0 1 0 # $ % ! @ continued
Huffman Code for Haddock • Character Code ! 111 @ 110 # 10 $ 01 % 00 • The higher frequency letters have shorter Huffman codes.
Another Possible Answer 1 0 • Why? There are two "12" nodes (see slide 12), either of which can be expanded back to "5" and "7". 12 1 0 1 8 0 1 0 7 2 3 continued
Huffman Code for Haddock v.2 • Character Code ! 0011 @ 0010 # 000 $ 01 % 1 • The higher frequency letters have shorter Huffman codes.
Huffman Algorithm • Tree huffman(FreqSeq f, int size){ if (size == 2){ let f1, f2 be the frequencies in f return baseTree; else { let fi, fj be the smallest freqs in f; replace fi and fj in f with fi+fj; Tree t1 = huffman(f, size-1); Tree t = replace "fi+fj" vertex in t1 with extTree return t; }} 1 0 f1 f2 baseTree 1 0 fi fj extTree call: Tree t = huffman( {2,3,7,8,12}, 5);
3. (Rooted) Tree Terminology • e.g. Part of the ancient Greek god family: levels 0 Uranus 1 Aphrodite Kronos Atlas Prometheus 2 Eros Zeus Poseidon Hades Ares 3 Apollo Athena Hermes Heracles : :
Some Definitions • Let T be a tree with root v0. • Suppose that x, y, z are verticies in T. • (v0, v1,..., vn) is a simple path in T (no loops). • a) vn-1 is the parent of vn. • b) v0, ..., vn-1 are ancestors of vn • c) vn is a child of vn-1 continued
d) If x is an ancestor of y, then y is a descendant of x. • e) If x and y are children of z, then x and y are siblings. • f) If x has no children, then x is a terminal vertex (or a leaf). • g) If x is not a terminal vertex, then x is an internal (or branch) vertex. continued
h) The subtree of T rooted at x is the graph with vertex set V and edge set E • V contains x and all the descendents of x • E = {e | e is an edge on a simple path from x to some vertex in V} • i) The length of a path is the number of edges it uses, not verticies. continued
j) The level of a vertex x is the length of the simple path from the root to x. • k) The height of a vertex x is the length of the simple path from x to the farthest leaf • the height of a tree is the height of its root • l) A tree where every internal vertex has exactly m children is called a full m-ary tree.
Applied to the Example • The root is Uranus. • A simple path is {Uranus, Aphrodite, Eros} • The parent of Eros is Aphrodite. • The ancestors of Hermes are Zeus, Kronos, and Uranus. • The children of Zeus are Apollo, Athena, Hermes, and Heracles. continued
The descendants of Kronos are Zeus, Poseidon, Hades, Ares, Apollo, Athena, Hermes, and Heracles. • The leaves (terminal verticies) are Eros, Apollo, Athena, Hermes, Heracles, Poseidon, Hades, Ares, Atlas, and Prometheus. • The branches (internal verticies) are Uranus, Aphrodite, Kronos, and Zeus. continued
The subtree rooted at Kronos: Kronos Zeus Poseidon Hades Ares Apollo Athena Hermes Heracles continued
The length of the path {Uranus, Aphrodite, Eros} is 2 (not 3). • The level of Ares is 2. • The height of the tree is 3.
Some Properties of Trees • 1) A tree with n verticies has n-1 edges. • e.g. • Proof: • ignore the root; • pair each vertex with the edge above it; • so n-1 verticies use n-1 edges (all of them)
2) A full m-ary tree with i internal verticies has a total of m*i + 1 verticies. • e.g. A full 2-ary tree (binary tree) 4 internal verticies A total of 9 verticies continued
Proof • ignore the root; • every remaining vertex is the child of an internal vertex; • each internal vertex has m children; • there are i internal verticies, so there is a total of m*i verticies in the tree; • add back the root, to get m*i + 1
4. Spanning Trees • A spanning tree T is a subgraph of a graph G which contains all the verticies of G. • Example graph G: a b c d e f h g continued
One possible spanning tree: a b the tree is drawn with thick lines c d e f h g
4.1. Example: IP Multicasting • A network of computers and routers: source computer router continued
How can a packet (message) be sent from the source computer to every other computer? • The inefficient way is to use broadcasting • send a copy along every link, and have each router do the same • each router and computer will receive many copies of the same packet • loops may mean the packet never disappears! continued
IP multicasting is an efficient solution • send a single packet to one router • have the router send it to 1 or more routers in such a way that a computer never receives the packet more than once • This behaviour can be represented by a spanning tree. continued
The spanning tree for the network: source computer the tree is drawn with thick lines router
4.2. Finding a Spanning Tree • There are two main types of algorithms: • breadth-first search • depth-first search
4.3. Breadth-first Search • Process all the verticies at a given level before moving to the next level. • Example graph G (again): a b c d e f h g
Informal Algorithm • 1) Put the verticies into an ordering • e.g. {a, b, c, d, e, f, g, h} • 2) Select a vertex, add it to the spanning tree T: e.g. a • 3) Add to T all edges (a,X) and X verticies that do not create a cycle in T • i.e. (a,b), (a,c), (a,g) T = {a, b, c, g} a g b c continued
a level 1 g b c • Repeat step 3 on the verticies just added, these are on level 1 • i.e. b: add (b,d) c: add (c,e) g: nothing T = {a,b,c,d,e} • Repeat step 3 on the verticies just added, these are on level 2 • i.e. d: add (d,f) e: nothing T = {a,b,c,d,e,f} d e a g b c level 2 d e f continued
a g • Repeat step 3 on the verticies just added, these are on level 3 • i.e. f: add (f,h) T = {a,b,c,d,e,f,h} • Repeat step 3 on the verticies just added, these are on level 4 • i.e. h: nothing, so stop b c d e level 3 f h continued
Resulting spanning tree: a b a different spanning tree from the earlier solution c d e f h g
Breadth-first Algorithm • Tree bfs(Verts vsG, Edges edsG)// input ordered verts and edges of graph G{ Vert v1 = firstVert(VsG); // first vert in G Seq levelVs = ( v1 ); // verts at curr level Verts vsT = { v1 }; // verts in tree Edges edsT = {}; // edges in tree while (1) { for each x in levelVs for each y in vsG - vsT if (x,y) is an edge in edsG add (x,y) to edsT; add y to vsT; if no edges added to vsT return tree made from vsT and edsT; levelVs = childrenOf( levelVs ); }} continued
Typical call: Verts vsG = {a, b, c, d, e, f, g, h};Edges edsG = { (a,b), (a,c), (a,g), (b,d), (b,g), (c,d), (c,e), (d,f), (e,g), (f,h) };Tree spanTree = bfs( vsG, edsG ); :
4.4. Depth-first Search • Process all the verticies down one path, then backtrack (go back) to verticies along other paths. • Example graph G (again): a b c d e f h g
Informal Algorithm • 1) Put the verticies into an ordering • e.g. {a, b, c, d, e, f, g, h} • 2) Select a vertex, add it to the spanning tree T: e.g. a • 3) Add the edge (a,X) where X is the smallest vertex in the ordering, and does not make a cycle in T • i.e. (a,b), T = {a, b} a b continued
a b d • 4) Repeat step 3 with the new vertex, until there is no possible new vertex • i.e. add the edges (b,d) (d,c) (c,e) (e,f) (f,h) T = {a,b,d,c,e,f,h} • 5) At this point, there is no (h,X), so backtrack to a vertex that does have another edge: • parent of h == fbut there is no new (f,X) to add, so backtrack c e f h continued
a b • parent of f == e • there is an (e,g) to add, so repeat step 3 with e • 6) After g is added, there are no further verticies to add, so stop. d c e g f h continued