อัลกอริธึมการค้นหาแบบกว้างก่อน: ภาพรวม ความสำคัญ & การใช้งาน
เผยแพร่แล้ว: 2020-12-23กราฟอยู่รอบตัวเรา กราฟสามารถคิดได้ว่าเป็นเครือข่ายของโหนดและขอบที่เชื่อมต่อถึงกัน เพื่อนของคุณบน Facebook คนรู้จักของคุณบน LinkedIn หรือผู้ติดตาม Twitter/Instagram ถือเป็นกราฟโซเชียลของคุณ ในทำนองเดียวกัน หากคุณต้องการเดินทางจากจุด A ไปยังจุด B คุณสามารถทำได้ผ่านหลายเส้นทาง ซึ่งสามารถมองเห็นได้บน Google แผนที่
ตัวเลือกเส้นทางที่หลากหลายเหล่านี้จากจุด A ไปยังจุด B ถือเป็นกราฟเช่นกัน กราฟเป็นหนึ่งในโครงสร้างข้อมูลที่พบบ่อยที่สุดที่เราพบในแวดวงวิชาการและในโลกแห่งความเป็นจริง เพราะมันมีอยู่ทั่วไปทุกหนทุกแห่ง และหนึ่งในการดำเนินการที่พบบ่อยที่สุดที่สามารถทำได้บนกราฟคือการข้ามผ่านกราฟ
Graph Traversal คืออะไร?
Graph Traversal เป็นวิธีการเยี่ยมชมทุกโหนดในกราฟเพียงครั้งเดียวด้วยความเร็วและความแม่นยำ เป็นอัลกอริธึมการค้นหากราฟขั้นสูงที่ให้คุณพิมพ์ลำดับของโหนดที่เข้าชมโดยไม่ต้องวนซ้ำแบบอนันต์ มีอัลกอริธึมการข้ามผ่านกราฟมากมาย เช่น Depth-First Search , Breadth-First Search , อัลกอริธึมของ Djikstra , A-Star Algorithm และอื่นๆ
บทความนี้จะเจาะลึกลงไปใน อัลกอริธึมการค้นหาแบบกว้าง หรือ BFS
โครงสร้างกราฟ
ก่อนที่เราจะดูรายละเอียดภายใต้ฮูด BFS ให้เราทำความคุ้นเคยกับคำศัพท์ของกราฟด้วยความช่วยเหลือของกราฟด้านบน:
Root Node – โหนดที่คุณเริ่มกระบวนการข้ามผ่าน เพื่อความง่าย เราสามารถพิจารณาว่า A เป็นโหนดรูท

