1 / 33

Tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị

Tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị. Thuật toán Dijktra. Tìm đường đi ngắn nhất. Trong đồ thị không trọng số Tìm đường đi qua từ đỉnh i đến đỉnh j sao cho phải đi qua ít đỉnh trung gian nhất. 2. 2. 1. 1. 4. 4. 6. 3. 3. 5. 5. Tìm đường đi ngắn nhất.

Download Presentation

Tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị Thuật toán Dijktra

  2. Tìm đường đi ngắn nhất • Trong đồ thị không trọng số Tìm đường đi qua từ đỉnh i đến đỉnh j sao cho phải đi qua ít đỉnh trung gian nhất 2 2 1 1 4 4 6 3 3 5 5

  3. Tìm đường đi ngắn nhất • Tìm đường đi ngắn nhất giữa hai đỉnh trong đồ thị không trọng số  Dùng thuật loang theo chiều rộng (BFS)

  4. Tìm đường đi ngắn nhất • Trong đồ thị có trọng số trên mỗi cạnh Tìm đường đi ngắn nhất từ đỉnh i đến j  Tìm đường đi sao cho tổng trọng số trên các cạnh thuộc đường đi là bé nhất 2 1 15 5 1 6 4 3 1 2 1 3 5 1

  5. Tìm đường đi ngắn nhất • Trong đồ thị có trọng số : • Thuật giải vét cạn • Thuật toán Dijktra

  6. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Tìm một đường đi từ đỉnh i đến đỉnh j • Nếu độ dài của đường đi vừa tìm được nhỏ hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Tiếp tục thực hiện bước đầu tiên đến khi không còn đường đi nào khác từ i đến j

  7. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đệ quy • Dùng mảng stack để khử đệ quy

  8. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm t4 b c t5 t3 i a j t2 t1 Đường đi : i – a – c – b – a – j Độ dài : t1 + t3 + t4 + t5 + t2 t1 + t3 + t4 + t5 + t2 ≥ t1 + t2 Đường đi i – a – c – b – a – jdài hơn đường đi i – a – j Chu trình : a – b – c Trọng số : t3 + t4 + t5 ≥ 0

  9. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm • Đường đi ngắn nhất sẽ là một đường đi đơn

  10. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm • Đồ thị có chứa chu trình có trọng số âm -1 4 3 1 -2 1 2 5 1 2 Độ dài : 3 Độ dài : 1 Độ dài : -1 Độ dài : -∞ • Đường đi : 1 – 2 – 5 • Đường đi : 1 – 2– 3 – 4 –2 – 5 • Đường đi : 1 – 2– 3 – 4 –2– 3 – 4 –2 – 5 • Đường đi : 1 – 2– 3 – 4 –2– … –2 – 5

  11. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm • Đường đi ngắn nhất sẽ là một đường đi đơn • Đồ thị có chứa chu trình có trọng số âm • Độ dài đường đi ngắn nhất giữa một số cặp đỉnh sẽ không thể xác định • Chỉ xét những đồ thị không có chu trình có trọng số âm Chỉ xét những đường đi đơn

  12. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1

  13. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 ShortestPath = Ø MinLen = ∞

  14. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len = 16 ShortestPath = Ø MinLen = ∞

  15. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len < MinLen Len = 16 ShortestPath = Ø MinLen = ∞

  16. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len = 16 ShortestPath = 1 - 2 - 6 MinLen = 16

  17. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len = 16 ShortestPath = 1 – 2 – 6 MinLen = 16

  18. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len = 7 ShortestPath = 1 – 2 – 6 MinLen = 16

  19. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len < MinLen Len = 7 ShortestPath = 1 – 2 – 6 MinLen = 16

  20. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len = 7 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7

  21. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len = 7 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7

  22. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len = 4 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7

  23. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len < MinLen Len = 4 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7

  24. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len = 4 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  25. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len = 4 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  26. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 2 – 6 Len = 25 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  27. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 2 – 6 Len > MinLen Len = 25 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  28. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 2 – 6 Len = 25 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  29. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 6 Len = 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  30. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 6 Len > MinLen Len = 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  31. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 6 Len = 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  32. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Không còn đường đi khác từ đỉnh 1 đến đỉnh 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

  33. Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại •  Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4

More Related