210 likes | 358 Views
โครงสร้างข้อมูล. Data Structure. การค้นหาข่าวสาร (Information Search) การค้นหาข่าวสารแบบซีเควนเชียล (Sequential Search) การค้นหาข่าวสารแบบขจัดครึ่ง ( Binary Search) ตารางที่มีโครงสร้างแบบต้นไม้ การปลิดโหนดจากตารางโครงสร้างต้นไม้ไบนารี. การค้นหาข่าวสาร ( Information Search)
E N D
โครงสร้างข้อมูล Data Structure
การค้นหาข่าวสาร (Information Search) • การค้นหาข่าวสารแบบซีเควนเชียล (Sequential Search) • การค้นหาข่าวสารแบบขจัดครึ่ง (Binary Search) • ตารางที่มีโครงสร้างแบบต้นไม้ • การปลิดโหนดจากตารางโครงสร้างต้นไม้ไบนารี
การค้นหาข่าวสาร (Information Search) • รูปแบบของข้อมูลข่าวสารที่จัดเก็บ • อยู่ในรูปแบบตาราง (table), array, link-list • อยู่ในรูปแบบตารางที่มีโครงสร้างแบบต้นไม้ • การค้นหาข้อมูล • ขึ้นอยู่กับลักษณะการเก็บข้อมูล และอัลกอริทึมที่ใช้ได้สำหรับการจัดเก็บข้อมูล แต่ละแบบนั้น • กรณีข้อมูลอยู่บนความจำหลักทั้งหมด การค้นหาจะเร็วหรือช้า ขึ้นอยู่กับจำนวนครั้งในการเปรียบเทียบ
การค้นหาข่าวสาร (Information Search) • ลักษณะของข่าวสารที่จะค้นหา • ข้อมูลที่จัดเก็บ จะมีส่วนที่เป็นคีย์ (key)และส่วนที่เป็นเนื้อหา • ส่วนที่เป็นเนื้อหาอาจรวมอยู่กับส่วนที่เป็นคีย์ เรียกรวมว่าเป็น record • ในบางกรณีถ้า recordมีขนาดใหญ่มาก อาจมีการเก็บคีย์แยกออกจาก recordแล้วเชื่อมหากันได้ด้วย pointer • คีย์หลักของข้อมูลเราเรียกว่า primary keyนอกนั้นเรียก secondary key • การจัดการข้อมูลเราทำได้ทั้ง เพิ่ม(insert)แก้ไข, ลบออก (delete)ได้
การค้นหาข่าวสารแบบซีเควนเชียล (เรียงลำดับ) • การค้นหาจะเป็นการเทียบคีย์ไปทีละรายการจนพบ • กรณีที่ดีที่สุด : เปรียบเทียบคีย์ 1 ครั้งแล้วพบ (คีย์อยู่ตัวแรก) • กรณีแย่ที่สุด : เปรียบเทียบคีย์ nครั้งแล้วพบ (คีย์อยู่ตัวสุดท้าย) • กรณีเฉลี่ยทั่วไป : เปรียบเทียบคีย์ n/2ครั้ง • ข้อดีคือการเก็บข้อมูลเป็นแบบธรรมดา คีย์ไม่ต้องเรียงลำดับ เพิ่ม/ลบข้อมูลง่าย • ข้อเสียคือการค้นหาจะเป็นไปได้ค่อนข้างช้าหากข้อมูลมีจำนวนมาก
การค้นหาข่าวสารแบบซีเควนเชียลการค้นหาข่าวสารแบบซีเควนเชียล • อัลกอริทึมในการค้นหาและเตรียมแทรก/เพิ่มข้อมูล ดูตัวอย่างประกอบ • อัลกอริทึมในการลบหรือทิ้งข้อมูลออกตาราง ดูตัวอย่างประกอบ
การค้นหาข่าวสารแบบขจัดครึ่ง (Binary Search) • การค้นหาจะรวดเร็วขึ้น • ค้นหาโดยการแบ่งทีละครึ่ง • หลักการ • คีย์จะต้องเรียงลำดับจากน้อยไปมาก (หรือมากไปน้อย) • การเปรียบเทียบโดยการแบ่งครึ่งแล้วเทียบว่าอยู่ครึ่งแรกหรือครึ่งหลัง
การค้นหาข่าวสารแบบขจัดครึ่งการค้นหาข่าวสารแบบขจัดครึ่ง • รูปแบบการค้นหา k1, k2, …, kmid-1, kmid, kmid+1, …,kn ถ้า ki < Kmidถ้า ki > kmid key อยู่ครึ่งแรก key อยู่ครึ่งหลัง • อัลกอริทึมในการค้นหา ดูตัวอย่างประกอบ
ตารางที่มีโครงสร้างแบบต้นไม้ตารางที่มีโครงสร้างแบบต้นไม้ • การสร้างตารางมาจากแนวความคิดแบบต้นไม้ไบนารี มีLsonและ Rson • ค่าk-Lson < k-Node < k-Rson • การค้นหาข้อมูลโดยวิธีBinary Search Tree • เป็นการสร้างตารางจากชุดคีย์ที่เข้ามา โดยให้ตัวแรกเป็นรูต • ค่าถัดไปที่เข้ามา หากน้อยกว่าให้อยู่ Lson • ถ้ามากกว่าให้อยู่ Rson • แต่ถ้ามีอยู่แล้วก็ให้เทียบถัดต่อไปจาก Lsonหรือ Rsonจนกว่าจะหมด
Binary Search Tree หรือ • โครงสร้างโหนดของ Binary Search Tree อาจอยู่ในรูปแบบคีย์ และเรคคอร์ด หรือแบบคีย์กับพ้อยน์เตอร์ไปหาเรคคอร์ดก็ได้ • ดูตัวอย่างการสร้าง binary search tree
การปลิดโหนด(ลบ) จากตารางโครงสร้างต้นไม้ไบนารี • หลักการ • ต้องรักษาความสัมพันธ์ระหว่างโหนดแบบ binary search treeไว้ได้ • โหนดLsonจะต้องมีค่าน้อยกว่า Rson • เมื่อท่องต้นไม้แบบอินออร์เดอร์ จะได้ชุดลำดับของโหนดเรียงจากน้อยไปมาก • ขั้นตอนในการปลิดโหนด • ปลิดโหนดที่เป็นใบ (leaf node) • ปลดโหนดที่มีต้นไม้ย่อยด้านซ้าย หรือมีต้นไม้ย่อยด้านขวา
การปลิดโหนดที่เป็นโหนดใบ (leaf Node) • เราสามารถปลิดโหนดที่เป็นใบได้เลย เพราะไม่กระทบรูปแบบ binary search tree เพราะยังคงหลักการที่กำหนดไว้ได้ • โหนดที่เราจะปลิดได้โดยไม่กระทบหลักการคือโหนดที่ 7, 24, 28, 42 22 22 8 25 8 25 5 24 29 5 24 29 7 28 42 7 28 42
การปลิดโหนดที่มีต้นไม้ย่อยด้านซ้าย หรือมีต้นไม้ย่อยด้านขวา • ขั้นตอนมีดังนี้ • เมื่อปลิดโหนดทิ้งไป โหนดที่จะมาแทนที่คือโหนดที่เป็นเพื่อนบ้านถัดไป (แบบอินออร์เดอร์) • และโหนดที่อยู่ต่อจากเพื่อนบ้านลงไป จะกลายเป็น left subtreeของโหนดที่เป็นพ่อเดิมของโหนดเพื่อนบ้านนี้
การปลิดโหนดที่มีต้นไม้ย่อยด้านซ้ายหรือมีต้นไม้ย่อยด้านขวาการปลิดโหนดที่มีต้นไม้ย่อยด้านซ้ายหรือมีต้นไม้ย่อยด้านขวา • เรียงโหนดแบบอินออร์เดอร์คือ 7, 8, 21, 22, 25, 28, 29, 42 • ต้องการปลิดโหนด 25 เพื่อนบ้านของโหนด 25 คือโหนด 28 22 22 8 25 8 28 7 21 29 7 21 29 ก่อนปลิด หลังปลิดโหนด 25 28 42 42
การปลิดโหนดที่มีต้นไม้ย่อยด้านซ้ายหรือมีต้นไม้ย่อยด้านขวาการปลิดโหนดที่มีต้นไม้ย่อยด้านซ้ายหรือมีต้นไม้ย่อยด้านขวา 27 27 15 35 15 36 11 24 30 40 11 24 30 40 36 45 38 45 ก่อนปลิดโหนด 35 38 37 39 37 39 หลังปลิดโหนด 35
Extended Binary Search Tree • ในการค้นหาคีย์ในต้นไม้ไบนารี หากเราต้องการรู้ถึงจำนวนการเปรียบเทียบเพื่อให้ได้ค่าคีย์ที่ต้องการ เราจะต้อง • กำหนดจุดจบแต่ละโหนดที่เป็นโหนดใบ หรือโหนดที่ไม่มี lson/rson • คำนวณหาระยะทางเดินทั้งสิ้นเพื่อจะบอกจำนวนครั้งที่ต้องเปรียบเทียบ ทั้งในกรณีที่หาเจอ หรือหาไม่เจอ • วิธีการเพื่อที่จะให้ได้สูตรดังข้างบนเราจะต้องสร้างส่วนต่อของต้นไม้ (extended binary search tree)
Extended Binary Search Tree 27 15 35 11 24 30 40 36 45 เมื่อเราทำการต่อโหนดใบทุกโหนด และโหนดที่ขาด lsonหรือขาด rson 38 37 39
Extended Binary Search Tree • การคำนวณจะนิยาม 2 ค่าเพื่อมาใช้ในสูตร • ค่า internal path length (i) คือผลรวมของความยาวทางเดินจากรูตโหนดถึงโหนดภายใน (โหนดวงกลม) i = 0 + 2 + 8 + 6 + 4 + 10 = 30
Extended Binary Search Tree • ค่า external path length (e) คือผลรวมของความยาวทางเดินจากรูตโหนดถึงโหนดสี่เหลี่ยม e = 18 + 12 + 24 = 54 total length = no of node x path length
Extended Binary Search Tree • เมื่อเราต้องการหาค่าคีย์ใดคีย์หนึ่งในต้นไม้นี้ ความเป็นไปได้ในการค้นหาเราจะได้ว่า • Cs (found) = i + n n • Cf (fail) = e n + 1 i คือค่า internal path lengthรวม e คือค่า external path lengthรวม n คือจำนวนโหนดใน binary search tree (โหนดวงกลม)
Extended Binary Search Tree 27 i = 30, e = 54, n = 12 ค่าเฉลี่ยของจำนวนครั้งในการค้นหาพบ Cs = (30+12) / 12 = 3.5 ค่าเฉลี่ยของจำนวนครั้งที่จะค้นหาไม่พบ Cf = 54 / (12 + 1) = 4.1 15 35 11 24 30 40 36 45 38 37 39