หน้าเว็บ

วันเสาร์ที่ 29 สิงหาคม พ.ศ. 2552

DTS 08-26-08-2552


ทรี (Tree)

ทรี (Tree) เป็นโครงสร้างข้อมูลที่ความสัมพันธ์ ระหว่างโหนดจะมีความสัมพันธ์ลดหลั่นกันเป็นลำดับชั้น (Hierarchical Relationship) ได้มีการนำรูปแบบทรีไปประยุกต์ใช้ในงานต่าง ๆ อย่างแพร่หลาย ส่วนมากจะใช้สำหรับแสดงความสัมพันธ์ระหว่างข้อมูล เช่น แผนผังองค์ประกอบของหน่วยงานต่าง ๆ โครงสร้างสารบัญหนังสือ แต่ละโหนดจะมีความสัมพันธ์กับโหนดในระดับที่ต่ำลงมาหนึ่งระดับได้หลาย ๆ โนด เรียกโหนดดังกล่าวว่า โหนดแม่ (Parent or Mother Node) โหนดที่อยู่ต่ำกว่าโหนดแม่อยู่หนึ่งระดับ เรียกว่า โหนดลูก(Child or Sun Node) โหนดที่อยู่ในระดับสูงสุดและไม่มีโหนดแม่ เรียกว่า โหนดราก (Root Node) โหนดที่มีโหนดแม่เป็นโหนดเดียวกัน เรียกว่า โหนดพี่น้อง (Siblings) โหนดที่ไม่มีโหนดลูก เรียกว่า โหนดใบ (Leave Node) เส้นเชื่อมแสดงความสัมพันธ์ระหว่างโหนดสองโหนดเรียกว่า กิ่ง (Branch) Ancestor Node หรือ บรรพบุรุษของโหนดใด ๆ หมายถึง โหนดที่มาก่อนโหนดใด ๆ Decendant Node หรือ ผู้สืบสกุล หมายถึง โหนดที่ตามหลังโหนดใด ๆ
นิยามของทรี

1. นิยามทรีด้วยนิยามของกราฟทรี คือ กราฟที่ต่อเนื่องโดยไม่มีวงจรปิด loop ในโครงสร้าง โหนดสองโหนดใดๆ ในทรีต้องมีทางติดต่อกันทางเดียวเท่านั้น และทรีที่มี N โหนด ต้องมีกิ่งทั้งหมด N-1 เส้น

การเขียนรูปแบบทรี อาจเขียนได้ 4 แบบ คือ



2. นิยามทรีด้วยรูปแบบรีเคอร์ซีฟทรี ประกอบด้วยสมาชิกที่เรียกว่า โหนด โดยที่ถ้าว่าง ไม่มีโหนดใดๆ เรียกว่านัลทรี (Null Tree) และถ้ามีโหนหนึ่งเป็นโหนดราก ส่วนที่เหลือจะแบ่งเป็นทรีย่อย (Sub Tree)

นิยามที่เกี่ยวข้องกับทรี

1. ฟอร์เรสต์ (Forest)หมายถึง กลุ่มของทรีที่เกิดจากการเอาโหนดรากของทรีออกหรือ เซตของทรีที่แยกจากกัน(Disjoint Trees)
2. ทรีที่มีแบบแผน (Ordered Tree)หมายถึง ทรีที่โหนดต่าง ๆ ในทรีนั้นมีความสัมพันธ์ที่แน่นอน เช่น ไปทางขวาไปทางซ้าย เป็นต้น
3. ทรีคล้าย (Similar Tree) คือทรีที่มีโครงสร้างเหมือนกัน หรือทรีที่มีรูปร่างของทรีเหมือนกัน โดยไม่คำนึงถึงข้อมูลที่อยู่ในแต่ละโหนด
4. ทรีเหมือน (Equivalent Tree) คือทรีที่เหมือนกันโดยสมบูรณ์ โดยต้องเป็นทรีที่คล้ายกันและแต่ละโหนดในตำแหน่งเดียวกันมีข้อมูลเหมือนกัน
5. กำลัง (Degree) หมายถึงจำนวนทรีย่อยของโหนด นั้น ๆ
6. ระดับของโหนด (Level of Node) คือระยะทางในแนวดิ่งของโหนดนั้น ๆ ที่อยู่ห่างจากโหนดราก เมื่อกำหนดให้ โหนดรากของทรีนั้นอยู่ระดับ 1และกิ่งแต่ละกิ่งมีความเท่ากันหมด คือ ยาวเท่ากับ 1หน่วย ซึ่งระดับของโหนดจะเท่ากับจำนวนกิ่งที่น้อยที่สุดจากโหนดรากไปยังโหนดใด ๆ บวกด้วย 1และจำนวนเส้นทางตามแนวดิ่งของโหนดใด ๆ ซึ่งห่างจากโหนดราก เรียกว่า ความสูง (Height) หรือความลึก (Depth)

