Cây bao trùm tối thiểu vs Đường đi ngắn nhất


44

Sự khác biệt giữa thuật toán cây bao trùm tối thiểu và thuật toán đường đi ngắn nhất là gì?

Trong lớp cấu trúc dữ liệu của tôi, chúng tôi đã đề cập đến hai thuật toán cây bao trùm tối thiểu (Prim's và Kruskal) và một thuật toán đường đi ngắn nhất (Dijkstra's).

Cây bao trùm tối thiểu là một cây trong biểu đồ kéo dài tất cả các đỉnh và tổng trọng lượng của cây là tối thiểu. Con đường ngắn nhất là khá rõ ràng, nó là con đường ngắn nhất từ ​​đỉnh này sang đỉnh khác.

Điều tôi không hiểu là vì cây bao trùm tối thiểu có tổng trọng lượng tối thiểu, các đường dẫn trong cây có phải là những con đường ngắn nhất không? Bất cứ ai có thể giải thích những gì tôi đang thiếu?

Bất kỳ trợ giúp được đánh giá cao.


Dưới đây là ví dụ của tôi cho một câu hỏi tương tự chứng minh rằng cây bao trùm tối thiểu không giống với một con đường ngắn nhất. cs.stackexchange.com/a/43327 432363
atayenel

Ngoài ra, điều này có thể thú vị. Cây bao trùm tối đa có các đường dẫn giữa các nút trong đó mỗi đường dẫn là một đường dẫn cổ chai, thay vì tối thiểu hóa tổng số bạn tối đa hóa trọng lượng tối thiểu. Có lẽ có một mối quan hệ tương tự giữa cây bao trùm tối thiểu.
Eugene

Câu trả lời:


37

