570 likes | 710 Views
“On an Algorithm of Zemlyachenko for Subtree Isomorphism”. Yefim Dinitz, Alon Itai, Michael Rodeh (1998) Presented by: Masha Igra, Merav Bukra. Agenda. Introduction Definition of Canonical Order Overview of the Algorithm Time Complexity Hopcroft and Tarjan’s Canonical Order. Agenda.
E N D
“On an Algorithm of Zemlyachenko for Subtree Isomorphism” Yefim Dinitz, Alon Itai, Michael Rodeh (1998) Presented by: Masha Igra, Merav Bukra
Agenda • Introduction • Definition of Canonical Order • Overview of the Algorithm • Time Complexity • Hopcroft and Tarjan’s Canonical Order
Agenda • Introduction • Definition of Canonical Order • Overview of the Algorithm • Time Complexity • Hopcroft and Tarjan’s Canonical Order
Introduction • A free tree is a connected, acyclic and undirected graph Free Tree • A rooted tree is a free tree in which one of vertices is distinguished from others as its root. Rooted Tree
Reduction to rooted case • A vertex is central if its greatest distance from it toany other vertex is as small as possible.
Reduction to rooted case • A vertex is central if its greatest distance from any other vertex is as small as possible. 6
Reduction to rooted case • A vertex is central if its greatest distance from any other vertex is as small as possible. 7
Reduction to rooted case • A vertex is central if its greatest distance from any other vertex is as small as possible. 8
Reduction to rooted case • A vertex is central if its greatest distance from any other vertex is as small as possible. 9
Reduction to rooted case • In case of the central edge, a new vertex will be connected to the endpoints of the central edge. 10
Reduction to rooted case • In case of the central edge, a new vertex will be connected to the endpoints of the central edge. • Thus, we assign to any free tree a unique rooted tree. 11
Isomorphic graphs Graphs G1= {V1, E1} and G2 = {V2, E2}are isomorphic if: 1. There is a bijection f from V1 to V2 and 2. There is a bijection g from E1 to E2 that maps each edge (v, u) to (f(v), f(u)). G H
7 7 4 4 5 5 6 6 1 1 2 2 3 3 Isomorphic trees • An ordered tree is a rooted tree in which the children of each node are ordered. 7 • Isomorphic rooted trees: ordered trees that differ only in the order of siblings. 4 5 6 1 2 3 • Observation: free trees are isomorphic iff the rooted trees assigned to themare isomorphic. 13
6 3 7 2 1 5 4 Isomorphism equivalence class 6 6 ….. 2 7 3 7 2 3 4 5 1 1 4 5 • In any isomorphism equivalence class of rooted trees, a particular canonically ordered tree will bedefined. • For any tree T, let us call such a distinguished tree in the isomorphism class of T the canonical representation of T. • Two rooted trees are isomorphic if and only if their canonical representations coincide.
Isomorphism equivalence class 6 3 7 2 1 5 4 A C 6 …. …. ….. 2 7 3 4 5 1 B D …. …. • Two trees in the same isomorphism equivalence class have the same canonical representation. • There are many kinds ofcanonical representations, we are going to describe one of them. 15
6 3 7 2 1 5 4 Preorder traversal • Preorder traversal: • Visit root. • Traverse children from left to right recursively. Traversal sequence:{ 6, 3, 7, 1, 2, 5, 4 }
Agenda • Introduction • Definition of Canonical Order • Overview of the Algorithm • Time Complexity • Hopcroft and Tarjan’s Canonical Order
Subree isomorphism T r Tu • Let Tv, the subtree rootedatv, be the subtree that contains v. • u and v are subtree isomorphic when Tu and Tv are isomorphic. u Tv v • Height of a vertex v is the length of the path from v to the farthest leaf of its subtree. • height(v) = 2, height(r) = 4
1 1 4 9 1 2 Canonical Order of vertices • The canonical order on verticesis defined from the leaves up. The leaves are the minimal elements of . • To determine whetheruv : • Compare their heights: • if height(u) < height(v), thenu v • if height(u) == height(v), • then sort the children of u and v to create two lists: • u1 u2 …. ud(u) • v1 v2 …. vd(v) • uvif and only if the sorted list ofu’s children is lexicographically less than the sorted list ofv’schildren.
Canonical Order • For example: • Children of u: 1 2 • Children of v:1 2 • =>vu • Thus u v if and only if height(u) = height(v), and d(u) = d(v) and ui vi for i = 1, ..., d(u). u v 2 1 2 1 1 1
Canonical Index of subtree isomorphism classes • Starts with leaves (height 0): • All leaves are isomorphic to each other, and have the minimum index 1. 1 1 1 1 1 1 1
Canonical Index of subtree isomorphism classes • Starts with leaves (height 0): • All leaves are isomorphic to each other, and have the minimum index 1. • Height = 1: • vzuw • = = 2 • = 3 • = 4 z u v w 2 3 2 4 1 1 1 1 1 1 1 22
Canonical Index u v 2 2 3 3 3 3 9 9 • Lemma:Two vertices have the same canonical index (label) iff they are isomorphic. • By induction: Assumption: Correct for any height less than h. • Step (height h): u and v are isomorphic by the assumption and the definition. 23
Canonical Index (example) 5 4 4 2 2 3 2 3 1 1 1 1 1 1 1
Checking isomorphism of two given trees k u k v 25
7 6 1 1 5 4 1 3 1 2 1 1 1 Straightforward implementation • For each height h: • Sort lists consisting of the children of vertices of height h. • Total time will be • We wish timeO(n) • Since the numbers to be sorted are in range 1…n, • bucket-sort can ensure O(ni +range) for each sort. • In worst case: where the ranges of indexes and heights are of order n, algorithm requires .
Agenda • Introduction • Definition of Canonical Order • Overview of the Algorithm • Time Complexity • Hopcroft and Tarjan’s Canonical Order
Data structuresof the Algorithm • Array level[h] = all the vertices of height h. • Arraychildren[h] = all the children of all vertices at level[h], sorted by their index. • Construct the canonical indexes level by level: • level[0]– the leaves. • level[h] – assume that we already found the indexes of all vertices at lower levels: • Construct new auxiliary data structure: ordered treeDh
Example h = 0
Example h = 1
Example h = 2
Auxiliary ordered treeDh • The process of construction of Dh (example): • Single vertex – root, to which all vertices of level[h] are associated. D h = 2 root {u1, u2, u3, u4}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to vertex d of Dh. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u1, u2, u3, u4}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u1, u2, u3, u4} d u v
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u2, u3, u4} d u 1 {u1} d’ v
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 u root {u2, u3, u4} d 1 v {u1}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 u root {u2, u4} d 1 v {u1, u3} d’
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u2, u4} u 1 {u1, u3} d v
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u2, u4} u 1 {u3} d v d’ 2 {u1}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u2, u4} d u 1 {u3} v 2 {u1}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u4} d u 1 2 {u3} {u2} v 2 {u1}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u4} u 1 2 {u3} d {u2} v 2 {u1}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root {u4} u 1 2 {u3} d {} v d’ 2 2 {u1} {u2}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root u {u4} 1 2 v {u3} d {} 2 2 {u1} {u2}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root u {u4} 1 2 v {} d {} d’ 2 2 {u1, u3} {u2}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root u {u4} d 1 v 2 {} {} 2 2 {u1, u3} {u2}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root u {} d 1 v 2 {} d’ {u4} 2 2 {u1, u3} {u2}
Auxiliary ordered treeDh • Dh construction: • Single vertex – root, to which all vertices of level[h] are associated. • Scan the array children[h] of level[h] by non decreasing order: • Suppose v is a child of u, and u was associated to d. • Then we move u down to the child d’ of d whose label is . [v] D h = 2 root 1 2 {u4} 2 2 {u1, u3} {u2}
Overview of the Algorithm(for height h) Traversing in preorder, on arrival to each new vertex of T– increasing the current canonical index by 1. Dh = max+1 2 1 =4 {u4} 2 2 =5 {u1,u3} {u2} =3