1 / 70

Chapter 5 Tree Part 2

Chapter 5 Tree Part 2. WATTANAPONG SUTTAPAK Software Engineering, School of Information Communication Technology, University of PHAYAO. จุดประสงค์ บทเรียนที่ 5. มีความรู้ความเข้าใจเรื่องการ ท่องไบนารี่ท รีทั้ง 3 แบบ สามารถเขียนโปรแกรมเพิ่ม ลบ ค้นหา และ แสดงผลไบนารี่ท รีได้

Download Presentation

Chapter 5 Tree Part 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 5Tree Part 2 WATTANAPONGSUTTAPAK Software Engineering, School of Information Communication Technology, University of PHAYAO

  2. จุดประสงค์ บทเรียนที่ 5 มีความรู้ความเข้าใจเรื่องการท่องไบนารี่ทรีทั้ง 3 แบบ สามารถเขียนโปรแกรมเพิ่ม ลบ ค้นหา และแสดงผลไบนารี่ทรีได้ มีความรู้ความเข้าใจในเรื่องเอวีแอลทรีได้ มีความรู้ความเข้าใจในเรื่องการปรับโหนดของเอวีแอลทรี สามารถเพิ่ม ลบ ค้นหา และแสดงผลเอวีแอลทรีได้

  3. TREE TRAVERSAL

  4. Tree Traversal • Tree traversal ชื่อภาษาไทย การท่องโหนด แบ่งเป็น 3 ประเภทคือ • inorder • preorder • postorder โดยแต่ละประเภทมีลักษณะดังต่อไปนี้

  5. Tree Traversal inorder เป็นการเข้าเข้าถึงโหนดแบบ ascending order นั่นคือเข้าตามลำดับจากน้อยไปหามาก หรือตามลำดับก่อนหลัง(เช่นตัวอักษรก่อนไปหลัง) การเข้าถึงโหนดวิธีนี้มีลำดับการเข้าถึงตามลำดับความสำคัญคือ โหนดซ้าย โหนดพ่อแม่ โหนดขวา ประโยชน์ของการท่องโหนดแบบ inorderเช่น การเรียงลำดับข้อมูล การหาค่ามากสุด น้อยสุด ค่ากลาง เป็นต้น

  6. Tree Traversal • inorder step 1. start at root node ,set root to c-node 2. check c-node has L-child? 2.1 Y : change L-child to c-node then go to 2 2.2 N : print c-node check c-node has R-child? 2.2.1 Y: set R-child to c-node then go to 2. 2.2.2 N: return;

  7. Tree Traversal inorder Ex1 6 4 8 2 5 7 11 1 3 1 3 4 5 8 6 7 11 2

  8. Tree Traversal inorder Ex2 6 จะเห็นว่า inorder เราจะสามารถตอบได้ทันที นั่นคือลำดับน้อยไปหามาก แต่ในการใช้งานจริง (coding) จะไม่เห็นตัวเลข ดังนั้นจึงต้องใช้ อัลกอริทึมดังที่กล่าวมา 4 9 5 11 8 7 13 4 6 7 8 13 9 11 5

  9. Tree Traversal inorder Ex3 สมมติ s เป็น class student เก็บ id, name เรียงลำดับ id กรณีข้อมูลเป็นคลาส และมีการลำดับ attribute s1 s2 s3 s5 s8 s4 s6 s7 s2 s1 s6 s4 s7 s3 s8 s5

  10. Tree Traversal preorder เป็นการเข้าถึงโหนด โดยจุดประสงค์ในการเข้าถึงยังไม่แน่ชัดแตกต่างจาก inorderที่มีจุดประสงค์ชัดเจน โดยการเข้าถึงโหนดวิธีนี้มีลำดับการเข้าถึงตามลำดับความสำคัญคือ โหนดพ่อแม่ โหนดซ้าย โหนดขวา ตัวอย่างการประยุกต์ใช้ ได้แก่ การแปลงเป็น prefix

  11. Tree Traversal • preorder step • start at root node , set root to c-node • print c-node • check c-node has L-child? 3.1 Y : change L-child to c-node then go to 2 3.2 N : check c-node has R-child? 3.2.1 Y: set R-child to c-node then go to 2. 3.2.2 N: return;

  12. Tree Traversal preorder Ex1 จะสังเกตุเห็นว่าเมื่อนำข้อมูล ที่ได้จาก preorder ไป insert จะได้ลักษณะตาม tree 6 4 8 2 5 7 11 1 3 6 2 1 3 7 5 8 11 4

  13. Tree Traversal preorder Ex2 ((1+3)/4)*(7+1) * / + + 4 7 1 1 3 * + 1 3 7 4 + 1 /

  14. Tree Traversal postorder เป็นการเข้าถึงโหนด ที่จุดประสงค์ไม่ชัดเจนเช่นกัน(เหมือน preorder) โดยการเข้าถึงโหนดวิธีนี้มีลำดับการเข้าถึงตามลำดับความสำคัญคือ โหนดซ้าย โหนดขวา โหนดพ่อแม่ ตัวอย่างการประยุกต์ใช้ ได้แก่ การแปลงเป็น postfix

  15. Tree Traversal • postorder step • start at root node , set root to c-node • check c-node has L-child? 3.1 Y : change L-child to c-node then go to 2 3.2 N : check c-node has R-child? 3.2.1 Y: set R-child to c-node then go to 2. 3.2.2 N: print L-child , return;

  16. Tree Traversal postorder Ex1 จะสังเกตุเห็นว่าเมื่อนำข้อมูล ที่ได้จาก postorder (จากหลังไปหน้า) นำไป insert จะได้ลักษณะตาม tree 6 4 8 2 5 7 11 1 3 1 2 5 4 8 7 11 6 3

  17. Tree Traversal postorder Ex2 ((1+3)/4)*(7+1) * / + + 4 7 1 1 3 1 + 4 / + 7 1 * 3

  18. DELETION NODE

  19. Deletion node กระบวนการลบโหนด มีความซับซ้อนกว่าการเพิ่ม การอ่านและการค้นหา เนื่องจากเมื่อลบแล้ว ต้องพิจารณาโหนดที่มาแทนที่โหนดที่ลบ ขั้นตอนการลบโหนด ถ้าโหนดที่ลบไม่มี leaf node ไม่ต้องหาโหนดมาแทน ถ้าโหนดที่ลบมีเพียง 1leaf node ให้นำ leaf node นั้นมาแทนที่ได้เลย ถ้าโหนดที่ลบมี 2leaf node ให้แทนที่ด้วยโหนดด้านซ้ายที่มีค่ามากที่สุดหรือโหนดด้านขวาที่มีค่าน้อยที่สุด

  20. Deletion node deletion node Ex1 ลบ โหนด 5 6 4 8 2 5 7 11 1 3

  21. Deletion node deletion node Ex2 ลบ โหนด 11 6 4 8 2 5 7 11 1 3 14 13 15

  22. Deletion node deletion node Ex2 ลบ โหนด 11 6 4 8 14 2 5 7 13 15 1 3

  23. Deletion node deletion node Ex3 ลบ โหนด 4 6 4 8 2 5 7 11 1 3

  24. Deletion node deletion node Ex3 ลบ โหนด 4 วิธีที่ 1 6 3 8 2 5 7 11 1

  25. Deletion node deletion node Ex3 ลบ โหนด 4 วิธีที่ 2 6 4 8 2 5 7 11 1 3

  26. Deletion node deletion node Ex3 ลบ โหนด 4 วิธีที่ 2 6 5 8 2 7 11 1 3

  27. AVL TREE

  28. AVL Tree เป็น tree (Adel’son-Vel’ski and Landis) พัฒนาความสามารถของ binary search tree(b-s-tree ) รูปแบบโหนดขึ้นกับการลำดับการเพิ่มข้อมูล ทำให้จำนวนโหนดมีโอกาสจัดเรียงเป็น L-node ทั้งหมดหรือ R-node ทั้งหมด ทำให้การค้นหาเกิดเป็น worst case(O(n)) เช่น 3 6 5 5 6 3

  29. AVL Tree • โดยต้องมีคุณสมบัติดังต่อไปนี้ • เป็น binary search tree • มีเงื่อนไขสมดุล(balance) ของ tree นั่นคือ P-node มี level ของ L-child และ R-child มีความแตกต่างไม่เกิน 1 1 2 2 6 6 6 0 0 1 1 0 5 8 5 5 8 0 0 9 3

  30. AVL Tree 44 17 62 50 78 1 32 64 54 48 88 35 46 49 51 56 81 91 h = 4 h = 1 h = 2 h = 3

  31. AVL Tree 6 8 4 7 9 3 5 6 6 5 8 8 4 โหนด 8 ความสูงต่างกัน 0 กับ 2 9 3 3 5 9 11

  32. AVL Tree Insertion Ex1 ต้องการเพิ่ม 6 5 8 2 1 3 ทำการเพิ่มข้อมูลเหมือน binary search tree 6 5 8 2 1

  33. AVL Tree 6 5 8 2 1 1 สมดุลแต่ผิดกฏของ balance search tree ดังนั้นจึงต้อง rebalance tree ด้วยวิธีการหมุน

  34. AVL Tree Rotation เป็นการปรับสมดุลของ AVL Tree แบ่งเป็น 2 วิธีคือ 1. หมุนครั้งเดียว 2. หมุนสองครั้ง

  35. a b single rotation b a c c b c single rotation a c b a

  36. AVL Tree 6 5 8 2 1

  37. AVL Tree 6 8 5 2 1

  38. AVL Tree 6 8 2 5 1

  39. AVL Tree 6 8 2 5 1

  40. a b a double rotation c c b b a c c c b double rotation a a b b a c

  41. 4 rotations

  42. b a single rotation b a c c T0 T1 T2 T3 T0 T1 T2 T3

  43. c b b single rotation a a c T1 T2 T3 T0 T1 T2 T3 T0

  44. c c b double rotation a a T3 T2 T1 T3 T2 T1 T0 T0 T3 T2 T1 T0 b b a c

  45. a a double rotation b c T1 T3 T2 T1 T0 T0 T0 T3 T2 T3 T1 T2 c b b a c

  46. AVL Tree Exercise • เพิ่มโหนดใน AVL Tree ของค่าต่อไปนี้ • 1 22 10 9 8 5 4 15 6 7 3 • ลบโหนดต่อไปนี้จาก AVL Tree ด้านบน • 7 9 15

  47. AVL Tree 1 22 10 double rotation • 1 22 10 9 8 5 4 15 6 7 3

  48. AVL Tree 10 22 1 9 8 double rotation • 1 22 10 9 8 5 4 15 6 7 3

  49. AVL Tree 10 c 8 22 b a 1 9 T0 T3 T2 T3 T1 T2 T1 T0 5 b single rotation a c • 1 22 10 9 8 5 4 15 6 7 3

  50. AVL Tree 8 1 10 9 22 5 4 • 1 22 10 9 8 5 4 15 6 7 3

More Related