1.02k likes | 1.26k Views
Data Structure and Algorithm . โครงสร้างข้อมูลแบบทรี (Tree). ความรู้พื้นฐาน เกี่ยวกับ Tree. Tree. โครงสร้างข้อมูลที่ได้เรียนมาในบทก่อน ๆ จะพบว่า ข้อมูลแต่ละตัวมี ความสัมพันธ์ ในรูป เชิงเส้น หรือแบบเชิง 1 มิติ
E N D
Data Structure and Algorithm โครงสร้างข้อมูลแบบทรี (Tree)
ความรู้พื้นฐาน เกี่ยวกับ Tree
Tree • โครงสร้างข้อมูลที่ได้เรียนมาในบทก่อน ๆ จะพบว่า ข้อมูลแต่ละตัวมีความสัมพันธ์ในรูปเชิงเส้นหรือแบบเชิง 1 มิติ • ในบทนี้จะกล่าวถึงโครงสร้างข้อมูลแบบไม่เชิงเส้น ซึ่งสามารถแสดงถึงความสัมพันธ์ที่ซับซ้อนกว่า และโครงสร้างข้อมูลแบบไม่เชิงเส้นที่สำคัญที่สุดคือTreeเป็นความสัมพันธ์ระหว่าง node ที่เป็นลำดับชั้นลดหลั่นกัน( Hierarchical Relationship )
Tree • รูปแบบของ tree ถูกนำมาประยุกต์ในหลาย ๆ ด้านเพื่อใช้ ในการแสดงความสัมพันธ์ระหว่างข้อมูล ตัวอย่างการใช้ tree 1 เพื่อใช้ในการแสดงความสัมพันธ์ของครอบครัว 2. แสดงแผนผังการจัดบุคคลในบริษัท โดยจัดลำดับตามตำแหน่ง 3. การจัดทำสารบัญหนังสือในแบบโครงสร้างของ tree
นิยามของ Tree 1. ในเชิง Math มีลักษณะเป็นรีเคอร์ซีฟ 2. Tree เป็น set จำกัดTที่มีสมาชิก 1 Node หรือ มากกว่า ซึ่งมี node พิเศษ 1 node เรียก Root 3. Node อื่นๆ ที่เหลือจะถูกแบ่งออกเป็นกลุ่มที่ไม่มีสมาชิกร่วมกัน สมมุติชื่อคือ T1 ,, T2 ,… Tn ( n >= 0 )โดยมีโครงสร้างเป็นต้นไม้ย่อยเรียกSubtreeเมื่อnคือจำนวนกลุ่มต้นไม้ย่อย
นิยามของ Tree ต้นไม้ย่อย T1 ต้นไม้ย่อย T2 V0เป็นroot ของ Tree ที่มีสมาชิกคือ {V1 , V2 , V3 , V4 , V5 , V6 , V7 }
นิยามของ Tree ต้นไม้ย่อย T2 ต้นไม้ย่อย T1 V1 เป็นroot ของ Tree ที่มีสมาชิกคือ{ V3 , V4 }
นิยามของ Tree V2เป็นroot ของ Tree ที่มีสมาชิกคือ
นิยามของ Tree ความสัมพันธ์ ระหว่าง Root nodeกับ Sub Tree เป็นลักษณะ พ่อ กับลูก (Parent and child ) • พ่อ(Father) คือ node ที่เป็นroot ของ Tree หรือ root ของ Subtree • ลูก(child) คือ node ที่เชื่อมโยงต่อจาก node ที่เป็นพ่อ
นิยามของ Tree พ่อ (Father) พ่อ (Father) ลูก(child) ลูก(child) A D B C T E F H G
คำศัพท์สำหรับ Tree 1. Brother Node : Node ที่มีพ่อแม่เดียวกัน 2. Branch/Edge ( เอดจ์):กิ่งเป็นเส้นเชื่อม ระหว่างพ่อกับลูก 3. Degree: จำนวนลูก หรือ ต้นไม้ย่อยของแต่ละ node 4. Leaf node : (ลีฟโหนด) คือ Node ที่ไม่มีลูก Degree = 0 5. Branch Node:Node ที่ไม่ใช่ Root, Leaf Degreeไม่เป็น 0
คำศัพท์สำหรับ Tree Brother Node = {BCD} {EF} {HT} A Branch/Edge Branch Node D B C T E F H G Leaf Node 1. Brother Node : Node ที่มีพ่อเดียวกัน 2. Branch / Edge: กิ่งเป็นเส้นเชื่อม ระหว่างพ่อกับลูก
คำศัพท์สำหรับ Tree Degree: จำนวนลูก หรือ ต้นไม้ย่อยของแต่ละ node A 3 D B C 2 2 1 T E F H G Leaf Node 4. Leaf node (ลีฟโหนด) คือ Node ที่ไม่มีลูก Degree = 0 5. Branch NodeNode ที่ไม่ใช่ Root, Leaf Degreeไม่เป็น 0
คำศัพท์สำหรับ Tree 5. Descendant ลูกหลาน / Successor ผู้มาทีหลัง Descendant ของ node x คือ ทุก node ที่ link ต่อ x ลงมาทั้งหมด A Descendant ของ A D B C H F G T E
คำศัพท์สำหรับ Tree Immediate Successor / Direct Descendant/ Son ลูกหลานโดยตรง A Direct Descendant ของA D B C H F G T E
คำศัพท์สำหรับ Tree 6. Ancestor บรรพบุรุษ / Predecessor ผู้มาก่อน Ancestor ของ node x คือ ทุก node ที่ Link อยู่เหนือ x A B และ A คือ Ancestor ของ E และ F D Direct Ancestor ของ E และ F B C H F G T E
คำศัพท์สำหรับ Tree 7. Immediate Predecessor / Direct Ancestor / Father A B คือ Father ของ E และ F D Direct Ancestor ของ E และ F B C H F G T E
คำศัพท์สำหรับ Tree 8 . Level ของnode (ระดับ) - ระยะทางตามแนวดิ่งของ node ว่าอยู่ห่างจาก root เท่าไร - เป็นหมายเลขแสดงระดับของnodeในต้นไม้ - ถ้า node มีระดับ L -> node ที่เชื่อมต่อจากมันมีระดับL+1 9. Height หรือ ระดับ( Level )ที่สูงสุดของ tree
คำศัพท์สำหรับ Tree Height : 3 Level : 1 . . . . . . . . . . . . . . A Level : 2 . . . D B C H Level : 3 F G T E
คำศัพท์สำหรับ Tree Height : 3 หนังสือบางเล่ม Level : 0 . . . . . . . . . . . . . . A Level : 1. . . D B C H Level : 2 F G T E
คำศัพท์สำหรับ Tree Level 1 R Root Level …. Z Y S X V W U T Ancestors of ……. Level … Father of …. Descendant of ….. Level ….. Son of …. Height of a tree = ……………………... Brother node of……. Subtree ของ node …….
คำศัพท์สำหรับ Tree Level 1 R Root Level 2 Z X Y V U S W T Internal node Ancestors of V Level 3 Father of V Leaf Descendant of T Level 4 Son of T Notation: Node, children, edge, parent, ancestor, descendant, path, depth, height, level, leaf node, subtree. depth of a node =จำนวน ของ edge จาก root - node Height of a tree =1+ max(depth of a node) = 4 Subtree Siblings of U
คำศัพท์สำหรับ Tree R X W V U S Y Z Y X W V U S Z T T 9. ป่า(Forest)
Ordered Tree Ordered Tree (ออร์เดอร์ทรี)หรือต้นไม้ที่มีแบบแผน • Tree ที่ node ใด ๆ มีsubtreeหรือdegree ตั้งแต่ 2 ขึ้นไป และลำดับจากซ้ายไปขวา ของ tree ย่อยมีความหมาย • มีความสัมพันธ์เชิงตำแหน่ง • ถ้าลำดับจากซ้ายไปขวา ของ tree ย่อยไม่มีความหมายเรียกว่า Oriented tree
Ordered Tree Ordered Tree A A B C C B D D J E I F
Tree ตัวอย่างโครงสร้างทรี • นิพจน์ทางคณิตศาสตร์ • Decision Trees • การแยกประเภทหนังสือในห้องสมุด
นิพจน์ทางคณิตศาสตร์ เราสามารถใช้โครงสร้างของ Treeในการแทนนิพจน์ทางคณิตศาสตร์ โดยจัดให้ 1.node สาขา (Branch node) เป็น node สำหรับเครื่องหมายการคำนวณ 2. ส่วนnode ปลาย (Leaf node) เป็น node สำหรับตัวถูกกระทำของเครื่องหมายการคำนวณนั้น ๆ
Tree V1 * V2 –(V3 + V4 ^ V5 )
Decision Trees • Tree ชนิดนี้มักเกิดขึ้นในการประยุกต์เกี่ยวกับการเล่นเกม หรืองานเกี่ยวกับการสร้างแบบจำลองเหตุการณ์ ตัวอย่างการนำไปใช้ในการเล่นเกม โดยแต่ละ nodeของ tree จะใช้แทนการตัดสินใจว่าจะเล่นต่อไปอย่างไร tree ที่ใช้แทนการเล่นเกมนี้เรียก ทรีเกม (Game Tree) ซึ่งขนาดของทรีเกม มักจะมีขนาดใหญ่
การแยกประเภทหนังสือในห้องสมุดการแยกประเภทหนังสือในห้องสมุด • ระบบการจัดทำCatalog ของห้องสมุด ส่วนใหญ่จะใช้โครงสร้างของทรี เช่นตัวอย่างระบบดิววี่ ( Dewey Decimal System ) ซึ่งจะจัดเป็นระบบลดหลั่นลงมา โดยเริ่มจากความรู้กว้าง ๆ ก่อน แล้วแยกออกเป็นแผนกย่อยตามสาขาวิชาที่ละเอียดขึ้น หรือลักษณะการจัดทำสารบัญหนังสือ ที่มีการจัดทำเป็นหัวข้อเรื่องใหญ่ และมีหัวข้อย่อยในแต่ละเรื่อง เป็นต้น
การแทนโครงสร้างต้นไม้การแทนโครงสร้างต้นไม้ ในคอมพิวเตอร์
Array Implementation Linked Lists Implementation
Binary Tree (ต้นไม้ทวิภาค)
Binary Tree • ในแต่ละ node จะมี subtree หรือ degree ได้ไม่เกิน 2 • ถ้ามี subtree เดียว ต้องระบุด้วยว่า เป็น node ทางซ้ายหรือทางขวา ของRoot T = NULL
Binary Tree T = NULL มองในเชิงMath คำจำกัดความของBinary tree จะเป็นrecursive • เป็น set จำกัดของ node ที่อาจเป็นset ว่างหรือประกอบด้วย node ที่เรียกRoot และnode ที่เหลือแบ่งออกเป็น subtree ที่ไม่มี node ร่วมกัน โดย subtree ก็จะเป็นbinary tree ด้วย • Left และ Right Subtree
Binary Tree Binary Tree Example Max depth = 3 Height = 4 Right son Left son
Binary Tree Complete Binary Trees ความสัมพันธ์ระหว่างระดับและจำนวน node n = 2l-1 เมื่อ l คือ max level 15 5 16 3 12 1 20
Binary Tree Position 0 1 2 3 4 5 6 7 8 9 10 11 Parent -- 0 0 1 1 2 2 3 3 4 4 5 Left Child 1 3 5 7 9 11 -- -- -- -- -- -- Right Child 2 4 6 8 10 -- -- -- -- -- -- -- Left Sibling -- -- 1 -- 3 -- 5 -- 7 -- 9 -- Right Sibling -- 2 -- 4 -- 6 -- 8 -- 10 -- -- Array Implementation
Binary Tree Linked List Implementation DATA Lson Rson
การแปลง Tree ไปเป็น Binary Tree
การแปลง Tree ไปเป็น Binary Tree การแปลงtreeไปเป็นbinary tree • โครงสร้าง Tree มักมี degree > 2 • ดังนั้นการสร้างจึงต้องกำหนด เขตเชื่อมโยงให้พอ • บาง node ใช้ครบ บาง node ไม่ครบ
การแปลง Tree ไปเป็น Binary Tree R Z S U V W X Y T
การแปลง Tree ไปเป็น Binary Tree ขั้นตอน 1. ให้เชื่อม node ที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน - ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยังลูก ๆ ออกให้หมด ยกเว้น ลูกที่อยู่ตำแหน่งซ้ายสุด 2. เลือก son ทางซ้ายและขวา ของแต่ละ node - son ทางซ้าย คือ node ที่อยู่ใต้ node นั้น - son ทางขวา คือ node ที่อยู่ข้าง ๆ (ระดับเดียวกัน / Brother )
การแปลง Tree ไปเป็น Binary Tree A D B C T G H F E เริ่มต้น 1.ให้เชื่อม nodeที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน
การแปลง Tree ไปเป็น Binary Tree A ขั้นที่ 1 D B C T G H F E 1.ให้เชื่อม nodeที่มีพ่อเดียวกัน ( node พี่น้อง) เข้าด้วยกัน
การแปลง Tree ไปเป็น Binary Tree A ขั้นที่ 1-1 D B C T G H F E 1. ลบเส้นเชื่อมโยงจาก node ที่เป็นพ่อไปยังลูก ๆ ออกให้หมด ยกเว้น ลูกที่อยู่ตำแหน่งซ้ายสุด
การแปลง Tree ไปเป็น Binary Tree A B C D F E G H T ขั้นที่ 2 เลือก son ทางซ้ายและขวา ของแต่ละ node - son ทางซ้าย คือ node ที่อยู่ใต้ node นั้น - sonทางขวา คือ node ที่อยู่ข้าง ๆ (ระดับเดียวกัน / Brother )
แบบฝึกหัด A จงแปลง Tree ให้เป็น Binary Tree B C D 1 3 2 4 5 9 7 8 6 10 A B C E F G D J K L M