ความหมายของ 'ความกว้าง' ในการค้นหาความกว้างครั้งแรกคืออะไร?


11

ฉันได้เรียนรู้เกี่ยวกับการค้นหาครั้งแรกและคำถามอยู่ในใจว่าทำไม BFS จึงถูกเรียกเช่นนั้น ในหนังสือแนะนำอัลกอริทึมโดย CLRSฉันอ่านเหตุผลต่อไปนี้:

การค้นหาความกว้างครั้งแรกนั้นตั้งชื่ออย่างมากเพราะจะเป็นการขยายขอบเขตระหว่างจุดยอดที่ค้นพบและจุดที่ยังไม่ถูกค้นพบอย่างสม่ำเสมอทั่วทั้งความกว้างของแนวชายแดน

อย่างไรก็ตามฉันไม่สามารถเข้าใจความหมายของข้อความนี้ได้ ฉันสับสนเกี่ยวกับคำนี้ "ชายแดน" และความกว้างของชายแดนนั้น

ดังนั้นบางคนได้โปรดตอบคำถามนี้ในวิธีที่ง่ายต่อการเข้าใจสำหรับผู้เริ่มต้นเช่นฉัน


4
ในกรณีที่ผู้อ่านบางคนที่ไม่คุ้นเคยกับความหมายของคำภาษาอังกฤษ (ด้านนอกของการใช้งานที่เป็นส่วนหนึ่งของระยะทางเทคนิคนี้): merriam-webster.com/dictionary/breadthหรือdictionary.cambridge.org/dictionary/english/breadth มันคล้ายกับ "ความกว้าง" ซึ่งเป็นมิติที่แตกต่างจาก "ความลึก" หากคุณกำลังพูดถึงขนาด / รูปร่างของวัตถุทางกายภาพ และในความหมายเชิงเปรียบเทียบเช่นความลึกของความรู้ (ผู้เชี่ยวชาญในหนึ่งวิชา) และความกว้างของความรู้ (วิชาจำนวนมาก)
Peter Cordes

คำตอบ:


22

พิจารณาโครงสร้างข้อมูลที่ใช้เพื่อแสดงการค้นหา ใน BFS คุณใช้คิว ถ้าคุณเจอโหนดที่มองไม่เห็นคุณเพิ่มมันเข้าไปในคิว

“ frontier” คือชุดของโหนดทั้งหมดในโครงสร้างข้อมูลการค้นหา คิวจะวนซ้ำผ่านโหนดทั้งหมดบนแนวชายแดนตามลำดับดังนั้นวนซ้ำตามความกว้างของชายแดน DFS จะปรากฏสถานะที่ค้นพบล่าสุดออกจากสแต็กเสมอดังนั้นจะวนซ้ำในส่วนที่ลึกที่สุดของชายแดน

พิจารณาภาพด้านล่าง สังเกตว่า DFS ตรงไปยังส่วนที่ลึกที่สุดของต้นไม้ในขณะที่ BFS วนซ้ำไปตามความกว้างของแต่ละระดับ

dfs bfs

ภาพที่นี่


2
ฉันคิดว่าคำว่าชายแดนอาจอ้างถึงขอบของโหนดที่ค้นพบ เมื่อคุณได้ค้นพบเพียงชายแดนคือa aเมื่อคุณได้ค้นพบa, b, cชายแดนคือ,b cเมื่อคุณได้ค้นพบa, b, c, d, e, f, g, ชายแดนคือd, e, ,f gกล่าวอีกนัยหนึ่งคือโหนดที่ถูกค้นพบและเรายังไม่ได้ค้นหาเลย
Theodoros Chatzigiannakis

ฉันคิดว่านี่เป็นจุดที่ยุติธรรม แต่ฉันคิดว่า "ชายแดน" สามารถตีความได้หลายวิธีโดยที่คำอธิบายทั่วไปข้างต้นยังคงใช้ได้
Throckmorton

2

