Nếu tất cả các cạnh có trọng lượng bằng nhau, người ta có thể sử dụng BFS để thu được một cây bao trùm tối thiểu không?


9

Nếu cho rằng tất cả các cạnh trong đồ thị có trọng lượng bằng nhau , người ta có thể sử dụng tìm kiếm đầu tiên (BFS) để tạo ra một cây bao trùm tối thiểu trong thời gian tuyến tính không?Gc

Theo trực giác, điều này nghe có vẻ đúng, vì BFS không truy cập vào nút hai lần và nó chỉ di chuyển từ đỉnh đến đỉnh nếu không truy cập trước đó, do đó sẽ không có chu kỳ nào và nếu được kết nối cuối cùng nó sẽ truy cập tất cả các nút. Vì trọng lượng của tất cả các cạnh là bằng nhau, nên BFS đã chọn không quan trọng.vuuG

Liệu lý luận của tôi có ý nghĩa gì không?

Câu trả lời:


13

Nếu biểu đồ của bạn không có trọng số hoặc tương đương, tất cả các cạnh có cùng trọng số, thì bất kỳ cây bao trùm nào cũng là một cây bao trùm tối thiểu. Như bạn đã quan sát, bạn có thể sử dụng BFS (hoặc thậm chí DFS) để tìm một cây như vậy theo tuyến tính thời gian theo số cạnh.


Nhưng, những gì về các ví dụ mâu thuẫn được cung cấp?
TheNotMe

@TheNotMe BFS thường được gọi là thuật toán tuyến tính vì nó là . Tuy nhiên, trong trường hợp xấu nhất (như trong ví dụ của sụp đổ), vì vậy BFS có thể được coi là . Tuy nhiên, thuật toán của MST và Kruskal cho MST cũng chứatrong sự phức tạp thời gian của họ, và do đó cũng không phải là "tuyến tính" theo nghĩa sụp đổ. Thuật toán nào bạn đang sử dụng làm điểm chuẩn của bạn? Độ phức tạp thời gian của nó có bao gồm? Nếu vậy, BFS không tệ hơn nó. O(|V|+|E|)|E|=|V|2O(|V|2)|E||E|
Patrick87

3

Nếu tất cả các chi phí cạnh bằng nhau, thì bất kỳ cây bao trùm nào cũng là một cây bao trùm tối thiểu. Trong trường hợp này, bất kỳ thuật toán nào giải quyết REACHABILITY cũng sẽ giải quyết MST.

Let S = {v0} be a set of nodes initially containing v0
Mark v0
Parent[v0] = -1
While S is not empty
  Remove a vertex v from S
  For all edges (v,u)
    If u is unmarked
      Mark it and add it to S
      Parent[u] = v

Bạn có thể phục hồi cây từ Parentmối quan hệ. Nếu S.RemoveS.Addmất thời gian không đổi, thì thuật toán sẽ mấtO(v+e)=O(v2) Ở đâu v,e là số đỉnh và cạnh.


-3

Nếu tất cả các cạnh có trọng lượng bằng nhau, chúng ta có thể sử dụng:

-BFS -DFS-Thuật toán củaDijkstra-Thuật toán của Prim

Nhưng bạn không thể sử dụng

thuật toán -kruskal


Đây không phải là sự thật. Bạn có thể sử dụng thuật toán của Kruskal.
Ác

Làm thế nào là có thể bởi vì nó sẽ kết thúc với tất cả các cạnh khi chúng ta bắt đầu từ trọng lượng nhỏ nhất trước !!
Nandkishor Nangre

Nó sẽ chọn một, bất cứ ai, nó cũng có thể chọn ngẫu nhiên.
Ác

Vâng tôi có điểm ur !! nhưng nó có thể áp dụng được trong kruskal algo .... bởi vì tôi chưa bao giờ thấy bất kỳ mã nào của kruskal nêu rõ hiện tượng trên
Nandkishor Nangre

Câu hỏi hỏi liệu chúng tôi có thể sử dụng "BFS" ​​không và câu trả lời của bạn chỉ nói "có" mà không nói thêm về lý do. Chúng tôi không tìm kiếm câu trả lời mà chỉ yêu cầu câu trả lời là có. Chúng tôi đang tìm kiếm câu trả lời cung cấp giải thích, lý do, biện minh hoặc bằng chứng về kết luận của họ. Tôi khuyến khích bạn chỉnh sửa câu trả lời của bạn để giải thích tại sao. Ngoài ra, câu hỏi không hỏi "làm thế nào chúng ta có thể làm điều đó", nó hỏi nếu BFS hoạt động, vì vậy việc cung cấp các thuật toán khác không trả lời câu hỏi đã được hỏi.
DW
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.