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

Preview:

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

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

1

2

3

4

5

1

2

3

4

5

6

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)

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

1

35

2

64

1 15

23

1

1

5

1

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

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

Tìm đường đi ngắn nhất Thuật giải vét cạn

Đệ quy Dùng mảng stack để khử đệ quy

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

i a j

b c

t1 t2

t5 t3

t4

Đường đi : i – a – c – b – a – jĐộ dài : t1 + t3 + t4 + t5 + t2

Chu trình : a – b – cTrọng số : t3 + t4 + t5 ≥ 0

t1 + t3 + t4 + t5 + t2 ≥ t1 + t2

Đường đi i – a – c – b – a – jdài hơn đường đi i – a – j

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

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 2

34

51

-2

-1

1

2

• Đườ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

Độ dài : 3Độ dài : 1Độ dài : -1Độ dài : -∞

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ố âmChỉ xét những đường đi đơn

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

MinLen = ∞ShortestPath = Ø

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 16Path = 1 – 2 – 6

MinLen = ∞ShortestPath = Ø

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 16Path = 1 – 2 – 6

MinLen = ∞ShortestPath = Ø

Len < MinLen

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 16Path = 1 – 2 – 6

MinLen = 16ShortestPath = 1 - 2 - 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 16Path = 1 – 2 – 6

MinLen = 16ShortestPath = 1 – 2 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 7Path = 1 – 2 – 4 – 6

MinLen = 16ShortestPath = 1 – 2 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 7Path = 1 – 2 – 4 – 6

MinLen = 16ShortestPath = 1 – 2 – 6

Len < MinLen

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 7Path = 1 – 2 – 4 – 6

MinLen = 7ShortestPath = 1 – 2 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 7Path = 1 – 2 – 4 – 6

MinLen = 7ShortestPath = 1 – 2 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 4Path = 1 – 5 – 3 – 4 – 6

MinLen = 7ShortestPath = 1 – 2 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 4Path = 1 – 5 – 3 – 4 – 6

MinLen = 7ShortestPath = 1 – 2 – 4 – 6

Len < MinLen

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 4Path = 1 – 5 – 3 – 4 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 4Path = 1 – 5 – 3 – 4 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 25Path = 1 – 5 – 4 – 2 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 25Path = 1 – 5 – 4 – 2 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Len > MinLen

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 25Path = 1 – 5 – 4 – 2 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 6Path = 1 – 5 – 4 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 6Path = 1 – 5 – 4 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Len > MinLen

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

Len = 6Path = 1 – 5 – 4 – 6

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Không còn đường đi khác từ đỉnh 1 đến đỉnh 6

Tìm đường đi ngắn nhất Thuật giải vét cạn

1

53

2

64

1 15

2 3

1

1

5

1

• 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

MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6

Recommended