คำพูดที่คุณให้จะบอกว่า "พรมแดนระหว่างจุดยอดที่ค้นพบและจุดที่ไม่ถูกค้นพบ" นั่นคือขอบเขตที่ผู้เขียนกำลังพูดถึง: เขตแดนระหว่างจุดยอดที่ค้นพบและจุดที่ยังไม่ถูกค้นพบ คุณมีจุดยอดที่คุณยังไม่เห็นอะไรเลย คุณมีจุดยอดที่คุณเห็นทุกอย่าง แล้วคุณก็มีจุดยอดระหว่าง นี่คือจุดยอดเยี่ยมที่คุณได้ดู แต่คุณยังไม่ได้โหลดลูกของพวกเขาทั้งหมด นี่คือชายแดน

การอภิปรายนี้เพิ่มเติมเกี่ยวกับ:

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

ดังนั้นจุดเริ่มต้นทั้งหมดจะเป็นสีขาว (ยังไม่ถูกค้นพบ) เมื่อค้นพบโหนดจะมีสีเทา (ชายแดน) เมื่อทุกสิ่งที่ชี้ไปถูกค้นพบก็คือสีดำ (ค้นพบทั้งหมด) ชายแดนคือชุดของจุดที่ถูกค้นพบ แต่มีลูกที่ยังไม่ถูกค้นพบ

สมมติว่าคุณกำลังมองหาบางอย่างบนเว็บไซต์ คุณไปที่หน้าหลักก่อน สมมติว่านั่นคือ "สัตว์" ปัจจุบันชายแดนคือ "สัตว์"} คุณมองผ่านหน้าหลักและไม่เห็นสิ่งที่คุณกำลังมองหา แต่คุณสังเกตเห็นว่ามันมีลิงค์ไปยังอีกสองหน้า "สี่เท่า" และ "หนอน" ดังนั้นคุณคลิกที่ลิงก์เพื่อ "quadrupeds" ตอนนี้พรมแดนคือ {"animals", "quadrupeds"} คุณมองผ่าน "สี่เท่า" และไม่พบสิ่งที่คุณมองหา คุณจะทำอย่างไรต่อไป คุณสามารถค้นหาลิงก์ใน "quadrupeds" และติดตามลิงก์เหล่านั้นหรือกลับไปที่ "animals" และคลิกที่ลิงก์ไปยัง "Worms" ที่แรกก็คือการค้นหาครั้งแรกที่ลึกและที่สองคือการค้นหาที่กว้างแรก

"ความลึก" หมายถึงจำนวนลิงก์จากรูทโหนดที่ใช้เพื่อไปยังโหนดในขณะที่ "ความกว้าง" หมายถึงโหนดที่มีความลึกเท่ากัน ในตัวอย่างข้างต้น BFS เริ่มต้นที่ "animals" และก่อนอื่นจะดูที่โหนดทั้งหมดของความลึกหนึ่งดังนั้นจึงดูที่ "quadrupeds" และ "เวิร์ม" ก่อน หลังจากดูที่โหนดความลึก 1 ทั้งหมดโหนดจะขยายขอบเขตข้ามโหนดเหล่านั้นทั้งหมด นั่นคือมันจะดูที่ลูกของโหนดความลึก 1 ทั้งหมดก่อนที่จะดูโหนดลูกใด ๆ ของความลึก 2 ตัวอย่างเช่นหากลิงก์ใดลิงก์หนึ่งในหน้า "quadrupeds" คือ "primates" มันจะดูลิงก์ทั้งหมดในหน้า "Worms" ก่อนที่จะดูลิงก์ใด ๆ ในหน้า "primates"


1

aaa2a

ณ เวลาใด ๆ ชายแดนของคลื่นเป็นจุดยอดที่เก็บไว้ในโครงสร้างข้อมูลคิว (จุดยอดเหล่านี้ได้รับการเยี่ยมชม แต่ยังไม่ได้สำรวจเพิ่มเติม)

aa

kaka(k0)0{a}aa

aaa

ดังนั้น DFS และ BFS แตกต่างกันตามลำดับที่พวกเขาไปที่จุดยอด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.