ระดับ – ระดับคือชุดของโหนดทั้งหมดที่อยู่ห่างจากโหนดรูทเท่ากัน ดังนั้นหากเราพิจารณาว่าโหนด A อยู่ที่ระดับ 0 โหนด B และ C อยู่ที่ระดับ 1 ในขณะที่โหนด D, E และ F อยู่ที่ระดับ 2 ฮิวริสติกอย่างง่ายสำหรับการกำหนดหมายเลขระดับของโหนดคือการนับจำนวน ของขอบระหว่างโหนดดังกล่าวและโหนดรูท โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะเมื่อคุณกำหนดโหนดรูทให้อยู่ที่ระดับ 0
โหนด หลัก – โหนดหลักของโหนดคือโหนดที่อยู่เหนือระดับหนึ่งและอยู่ติดกับโหนดนั้น สามารถคิดได้ว่าเป็นโหนดที่โหนดดังกล่าวมีต้นกำเนิด A คือโหนดหลักของ B และ C
โหนดย่อย / โหนด ย่อย – โหนดที่แยกย่อยและอยู่ติดกับโหนดหลัก B และ C เป็นโหนดย่อยของ A
อ่าน: เทคนิคการสร้างภาพข้อมูล 10 อันดับแรก
BFS เป็นอัลกอริธึมการข้ามผ่านกราฟเพื่อสำรวจต้นไม้หรือกราฟอย่างมีประสิทธิภาพ อัลกอริธึมเริ่มต้นด้วยโหนดเริ่มต้น (โหนดรูท) จากนั้นดำเนินการสำรวจโหนดทั้งหมดที่อยู่ติดกันในลักษณะที่กว้างก่อน ตรงข้ามกับความลึกก่อน ซึ่งลงไปที่สาขาใดสาขาหนึ่งจนถึงโหนดทั้งหมดในสาขานั้น มีการเยี่ยมชม พูดง่ายๆ คือ มันข้ามผ่านระดับกราฟ โดยไม่เลื่อนลงมาจนถึงระดับหนึ่งจนกว่าโหนดทั้งหมดในระดับนั้นจะถูกเข้าชมและทำเครื่องหมาย
มันทำงานบนหลักการเข้าก่อนออกก่อน (FIFO) และดำเนินการโดยใช้โครงสร้างข้อมูลคิว เมื่อเยี่ยมชมโหนดแล้ว โหนดจะถูกแทรกลงในคิว จากนั้นระบบจะบันทึกและใส่โหนดย่อยทั้งหมดลงในคิว กระบวนการนี้ดำเนินต่อไปจนกว่าจะมีการเยี่ยมชมและบันทึกโหนดทั้งหมดในกราฟ
ให้เราดูการดำเนินการคิวโดยละเอียดสำหรับอัลกอริทึม BFS สำหรับกราฟที่ระบุด้านบน:
() – หมายถึง คิว
[] – หมายถึงเอาต์พุตที่พิมพ์ออกมา
- แทรก A ลงในคิว (a)
- พิมพ์ A ใส่ B และ C ลงในคิว (cb)[a]
- พิมพ์ B ใส่โหนดย่อย D และ E ลงในคิว (edc)[ba]
- พิมพ์ C ใส่โหนดย่อย F ลงในคิว (fed)[cba]
- พิมพ์ D ใส่โหนดย่อยลงในคิว ไม่มีเลย (เฟ)[dcba]
- พิมพ์ E ซึ่งได้แทรกโหนดย่อย F ลงในคิวแล้ว (ฉ)[edcba]
- พิมพ์ F. [fedcba]
อะไรทำให้อัลกอริทึม BFS มีความสำคัญ
มีเหตุผลมากมายในการปรับใช้ BFS เป็นวิธีการค้นหาผ่านชุดข้อมูลจำนวนมากอย่างรวดเร็ว คุณลักษณะเด่นบางประการที่ทำให้เป็นตัวเลือกที่ต้องการสำหรับนักพัฒนาและวิศวกรข้อมูล ได้แก่:
- BFS สามารถสำรวจโหนดทั้งหมดในกราฟได้อย่างมีประสิทธิภาพ และค้นหาเส้นทางที่สั้นที่สุดในการสำรวจโหนดทั้งหมด
- จำนวนการวนซ้ำที่จำเป็นในการสำรวจกราฟทั้งหมดนั้นน้อยกว่าอัลกอริธึมการค้นหาอื่นๆ
- เนื่องจากมีการใช้คิว สถาปัตยกรรมจึงแข็งแกร่ง เชื่อถือได้ และสง่างาม
- เมื่อเทียบกับอัลกอริธึมอื่นๆ ผลลัพธ์ของ BFS นั้นแม่นยำและปราศจากข้อผิดพลาด
- การวนซ้ำของ BFS ดำเนินไปอย่างราบรื่น โดยไม่ต้องเสี่ยงกับการวนซ้ำแบบไม่สิ้นสุด
ชำระเงิน: โครงการการแสดงข้อมูลที่คุณสามารถทำซ้ำได้

การประยุกต์ใช้อัลกอริทึม BFS
เนื่องจากความเรียบง่ายและความสะดวกในการติดตั้ง อัลกอริธึม BFS จึงพบการใช้งานอย่างแพร่หลายในสถานการณ์ที่สำคัญต่างๆ ในโลกแห่งความเป็นจริง ให้เราดูแอปพลิเคชันที่โดดเด่นสองสามอย่าง:
โปรแกรม รวบรวมข้อมูลของเครื่องมือค้นหา - ลองจินตนาการถึงโลกที่ไม่มี Google หรือ Bing คุณไม่สามารถ เครื่องมือค้นหาเป็นกระดูกสันหลังของอินเทอร์เน็ต และอัลกอริธึม BFS เป็นแกนหลักของเครื่องมือค้นหา เป็นอัลกอริธึมหลักที่ใช้ในการสร้างดัชนีหน้าเว็บ อัลกอริธึมเริ่มต้นการเดินทางจากหน้าต้นทาง (โหนดรูท) จากนั้นติดตามลิงก์ทั้งหมดบนหน้าแหล่งที่มานั้นอย่างกว้างๆ หน้าเว็บแต่ละหน้าสามารถคิดได้ว่าเป็นโหนดอิสระในกราฟ
Unweighted Graph Traversals – BFS สามารถระบุเส้นทางที่สั้นที่สุดและแผนภูมิการขยายขั้นต่ำในกราฟที่ไม่ได้ชั่งน้ำหนัก การค้นหาเส้นทางที่สั้นที่สุดเป็นเพียงการหาเส้นทางที่มีขอบน้อยที่สุด ซึ่ง BFS เหมาะสมอย่างยิ่ง สามารถทำงานได้โดยไปที่จำนวนโหนดน้อยที่สุด
การนำทางด้วย GPS - BFS ใช้ประโยชน์จากระบบ GPS เพื่อแสดงตำแหน่งใกล้เคียงที่เป็นไปได้ทั้งหมดจากจุดเริ่มต้นของคุณ ช่วยให้คุณนำทางจากจุด A ไปยัง B ได้อย่างราบรื่น

