MAT 231: คณิตศาสตร์ไม่ต่อเนื่อง (6) ทรี-ต้นไม้(Trees) ดร.ธนา สุขวารี ดร.สุรศักดิ์ มังสิงห์ SPU, Computer Science Dept.
วัตถุประสงค์ เพื่อศึกษาหลักการเบื้องต้นเกี่ยวกับทรี(tree)หรือต้นไม้ในทางคอมพิวเตอร์ ประยุกต์ความสัมพันธ์ของข้อมูลในรูปทรีสำหรับกระบวนการทางคอมพิวเตอร์
Outline Terminology: Tree application: Tree spanning: Traversal: Binary search tree(BST) Tree spanning: Minimum spanning tree by Prim’s algorithm Traversal: Pre-order, In-order and Post-order
คำศัพท์เกี่ยวข้อง (Terminologies) โครงสร้างของทรี (structural) ราก(root), ใบ(leaf) , โหนดภายใน(internal node), กิ่ง(branch), ต้นไม้ย่อย(subtree), ความสัมพันธ์(Relationship) พ่อไม้:parent( predecessor ), ลูก:child( successor ), พี่น้อง:sibling ชนิดของทรี(Types) n-ary tree, binary tree คุณสมบัติ(Properties) ระดับ(level) และความสูง(height)ของทรี
ทรี(Trees) ทรี กล่าวได้ว่าเป็น กราฟเชื่อมโยงแบบไม่ระบุทิศทาง (connected undirected graph) ซึ่งจะต้องไม่มีวงจรเกิดขึ้น (circuit) ทรีหลายทรีอยู่ที่เดียวกันเรียกว่า ป่า(forest) โครงสร้างของ ทรีประกอบไปด้วย เซตของโหนด(เทียบแล้วคือจุด บนกราฟ) กับเซตของเส้นเชื่อมโยงระหว่างโหนด(เทียบแล้วคือ เส้น บนกราฟ) มีการกำหนดโหนดพิเศษที่เกิดเป็นโหนดแรกบนทรีถูก เรียกว่าโหนดราก (root node)
โครงสร้างและองค์ประกอบของทรี ทรี ต่างกับกราฟอย่างไร ? Tree A B D C E F G H I J K L M Graph A B D C E F G H I J K L M ทรี ต่างกับกราฟอย่างไร ?
ตัวอย่างทรี และ ป่า (Tree and Forest Examples) A Tree: A Forest: Leaves in green, internal nodes in brown.
โครงสร้างและองค์ประกอบของทรี Forest F ={T1, T2, T3} ฐานข้อมูลนักศึกษา CS F T1 ฐานข้อมูลนักศึกษา ICT T3 T2 ฐานข้อมูลนักศึกษา CPE
โครงสร้างและองค์ประกอบของทรี T: root Height A B D C E F G H I J K L M 1 sibling 2 3 4 leaf Leaf of T = {E,J,K,G,H,L,M} A เป็น โหนดพ่อแม่ ของ B,Cและ D B, C, D เป็น โหนดพี่น้อง ที่มี โหนด A เป็นโหนดพ่อแม่
ต้นไม้ย่อย หรือ สับทรี (subtree) A B D C E F G H I J K L M A B D C E F G H I J K L M T3 T1 T2 ต้นไม้ T ประกอบด้วย ต้นไม้ย่อย T1, T2, T3 ต้นไม้ย่อย T1 มีโหนด B เป็น root ต้นไม้ย่อย T2 มีโหนด C เป็น root ต้นไม้ย่อย T3 มีโหนด D เป็น root
n-ary trees แต่ละโหนดบนทรี(ยกเว้นโหนดใบ) จะมีจำนวนโหนดลูกไม่เกิน n โหนด ถ้า n ของ n-ary tree มีค่า n= 2 จะเรียน 2-ary tree ซึ่งหมายถึง ไบนารีทรี (binary tree)
n-ary tree & binary tree level-0 B A D C E F G H I T1 4-ary tree K height 1 level-1 2 A B C D E F G binary tree T2 level-2 3
ไบนารีทรี (ต้นไม้ทวิภาค) A B C D E F G Binary tree T N = 2h -1 เมื่อ N แทนจำนวนโหนดทั้งหมดของ ไบนารีทรี ที่มีความสูง h เช่น ไบนารีทรีที่มีความสูงเท่ากับ 3 จะมีจำนวนโหนดมากที่สุดบนไบนารีทรีเท่ากับ 7
การประยุกต์ใช้ทรี กับการค้นหา (Binary Search Tree :BST) T จะเป็น BST ถ้า (1) T ต้องเป็น ไบนารีทรี (2) และทุกโหนดในต้นไม้ย่อยทางซ้าย มีค่าน้อยกว่าทุกโหนดที่เป็นโหนดราก ของต้นไม้ย่อยและทุกโหนดใน ต้นไม้ย่อยทางขวา T: 7 3 12 1 5 9 15 2 8 11
Recursive Binary Tree Insert procedure insert(T: binary tree, x: item) v := root[T] if v = null then begin root[T] := x; return “Done” end else if v = x return “Already present” else if x < v then return insert(leftSubtree[T], x) else {must be x > v} return insert(rightSubtree[T], x)
นักศึกษาสร้างต่อให้เสร็จ ? การสร้าง BST ตัวอย่าง เมื่อกำหนดข้องมูล(ที่นำไปสร้าง BST)โดยมีลำดับการเข้าข้อมูลของต้นไม้ BST ดังนี้ {7,3,12,1,5, 9,15,0,2,8,11 } 7 7 7 7 7 3 12 3 12 3 3 12 1 1 5 นักศึกษาสร้างต่อให้เสร็จ ?
การสร้าง BST {7,3,12,1,5,9,15,0,2,8,11 } 7 7 7 3 12 3 12 3 12 1 5 1 5 9 1 5 9 15
การสร้าง BST {7,3,12,1,5,9,15,0,2,8,11 } 7 7 7 7 3 12 3 12 3 12 3 12 15 1 5 9 15 1 5 9 15 1 5 9 1 5 9 15 2 2 8 2 8 11
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 MST เป็นการการเยี่ยมเดินไปให้ทั่วบนกราฟอย่างไม่ซ้ำกัน โดยมีค่าผลรวมของ weight(ค่ากำกับเส้นทาง) ที่น้อยที่สุด Prim’s algorithm ใช้หลักการ (1) พิจารณาโหนดในกราฟที่มีค่ากำกับเส้นทางที่น้อยที่สุด ณ ขณะนั้นเข้าไปเป็นโหนดในทรี โดยที่โหนดนั้นจะต้องไม่ทำให้เกิดวงจรบนทรี (2) กลับทำขั้นตอน(1) ซ้ำๆจนทุกโหนดบนกราฟไปเป็นโหนดในทรี
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 สมมุติว่าเลือกโหนด D เป็นโหนดเริ่มต้นของการทำ MST 5 3 D D 1 1 2 F
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 สมมุติว่าเลือกโหนด D เป็นโหนดเริ่มต้นของการทำ MST 5 3 D D 1 2 4 F G 1 F 1
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 สมมุติว่าเลือกโหนด D เป็นโหนดเริ่มต้นของการทำ MST 5 3 D 3 E D 1 6 4 F G G 1 F
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 สมมุติว่าเลือกโหนด D เป็นโหนดเริ่มต้นของการทำ MST B 2 2 5 D 3 E D E 1 6 4 F G G 1 F
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 สมมุติว่าเลือกโหนด D เป็นโหนดเริ่มต้นของการทำ MST 3 A 3 B B 2 5 D 3 E D E 1 6 4 F G G 1 F
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 สมมุติว่าเลือกโหนด D เป็นโหนดเริ่มต้นของการทำ MST A A 3 B B 2 2 2 D 3 C E D E 1 6 4 F G G 1 F
Minimum Spanning Tree (MST) by Prim’s Algorithm C D E F G G: 2 3 4 5 1 6 A 3 B 2 2 D 3 C E 1 F G 1 T: D 1 3 F E 1 2 B G 3 A 2 C ค่าผลรวมของค่ากำกับเส้นทางน้อยที่สุด = 1+1+3+2+3+2 = 12
Tree Traversal (การเดินท่องไปให้ทั่วบนทรี) สามารถทำได้ 3 วิธี คือ : NLR(Pre-order), LNR(In-order) และ LRN(Post-order) โดยพิจารณาโครงสร้างของทรี ดังนี้ R N L N:แทนโหนดรากของทรี หรือ สับทรี (subtree) L:แทนโหนดลูกทางซ้ายของทรี หรือ สับทรี R:แทนโหนดลูกทางขวาของทรี หรือ สับทรี
Tree Traversal: NLR (Pre-order) 1 2 3 4 5 6 7 T: 8 9 NLR: ให้เดิน root ของแต่ subtree ก่อนแล้วจึงเดิน left subtree แล้วตามด้วย right subtree ผลลัพธ์การเดิน: 1,2,4,5,8,9,3,6,7
Tree Traversal: LNR(In-order) 1 2 3 4 5 6 7 T: 8 9 LNR: ให้เดิน left subtree ก่อนแล้วจึงเดินกลับไปที่ rootของ subtree แล้วตามด้วย right subtree ผลลัพธ์การเดิน: 4,2,8,5,9,1,6,3,7
Tree Traversal: LRN(Post-order) 1 2 3 4 5 6 7 T: 8 9 LRN: ให้เดิน left subtree ก่อนแล้วจึงเดิน right subtree แล้วตามด้วย root ของ subtree ผลลัพธ์การเดิน: 4,8,9,5,2,6,7,3,1
Quiz -VI 1.กำหนดทรีทั่วไปมาหนึ่งต้น ให้แสดงการทำ tree traversalทั้งสามแบบ (NLR, LNR และ LRN) 2.กำหนดชุดข้อมูลให้จำนวนหนึ่ง ให้แสดงการนำชุดข้อมูลนี้ไปสร้าง BST (20 นาที)
คำถามท้ายบท (1) กำหนดกราฟ Gให้ดังรูป จงใช้ prim’s algorithm เพื่อหาผลรวมของค่ากำกับเส้นทางที่น้อยที่สุดของต้นไม้กระจายทั่วถึง(spanning tree) A B C D E F G G: 2 3 5 4 1 6 9
คำถามท้ายบท (2) เมื่อกำหนดทรี Tให้ดังรูป จงหาผลลัพธ์การเดินเยี่ยมให้ทั่วบนทรี(tree traversal) ในแบบ NLR, LNR และ LRN T: 1 2 3 4 5 6 7 8 9 10 11
คำถามท้ายบท (3) เมื่อกำหนดทรี Tให้ดังรูป จงหาผลลัพธ์ของคำถามต่อไปนี้ 1 3.2 ทรี T จะมีจำนวนโหนดมากที่สุดเท่าใด ถ้าความสูงของทรี T มีค่าเป็น 7 2 3 4 5 6 7 8 9 10 11
คำถามท้ายบท (4) จงใช้ข้อมูลที่กำหนดให้ต่อไปนี้ นำไปสร้าง BST: T2 ข้อมูล = {25,30,73,12,9,84,49,11,98,77,33,130} (5) จาก BST ในข้อ 4 ถ้าต้องการทราบว่ามีข้อมูล 53 อยู่ใน T2 หรือไม่ จะต้องทำการเปรียบเทียบทั้งหมดกี่ครั้งถึงจะทราบคำตอบ (6) จาก BST ในข้อ 4 จะสามารถสร้างทรีที่มีความสูงน้อยที่สุด ด้วยค่าความสูงเท่าใด
Final Exam 1/53 1.(10) ตรวจสอบสมบัติความสัมพันธ์ 2.(10) การแทนกราฟ 2.(10) การแทนกราฟ 3.(10) isomorphic 4.(10) graph connectivity 5.(15) Dijkstra’s algorithm 6.(10) Prim’s algorithm 7.(5) วงจรตรรกเชิงผสม 8.(10) วงจรตรรกเชิงผสม