Hãy xem xét đồ thị tam giác có trọng số đơn vị - nó có ba đỉnh và tất cả ba cạnh { x , y } , { x , z } , { y , z } có trọng số 1 . Con đường ngắn nhất giữa hai đỉnh bất kỳ là đường dẫn trực tiếp, nhưng nếu bạn đặt tất cả chúng lại với nhau, bạn sẽ có được một hình tam giác chứ không phải là một cái cây. Mỗi tập hợp hai cạnh tạo thành một cây bao trùm tối thiểu trong biểu đồ này, tuy nhiên nếu (ví dụ) bạn chọn { x , y } , { y ,x,y,z{x,y},{x,z},{y,z}1 , sau đó bạn bỏ lỡ con đường ngắn nhất { x , z } .{x,y},{y,z}{x,z}

Tóm lại, nếu bạn đặt tất cả các con đường ngắn nhất lại với nhau, bạn không nhất thiết phải có một cái cây.


32

Bạn đúng rằng hai thuật toán của Dijkstra (đường dẫn ngắn nhất từ ​​một nút bắt đầu) và Prim (cây bao trùm trọng lượng tối thiểu bắt đầu từ một nút nhất định) có cấu trúc rất giống nhau. Cả hai đều tham lam (lấy lợi thế tốt nhất từ ​​quan điểm hiện tại) và xây dựng một cây bao trùm biểu đồ.

Giá trị họ giảm thiểu tuy nhiên là khác nhau. Dijkstra chọn làm cạnh tiếp theo, cái dẫn ra từ cây đến một nút chưa được chọn gần nhất với nút bắt đầu. (Sau đó, với lựa chọn này, khoảng cách được tính toán lại.) Prim chọn làm cạnh ngắn nhất dẫn ra khỏi cây được xây dựng cho đến nay. Vì vậy, cả hai thuật toán đã chọn một "cạnh tối thiểu". Sự khác biệt chính là giá trị được chọn là tối thiểu. Đối với Dijkstra, đó là độ dài của đường dẫn hoàn chỉnh từ nút bắt đầu đến nút ứng cử viên, đối với Prim, nó chỉ là trọng số của cạnh đơn đó.

x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

cây: Dijkstra vs Kruskal

Đối với Kruskal , điều đó hơi khác. Nó giải quyết cây bao trùm tối thiểu, nhưng trong khi thực hiện, nó chọn cạnh có thể không tạo thành cây, họ chỉ tránh chu kỳ. Vì vậy, các giải pháp một phần có thể bị ngắt kết nối. Cuối cùng, bạn nhận được một cây.


12

Mặc dù tính toán thuật toán Spanning Tree và Shortest Path tối thiểu trông giống nhau, chúng tập trung vào 2 yêu cầu khác nhau.

Trong MST, yêu cầu là phải đạt được từng đỉnh một lần (tạo cây biểu đồ) và tổng chi phí (tập thể) để đạt được từng đỉnh được yêu cầu là tối thiểu trong số tất cả các kết hợp có thể.

Trong Đường dẫn ngắn nhất, yêu cầu là đạt được đỉnh đích từ đỉnh nguồn với chi phí thấp nhất có thể (trọng lượng ngắn nhất). Vì vậy, ở đây chúng tôi không lo lắng về việc đạt đến từng đỉnh thay vào đó chỉ tập trung vào các đỉnh nguồn và đích và đó là điểm khác biệt.

Dưới đây là ví dụ để làm rõ tại sao MST không nhất thiết phải đưa ra con đường ngắn nhất giữa 2 đỉnh.

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

Trong trường hợp MST, cạnh AB. BC sẽ ở trên MST với tổng trọng số là 10. Vì vậy, chi phí để đạt A đến C trong MST là 10.

Nhưng trong trường hợp Đường dẫn ngắn nhất, đường đi ngắn nhất giữa A đến C là AC là 7. AC chưa bao giờ trên MST.


4

Sự khác biệt nằm ở mục tiêu cuối cùng của thuật toán này là gì

Dijkstra's - Ở đây mục tiêu là đạt được từ đầu đến cuối. Bạn chỉ quan tâm đến 2 điểm này và tối ưu hóa con đường của mình cho phù hợp.

Krusal's - Tại đây bạn có thể bắt đầu từ bất kỳ điểm nào và phải truy cập tất cả các điểm khác trong biểu đồ. Vì vậy, không phải lúc nào bạn cũng có thể chọn con đường ngắn nhất cho bất kỳ hai điểm nào. Thay vào đó, trọng tâm là chọn con đường dẫn bạn đến một con đường ngắn hơn cho tất cả các điểm khác.


1

Tôi nghĩ rằng một ví dụ sẽ làm cho nó rõ ràng hơn ..

nhập mô tả hình ảnh ở đây

Cây bao trùm trông như dưới đây. Điều này là do nếu chúng ta cộng các cạnh trong cấu hình này, chúng ta sẽ có tổng chi phí ít nhất có thể : 2 + 5 + 14 + 4 = 25.

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

Bằng cách nhìn vào cây bao trùm, bạn có thể nghĩ sai rằng nó mang lại cho bạn những con đường ngắn nhất, nhưng trong thực tế thì không. Như một ví dụ Nếu chúng ta muốn đi từ nút (1)đến (4)nó sẽ tốn của chúng ta 7. Tuy nhiên, nếu chúng ta sử dụng thuật toán của Dijkstra trên biểu đồ ban đầu, chúng ta sẽ thấy rằng chúng ta có thể đi trực tiếp từ nút (1)đến (4)với chi phí 5.


-1

Ví dụ thực tế để cho thấy sự khác biệt>

Giả sử bạn đến bằng tàu hỏa trong một thị trấn và muốn đến khách sạn của bạn.

Cách 1: Bắt taxi: Taxi sẽ đi theo con đường ngắn nhất đến khách sạn của bạn từ ga. Nếu người lái xe nên đi theo một con đường dọc theo cây đường đi ngắn nhất tập trung vào trạm.

Cách 2: Đi xe buýt. Các công ty xe buýt muốn phục vụ cho những người có thể, không chỉ bạn. Con đường lý tưởng sẽ đi vào tất cả các điểm chính trong thị trấn. Vì vậy, nó sẽ đi theo (*) một đường dẫn dọc theo cây bao trùm tối thiểu. Đó là lý do tại sao xe buýt chậm hơn, nhưng vì chi phí được chia sẻ nên rẻ hơn.

(*) Trên thực tế mọi người sẽ phàn nàn nếu cây bao trùm tối thiểu được sử dụng (hành trình xe buýt sẽ quá dài). Vì vậy, trong thực tế, nó sẽ là một giải pháp hỗn hợp và sẽ sử dụng Cây Alpha (một nửa giữa cây bao trùm tối thiểu và cây đường đi ngắn nhất).


1
Chào mừng đến với trang web. Tôi không nghĩ rằng sự tương tự của bạn là một điều tốt, vì tuyến đường đi bằng xe buýt dường như không liên quan nhiều đến cây xanh. Đặc biệt, nó không kéo dài (nó không ghé thăm mọi điểm trong thị trấn) và nó không phải là một cái cây. Thay vào đó, đó là một loại đường dẫn (hoặc chu trình) nào đó ghé thăm hoặc đi qua gần nhiều điểm quan trọng như vậy là hợp lý, để tuyến đường này hữu ích một cách hợp lý cho một số lượng lớn người.
David Richerby

-1

Chúng dựa trên hai thuộc tính khác nhau. Cây bao trùm tối thiểu dựa trên thuộc tính cắt trong khi đường đi ngắn nhất dựa trên thuộc tính thư giãn cạnh.

Một vết cắt chia đồ thị thành hai thành phần. Nó có thể liên quan đến nhiều cạnh. Trong MST, chúng tôi chọn cạnh có trọng lượng nhỏ nhất.

Edge thư giãn nói rằng tôi đã biết khoảng cách giữa A và B: dist (a, b) và dist giữa A và C: dist (a, c), nếu dist (a, b) + edge (b, c) nhỏ hơn dist (a, c), sau đó tôi có thể thư giãn cạnh (ac). Sau khi thư giãn tất cả các cạnh, chúng tôi có được con đường ngắn nhất.

Tôi đặc biệt khuyên bạn nên xem video về các thuật toán đồ thị từ giáo sư Robert Sedgewick.

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.