School of Information Communication Technology, Chapter 5 Tree Part 1 WATTANAPONG SUTTAPAK Software Engineering, School of Information Communication Technology, University of PHAYAO
จุดประสงค์ บทเรียนที่ 5 มีความรู้ความเข้าใจเรื่องทรี สามารถจำแนกประเภทต่างๆ ของทรีได้ มีความรู้ความเข้าใจในเรื่องไบนารี่ทรี สามารถเพิ่ม ลบ ค้นหา ไบนารี่ทรีได้ สามารถประยุกต์การเขียนโปรแกรมแบบไบนารีทรีได้
Tree ชื่อภาษไทยแผนภาพต้นไม้ หมายถึงลักษณะโครงสร้างข้อมูลที่มีลักษณะไม่เป็นเชิงเส้น(non-linear) โดยโครงสร้างคล้ายต้นไม้ A B C D E F G H I J K L M
Tree Terminology โหนด(node) คือข้อมูลในแต่ละจุด เช่น (A) (B) (C) (D) … (M) รูท(root) หมายถึงโหนดบนสุด (A) ทรีย่อย(subtree) หมายถึง โหนดลูกทั้งหมด กิ่ง(edge/branch) หมายถึงเส้นเชื่อมระหว่างโหนด โหนดพ่อ(parent node) และโหนดลูก(child node) หมายถึงโหนดที่ให้มีกิ่งเชื่อมกันโดยโหนดพ่ออยู่ด้านบนโหนดลูก เช่น parent(A) ของ child(B) child(C) child(D) และ parent(B) ของ child(F) ใบ(leave , leave node) หมายถึงโหนดที่ไม่มีลูก (F) (G) (L) โหนดกิ่ง(edge node, branch node) เป็นโหนดที่มีลูก (B) (D) โหนดพี่น้อง(sibling node) หมายถึงโหนดที่มีโหนดพ่อเดียวกัน (L) กับ (M) หรือ (C) กับ (D)
Tree Terminology degree หมายถึงจำนวนลูกของโหนด เช่น (A) มี 4 หรือ (D) มี 2 ancestor node หมายถึงโหนดที่มาก่อนโหนดอื่นๆ เช่น (A) เป็น ancestor (B) (C) (D) หรือ (D) เป็น ancestor (E) (L) direct ancestor node หมายถึงโหนดที่มาก่อนโหนดอื่นๆ 1 โหนด เช่น (A) กับ (B) หรือ (D) กับ (E) decendant node หมายถึงโหนดที่มาหลังโหนดอื่นๆ เช่น (D) เป็น decendant ของ (A) (B) (C) direct decendant node หมายถึงโหนดที่ตามหลังโหนดอื่นๆ 1 โหนด เช่น (D) กับ (C) level หมายถึงระดับของโหนดเช่น root เป็น 0 และ (B) (C) (D) (E) เป็น 1 height/depth หมายถึงระดับความสูงหรือความลึกของ root กับ node ล่างสุด จากตัวอย่างก่อนหน้า คือ 4 path หมายถึงเส้นทางเชื่อมต่อระหว่าง node เช่น (A),(B),(F) หรือ (A),(D),(H) หรือ (A),(D),(H),(L) length หมายถึงความยาวของ edge ในเส้นทาง เช่น (A) ถึง (M) เท่ากับ 3
Type of Tree ในที่นี้ขอกล่าวถึง 2 ประเภท Binary Tree Binary Search Tree AVL Tree B Tree(2-3-4 Tree)
Binary Tree Tree ใดๆ จะเป็น Binary Tree ก็ต่อเมื่อแต่ละโหนดมีโหนดลูกไม่เกิน 2 โหนด โดยแบ่งเป็นด้านซ้าย 1 โหนดหรือด้านขวา 1 โหนดหรือทั้งคู่หรือไม่มีเลย เช่น A A A A B C B C 1 2 3 4
Binary Tree A B D G H L M 5
Binary Search Tree 1 2 Tree ใดๆ จะเป็น Binary Search Tree ก็ต่อเมื่อ เป็น Binary Tree แต่ละโหนดต้องมีค่าไม่ซ้ำกัน โหนดด้านซ้ายมีค่าน้อยกว่าค่าด้านขวาเสมอ 4 4 2 2 6 6 1 3 5 8 5 8 7 9 1 2
Searching Binary Search Tree เช่น ต้องการค้นหา 8 4 2 6 1 3 5 8 7
Searching Binary Search Tree เริ่มจากเปรียบเทียบค่ากับ root โดย 8 มากกว่า 4 4 2 6 1 3 5 8 step 1
Searching Binary Search Tree เปรียบเทียบกับ 6 โดย 8 มากกว่า 6 4 2 6 1 3 5 8 step 2
Searching Binary Search Tree 4 2 6 1 3 5 8 step 3
Insertion Binary Search Tree เช่น ต้องการเพิ่มข้อมูล 6 2 8 1 4 3 6 step 1
Insertion Binary Search Tree เช่น ต้องการเพิ่มข้อมูล 6 2 8 1 4 3 6 2 step 2
Insertion Binary Search Tree เช่น ต้องการเพิ่มข้อมูล 6 2 8 1 4 3 6 2 8 step 3
Insertion Binary Search Tree เช่น ต้องการเพิ่มข้อมูล 6 2 8 1 4 3 6 2 8 1 step 4
Insertion Binary Search Tree เช่น ต้องการเพิ่มข้อมูล 6 2 8 1 4 3 6 2 8 1 4 step 5
Insertion Binary Search Tree เช่น ต้องการเพิ่มข้อมูล 6 2 8 1 4 3 6 2 8 1 4 3 step 6
Insertion Binary Search Tree ถ้าต้องการเพิ่มข้อมูล10 เข้ามาจะได้ 6 2 8 10 1 4 3 step 7
deletion Binary Search Tree ถ้าต้องการลบ 3 จะเห็นว่าไม่ใช่เรื่องยาก นั่นคือดึงออกได้เลย 6 2 8 10 1 4 3 step 1
deletion Binary Search Tree ลบ 3 6 2 8 10 1 4 step 2
deletion Binary Search Tree แต่ถ้าต้องการลบ 2 6 2 8 10 1 4 step 1
deletion Binary Search Tree ดึง 1 หรือ 4 เข้ามาแทนที่ 2 6 4 8 10 1 step 2
Algorithm Analysis in Binary Search Tree 6 level 1 = 20 level 2 = 21 2 8 level 3 = 22 1 4 7 10 ดังนั้นถ้ามี x level จะมีโหนดเท่ากับ 2x-1 + 2x-2+…+ 21+ 20 = 2x -1
Algorithm Analysis in Binary Search Tree ดังนั้นถ้ามี x level จะมีโหนดเท่ากับ 2x-1 + 2x-2+…+ 21+ 20 สมมติให้ n = 2x-1 + 2x-2+…+ 21+ 20 n+1 = 2x-1 + 2x-2+…+ 21+ 20 +1 n+1 = 2x-1 + 2x-2+…+ 21+ 21 n+1 = 2x-1 + 2x-2+…+ 22 n+1 = 2x-1 + 2x-2+ 2x-2 n+1 = 2x-1 + 2x-1 n = 2x – 1 แล้วจะคำนวณไปทำไม ?
Algorithm Analysis in Binary Search Tree รู้จักกับ Best Case ,Worst Case, Average case Best Case หมายถึงกรณีที่การทำงานใดๆ เร็วที่สุด Worst Case หมายถึงกรณีที่การทำงานใดๆ ช้าที่สุด Average Case หมายถึงกรณีที่การทำงานใดๆ เฉลี่ยเท่ากับ ตัวอย่าง ถ้าต้องการค้นหา 6 จะเห็นว่าใช้แค่ 1 ครั้งเท่านั้น นั่นคือ Best Case O(1) 6 2 8 1 4 7 10
Algorithm Analysis in Binary Search Tree Worst Case เช่นต้องการค้นหา 10 จะเห็นว่าใช้เวลาถึง 3 ครั้ง 6 2 8 1 4 7 10
Algorithm Analysis in Binary Search Tree 6 12 7 8 Worst Case สำหรับการค้นหา 11 คือ 7 หรือ n เท่ากับจำนวนโหนดทั้งหมด 9 10 11
Algorithm Analysis in Binary Search Tree Average Case สมมติให้ง่ายต่อการคิดโดยโหนดเต็ม เช่น 3 level มี 7 โหนด ในที่นี้จะมองไปที่เวลาที่เยอะที่สุดในการค้นหาซึ่งคือ 3 สำหรับการค้นหา 1 4 7 10 จะพบว่าโหนดที่ใช้เวลาเยอะสุดคือ โหนดที่ level ลึกสุด ดังนั้น x level จะมี n โหนด เท่ากับ 2x – 1 n = 2x – 1 log(n) = log(2x – 1) log(n) = log 2x เมื่อ 2x >> 1 log(n) = x ทำให้การค้นหาโหนดที่ level x จะใช้เวลาเท่ากับ log(n) 6 2 8 1 4 7 10
Algorithm Analysis in Binary Search Tree สรุปการค้นหา tree Best case O(1) Average case O(log n) Worst case O(n) ทำนองเดียวกันการ insert delete มี Big O เหมือนการค้นหา
Example 1. สร้าง Binary Search Tree โดย Tree จะต้องสามารถ ค้นหาได้ เพิ่มได้ ลบได้ แสดงผลทั้งหมดได้
Binary Search Tree 6 2 8 1 4 7 10 โครงสร้างเป็น class Tree
Binary Tree Class Tree{ Node L; Node R; } Class Node{ int indx; int data;