Ý nghĩa của "chiều rộng" trong lần tìm kiếm đầu tiên là gì?


11

Tôi đã tìm hiểu về chiều rộng tìm kiếm đầu tiên và một câu hỏi xuất hiện trong đầu tôi rằng tại sao BFS được gọi như vậy. Trong cuốn sách Giới thiệu về thuật toán của CLRS , tôi đã đọc lý do sau cho việc này:

Tìm kiếm đầu tiên theo chiều rộng được đặt tên như vậy bởi vì nó mở rộng biên giới giữa các đỉnh được phát hiện và chưa được khám phá thống nhất trên bề rộng của biên giới.

Tuy nhiên, tôi không thể hiểu ý nghĩa của tuyên bố này. Tôi bối rối về từ "biên cương" và bề rộng của biên giới đó.

Vì vậy, ai đó có thể vui lòng trả lời câu hỏi này theo cách dễ hiểu cho người mới bắt đầu như tôi không?


4
Trong trường hợp một số độc giả không quen với nghĩa của từ tiếng Anh (ngoài cách sử dụng như một phần của thuật ngữ kỹ thuật này): merriam-webster.com/dipedia/breadth hoặc dictionary.cambridge.org/dipedia/english/breadth . Nó tương tự như "chiều rộng", một chiều khác với "chiều sâu" nếu bạn đang nói về kích thước / hình dạng của một vật thể. Và theo nghĩa bóng như chiều sâu của kiến ​​thức (chuyên gia về một chủ đề) so với bề rộng của kiến ​​thức (rất nhiều môn học).
Peter Cordes

Câu trả lời:


22

Xem xét cấu trúc dữ liệu được sử dụng để đại diện cho tìm kiếm. Trong BFS, bạn sử dụng hàng đợi. Nếu bạn gặp một nút không nhìn thấy, bạn thêm nó vào hàng đợi.

Bộ biên giới trước đây là tập hợp tất cả các nút trong cấu trúc dữ liệu tìm kiếm. Hàng đợi sẽ lặp qua tất cả các nút trên biên giới một cách tuần tự, do đó lặp đi lặp lại trên bề rộng của biên giới. DFS sẽ luôn bật trạng thái được phát hiện gần đây nhất của ngăn xếp, do đó luôn lặp đi lặp lại ở phần sâu nhất của biên giới.

Hãy xem xét hình ảnh dưới đây. Lưu ý cách DFS đi thẳng đến các phần sâu nhất của cây trong khi BFS lặp lại theo chiều rộng của mỗi cấp.

bfs

Hình ảnh ở đây


2
Tôi nghĩ rằng biên giới từ có thể đề cập đến các cạnh của các nút được phát hiện. Khi bạn chỉ phát hiện ra a, biên giới là a. Khi bạn đã phát hiện a, b, c, biên giới là b, c. Khi bạn đã phát hiện a, b, c, d, e, f, g, biên giới là d, e, f, g. Nói cách khác, các nút đã được phát hiện và chúng tôi chưa tìm kiếm được.
Theodoros Chatzigiannakis

Tôi nghĩ rằng đây là một điểm công bằng, nhưng tôi nghĩ rằng Front frontier có thể được diễn giải theo nhiều cách, với lời giải thích chung ở trên vẫn còn hiệu quả.
Throckmorton

2

Câu trích dẫn mà bạn đưa ra nói rằng "biên giới giữa các đỉnh được phát hiện và chưa được khám phá". Vì vậy, đó là biên giới mà tác giả đang nói đến: biên giới giữa các đỉnh được phát hiện và chưa được khám phá. Bạn có một số đỉnh mà bạn chưa thấy gì cả. Bạn cũng có một số đỉnh mà bạn đã thấy mọi thứ. Và sau đó bạn có các đỉnh ở giữa. Đây là những đỉnh mà bạn đã xem, nhưng bạn chưa tải tất cả con của chúng. Đây là biên giới.

Các cuộc thảo luận này thêm về:

Để theo dõi tiến trình màu BFS mỗi đỉnh trắng, xám hoặc đen. Tất cả các đỉnh bắt đầu màu trắng và sau đó có thể trở thành màu xám và sau đó là màu đen. Đỉnh được phát hiện lần đầu tiên khi nó gặp trong quá trình tìm kiếm, tại thời điểm nó trở thành màu trắng. Các đỉnh xám và đen, do đó, đã được phát hiện, nhưng BFS phân biệt giữa chúng để đảm bảo rằng việc tìm kiếm tiến hành theo cách BF.
...
mỗi đỉnh ban đầu có màu trắng, có màu xám khi được phát hiện trong tìm kiếm và bị đen khi kết thúc, nghĩa là khi danh sách kề của nó đã được kiểm tra hoàn toàn.

Vì vậy, tất cả các đỉnh bắt đầu ra màu trắng (chưa được khám phá). Khi một nút được phát hiện, nó có màu xám (biên giới). Khi mọi thứ nó chỉ ra đã được phát hiện, nó có màu đen (hoàn toàn được phát hiện). Biên giới là tập hợp các điểm đã được phát hiện, nhưng có những đứa trẻ chưa được khám phá.

Giả sử bạn đang tìm kiếm một cái gì đó trên trang web. Trước tiên bạn vào trang chính. Giả sử đó là nhãn "động vật". Biên giới hiện là {"động vật"}. Bạn nhìn qua trang chính và không thấy những gì bạn đang tìm kiếm. Nhưng bạn nhận thấy rằng nó có liên kết đến hai trang nữa, "bốn lần" và "sâu". Vì vậy, bạn nhấp vào liên kết đến "tăng gấp bốn". Bây giờ biên giới là {"động vật", "tứ phương"}. Bạn xem qua "tứ phương" và không tìm thấy những gì bạn đang tìm kiếm. Bạn sẽ làm gì tiếp theo? Bạn có thể tìm kiếm các liên kết trên "bốn con" và theo dõi chúng, hoặc quay lại "động vật" và nhấp vào liên kết đến "giun". Đầu tiên là tìm kiếm theo chiều sâu và thứ hai là tìm kiếm theo chiều rộng.

"Độ sâu" chỉ số lượng liên kết từ nút gốc cần đến một nút, trong khi "chiều rộng" chỉ các nút có cùng độ sâu. Trong ví dụ trên, BFS bắt đầu từ "động vật" và đầu tiên nhìn vào tất cả các nút ở độ sâu một, do đó, nó nhìn vào "tứ giác" và "sâu" trước tiên. Sau khi nó đã xem xét tất cả các nút độ sâu 1, nó sẽ mở rộng biên giới trên tất cả các nút đó; nghĩa là, nó nhìn vào các con của tất cả các nút độ sâu 1 trước khi nhìn vào bất kỳ con nào của các nút độ sâu 2. Vì vậy, ví dụ, nếu một trong các liên kết trên trang "tăng gấp bốn" là "linh trưởng", nó sẽ xem xét tất cả các liên kết trên trang "sâu" trước khi xem bất kỳ liên kết nào trên trang "linh trưởng".


1

aaa2a

Tại bất kỳ thời điểm nào, biên giới của sóng chính xác là các đỉnh được lưu trữ trong cấu trúc dữ liệu hàng đợi (các đỉnh này đã được truy cập nhưng chưa được khám phá thêm).

aa

kaka(k0)0{a}aa

aaa

Do đó, DFS và BFS khác nhau theo thứ tự mà chúng truy cập các đỉnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.