Tại sao DFS được coi là có độ phức tạp không gian ?


11

Theo các ghi chú này , DFS được coi là có độ phức tạp không gian , trong đó là hệ số phân nhánh của cây và là chiều dài tối đa của bất kỳ đường dẫn nào trong không gian trạng thái.Ôi(bm)bm

Điều tương tự cũng được nói trong trang Wikibook này trên Tìm kiếm không xác định .

Bây giờ "hộp thông tin" của bài viết Wikipedia về DFS trình bày như sau về độ phức tạp không gian của thuật toán:

Ôi(|V|) , nếu toàn bộ biểu đồ được duyệt mà không lặp lại, chiều dài đường dẫn dài nhất được tìm kiếm cho các biểu đồ ẩn mà không loại bỏ các nút trùng lặpÔi()

tương tự như những gì tôi nghĩ là độ phức tạp không gian của DFS, tức là , trong đó là độ dài tối đa đạt được của thuật toán.Ôi(m)m

Tại sao tôi nghĩ rằng đây là trường hợp?

Chà, về cơ bản, chúng tôi không cần lưu trữ bất kỳ nút nào khác ngoài các nút của đường dẫn chúng tôi hiện đang xem, vì vậy không có điểm nào nhân với trong phân tích được cung cấp bởi Wikibook và các ghi chú tôi đã giới thiệu cho bạn đến.b

Hơn nữa, theo bài viết trên IDA * của Richard Korf , độ phức tạp không gian của DFS là , trong đó được coi là "độ sâu cắt".Ôi(d)d

Vậy, độ phức tạp không gian chính xác của DFS là gì?

Tôi nghĩ rằng nó có thể phụ thuộc vào việc thực hiện, vì vậy tôi sẽ đánh giá cao một lời giải thích về sự phức tạp của không gian cho các triển khai đã biết khác nhau.


DFS is considered to […] of the treekhông phải mọi đồ thị đi qua độ sâu trước tiên là một cái cây .
greybeard

Có một sự khác biệt giữa việc nói "việc này ở đây thực hiện DFS có chi phí X" và "DFS có thể được thực hiện để có chi phí X". Vì vậy, dường như đang tranh luận về các tuyên bố khác nhau của loại thứ hai, không cần phải mâu thuẫn chút nào. (Lưu ý rằng hoàn toàn không có mâu thuẫn vì , nếu có nghĩa là bất cứ điều gì cả.)O ( b m )O(bm)Ôi(m)Ôi(bm)
Raphael

@greybeard Bạn có thể cho tôi biết một ví dụ trong đó một giao dịch theo chiều sâu đầu tiên trên biểu đồ sẽ không dẫn đến một cái cây không?
nbro

example where a depth-first traversal on a graph would not result in a treemà không cho nó quá nhiều suy nghĩ: phân tích cú pháp. (Đợi đã: ý bạn là result in a treegì : ? Câu hỏi là về Tìm kiếm / duyệt qua biểu đồ.)
greybeard

1
@greybeard Theo tất cả các định nghĩa tôi đã tìm thấy cho đến nay. Tìm cho tôi một định nghĩa nơi nó xem lại các nút, sau đó chúng ta có thể thảo luận về nó.
nbro

Câu trả lời:


7

Nó phụ thuộc vào chính xác những gì bạn gọi DFS. Ví dụ, hãy xem xét thuật toán DFS-iterative được mô tả trong Wikipedia và giả sử rằng bạn chạy nó trên cây để bạn không phải theo dõi các nút nào bạn đã truy cập. Giả sử rằng bạn chạy nó trên toàn cây -ary sâu m . Chúng ta có thể xác định các nút trong cây họ bằng lời nói trên [ b ] có độ dài tối đa là m . Thuật toán hoạt động như sau:bm[b]m

  1. Bắt đầu từ gốc. Push để ngăn xếp (theo thứ tự ngược lại).1,2,Giáo dục,b

  2. Pop và đẩy 11 , 12 , Bắn , 1 b vào ngăn xếp.111,12,Giáo dục,1b

  3. Pop và đẩy 111 , 112 , ... , 11 b vào stack.11111,112,Giáo dục,11b

  4. Giáo dục

  5. Pop , và đẩy 1 m , 1 m - 1 2 , ... , 1 m - 1 b vào stack.1m-11m,1m-12,Giáo dục,1m-1b

Tại thời điểm này, ngăn xếp chứa

1m,1m-12,Giáo dục,1m-1b,Giáo dục,112,Giáo dục,11b,12,Giáo dục,1b,2,Giáo dục,b,

cho tổng số nút. Bạn có thể kiểm tra xem đây là pint trong thời gian mà kích thước của ngăn xếp được tối đa hóa.(b-1)m+1


2
Một pint trong thời gian giữ các bác sĩ đi.
greybeard

3

Có hai điểm ở đây để thực hiện:

  1. Ôi(bd)bddbbÔi(d)

  2. Ôi(d)db

Ôi(bd)Ôi(d)

Hi vọng điêu nay co ich,

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.