การแทนที่ทรีในหน่วยความจำหลัก

1.โหนดแต่ละโหนดเก็บพอยเตอร์ชี้ไปยังโหนดลูกทุกโหนด ซึ่งจะทำให้ฟิลด์มีจำนวนเท่ากัน มีขนาดเท่ากับโหนดที่มีลูกมากที่สุด โหนดที่ไม่มีลูกใส่ค่า Null แล้วให้ลิงค์ฟิลด์เก็บค่าพอยเตอร์ของโหนดลูกตัวถัดไปเรื่อยๆ เช่น ลิงค์ฟิลด์แรกเก็บค่าพอยเตอร์ชี้ไปยังโหนดลูกลำดับแรก แต่การแทนที่ทรีด้วยวิธีนี้เป็นการสิ้นเปลืองเนื้อที่โดยใช่เหตุเนื่องจากว่าโหนดบางโหนดอาจมีโหนดลูกน้อย หรือไม่มีโหนดลูกเลย

2.แทนทรีด้วยไบนารีทรี จะมีการกำหนดโหนดทุกโหนดให้มีจำนวนลิงค์ฟิลด์เพียงสองลิงค์ฟิลด์ โดยลิงค์ฟิลด์แรกเก็บที่อยู่โหนดลูกคนโต ลิงค์ฟิลด์ที่สองเก็บที่อยู่โหนดพี่น้อง กรณีไม่มีโหนดลูกและโหนดพี่น้องใส่ Null การแทนที่ทรีด้วยวินี้เป็นการประหยัดเนื้อที่ได้มาก
ไบนารีทรีแบบสมบูรณ์นั้นจะมีโหนดทรีย่อยทางด้านซ้ายและขวา ยกเว้นโหนดใบหรือโหนดที่ไม่มีลูก แต่โหนดใบจะต้องอยู่ในระดับเดียวกัน


การแปลงทรีทั่วไปให้เป็นไบนารีทรี มีขั้นตอนดังนี้

1.ให้โหนดแม่ชี้ไปยังโหนดลูกคนโตแล้วตัดความสัมพันธ์ระหว่างโหนดลูกอื่นๆ
2.เชื่อมความสัมพันธ์ระหว่างโหนดพี่น้อง
3.ให้ทรีย่อยทางขวาเอียงลงมา 45 องศา

การท่องไปในไบนารีทรี

ปฏิบัติการที่สำคัญในไบนารีทรี คือ การท่องไปในไบนารีทรี (Traversing Binary Tree) เพื่อเข้าไปเยือนทุก ๆโหนดในทรี ซึ่งวิธีการท่องเข้าไปต้องเป็นไปอย่างมีระบบแบบแผน สามารถเยือนโหนดทุก ๆโหนด ๆ ละหนึ่งครั้งวิธีการท่องไปนั้นมีด้วยกันหลายแบบแล้วแต่ว่าต้องการลำดับขั้น ตอนการเยือนอย่างไร โหนดที่ถูกเยือนอาจเป็นโหนดแม่ (แทนด้วย N)ทรีย่อยทางซ้าย (แทนด้วย L)ทรีย่อยทางขวา (แทนด้วย R)วิธีการท่องไปในทรีมี 6 วิธี คือNLR, LNR, LRN ,NRL ,RNL และ RLNแต่นิยมใช้กันมากคือ NLR , LNR , LRN

1. วิธี NLR ในลักษณะการเข้าถึงจะเริ่มต้นจากจุดแรกคือ N จากนั้นจึงเข้าไปทรีย่อยด้านซ้ายและเข้าถึงทรีย่อยด้านขวา
2. วิธี LNR สำหรับการเข้าถึงแบบอินออร์เดอร์จะดำเนินการเข้าเยี่ยมทรีย่อยด้านซ้ายก่อน จากนั้นจึงเข้าเยี่ยม N และสิ้นสุดการเข้าเยี่ยมที่ทรีย่อยด้านขวา
3. วิธี LRN การประมวลผลของโพสออร์เดอร์ จะเริ่มต้นด้วยทรีย่อยด้านซ้ายจานั้นมาประมวลผลต่อที่ทรีย่อยด้านขวาและสิ้น สุดการประมวลผลที่ N

ไม่มีความคิดเห็น:

แสดงความคิดเห็น