Tôi không thể tìm thấy câu trả lời cho câu hỏi này trực tuyến, và trong các câu trả lời khác cho câu hỏi tương tự như vậy, dường như là một lợi thế của DFS là nó sử dụng ít bộ nhớ hơn DFS.Tại sao tìm kiếm rộng đầu tiên sử dụng nhiều bộ nhớ hơn chiều sâu đầu tiên?
Với tôi điều này có vẻ ngược lại với những gì tôi mong đợi. BFS chỉ phải lưu trữ nút cuối cùng mà nó đã truy cập. Ví dụ, nếu chúng ta đang tìm kiếm số 7 trong cây dưới đây:
Nó sẽ tìm kiếm các nút với giá trị 8, sau đó 3, 10, 1, 6, 14, 4, sau đó finaly 7. Đối với DFS, nó sẽ tìm kiếm nút có giá trị 8, sau đó 3, 1, 6, 4, rồi cuối cùng là 7.
Nếu mỗi nút được lưu trữ trong bộ nhớ, với thông tin về giá trị của nó, con của nó và vị trí của nó trong cây sau đó một chương trình BFS sẽ chỉ cần lưu trữ thông tin về vị trí của nút cuối cùng mà nó đã truy cập, sau đó nó có thể kiểm tra cây và tìm nút tiếp theo trong cây. Một chương trình DFS phải lưu trữ nút cuối cùng, cũng như tất cả các nút mà nó đã truy cập để nó không kiểm tra lại và chỉ chu kỳ qua tất cả các nút lá sắp tắt một trong các nút thứ hai đến các nút thế hệ cuối cùng.
Vậy tại sao BFS thực sự sử dụng ít bộ nhớ hơn?
Cây đầy đủ thường rộng hơn cây cao. Nếu cây mẫu của bạn đã đầy, thì bạn sẽ có 8 nút ở cấp dưới cùng. Trong DFS, bạn chỉ cần một ngăn xếp sâu đến mức sâu nhất. Trong BFS, bạn cần một hàng đợi rộng đến mức rộng nhất. –
Độ phức tạp không gian của DFS là O (d) trong đó d là [đường kính] (http://en.wikipedia.org/wiki/Distance_ (graph_theory) #Related_concepts) của biểu đồ. Giá trị của BFS là O (w), trong đó w là số đỉnh tối đa có cùng khoảng cách với nút bắt đầu. Nó phụ thuộc vào cấu trúc đồ thị của hai phương pháp hiệu quả hơn. –