การ แพร่ภาพ - ระบบเครือข่ายออกอากาศใช้แพ็กเก็ตเป็นหน่วยในการส่งสัญญาณและข้อมูล อัลกอริทึม BFS ควบคุมแพ็กเก็ตเหล่านี้เพื่อไปยังโหนดทั้งหมดในเครือข่ายที่ควรจะเข้าถึง
เครือข่าย P2P – ทอร์เรนต์หรือเครือข่ายการแชร์ไฟล์อื่นๆ อาศัยการสื่อสารแบบ P2P BFS ทำงานได้ดีมากในการค้นหาโหนดที่ใกล้ที่สุด เพื่อให้การถ่ายโอนข้อมูลทำได้เร็วขึ้น
อ่านเพิ่มเติม: ประโยชน์ของการสร้างภาพข้อมูล
บทสรุป
Ergo อัลกอริธึมการค้นหาแบบกว้างก่อน เป็นหนึ่งในอัลกอริธึมที่สำคัญที่สุดของอินเทอร์เน็ตสมัยใหม่ หวังว่าบล็อกนี้จะเป็นจุดเริ่มต้นที่สะดวกในการสำรวจอัลกอริทึมการค้นหาของคุณ
เราขอแนะนำให้คุณเลือก PG Diploma in Data Science ที่นำเสนอโดย IIIT Bangalore ซึ่งโฮสต์บน upGrad เพราะที่นี่คุณสามารถรับคำถาม 1-1 กับผู้สอนหลักสูตรได้ ไม่เพียงแค่เน้นการเรียนรู้เชิงทฤษฎีเท่านั้น แต่ยังให้ความสำคัญกับความรู้เชิงปฏิบัติ ซึ่งเป็นสิ่งสำคัญในการเตรียมความพร้อมให้ผู้เรียนพร้อมสำหรับการเผชิญหน้าโครงการในโลกแห่งความเป็นจริง และมอบใบรับรอง NASSCOM ฉบับที่ 1 ของอินเดียแก่คุณ ซึ่งช่วยให้คุณได้งานที่ได้ค่าตอบแทนสูงใน Data Science
ข้อเสียของการใช้อัลกอริธึมการค้นหาครั้งแรกแบบกว้างมีข้อเสียอย่างไร
BFS มีข้อเสียเปรียบในการค้นหาแบบ 'ตาบอด' ซึ่งหมายความว่าเมื่อพื้นที่การค้นหามีขนาดใหญ่ ประสิทธิภาพการค้นหาจะด้อยกว่าการค้นหาแบบฮิวริสติกอื่นๆ เพื่อให้อัลกอริธึมการค้นหาแบบไบนารีแรกทำงานได้อย่างถูกต้อง จุดยอดที่เกี่ยวข้องทั้งหมดจะต้องบันทึกไว้ในหน่วยความจำ ซึ่งหมายความว่าจะใช้หน่วยความจำมากขึ้น ข้อเสียอีกประการหนึ่งคือ มันมีเส้นทางที่กว้างขวาง แม้ว่าเส้นทางทั้งหมดไปยังเป้าหมายจะมีความลึกในการค้นหาเกือบเท่ากัน
อัลกอริทึม BFS แตกต่างจากอัลกอริธึม DFS อย่างไร
BFS ใช้หน่วยความจำจำนวนมาก โดยเฉพาะอย่างยิ่งเมื่อปัจจัยการแตกแขนงของทรีสูง ในทางกลับกัน DFS อาจใช้เวลานานในการเยี่ยมชมโหนดใกล้เคียงเพิ่มเติม หากความลึกของต้นไม้มีขนาดใหญ่ แต่มีความซับซ้อนของพื้นที่น้อยกว่า BFS ทำงานได้ดีเมื่อต้องการค้นหาจุดยอดที่ใกล้กับแหล่งที่ระบุ เมื่อมีวิธีแก้ปัญหาที่ไม่พร้อมใช้งานจากต้นทาง แนะนำให้ใช้ DFS การย้อนรอยเป็นสิ่งสำคัญใน DFS ไม่เหมือนกับใน BFS BFS เคลื่อนที่ไปตามระดับต้นไม้ ในขณะที่ DFS เคลื่อนที่ไปตามความลึกของต้นไม้
อัลกอริทึม A-Star ทำงานอย่างไร
อัลกอริธึม A-Star เป็นวิธีค้นหาเส้นทางที่ค้นหาเส้นทางที่สั้นที่สุดระหว่างสถานะเริ่มต้นและสถานะสิ้นสุด มันถูกใช้เพื่อวัตถุประสงค์ที่หลากหลาย รวมถึงแผนที่ ซึ่งช่วยในการค้นหาระยะทางที่สั้นที่สุดระหว่างต้นทาง (สถานะเริ่มต้น) และปลายทาง (สถานะสุดท้าย) (สถานะสุดท้าย) เช่นเดียวกับวิธี Dijkstra อัลกอริทึมการค้นหา A-Star จะสร้างแผนผังเส้นทางที่มีต้นทุนต่ำที่สุดจากโหนดเริ่มต้นไปยังโหนดเป้าหมาย