1. Trang chủ
  2. » Giáo án - Bài giảng

Toán RR(BT+bài giải) exercise9 circuit answer

17 311 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 311,63 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giải TRR1 ĐH bách khoa TPHCM

Trang 1

Bài tập chương 9 Đường đi và chu trình

Trong bài tập dưới đây, chúng ta sẽ làm quen với các lý thuyết liên quan tới đường đi và chu trình Sinh viên cần ôn lại các lý thuyết liên quan được trình trong chương 9, trước khi làm bài tập bên dưới

Đồ thị G1 như hình bên dưới đây

S

A

B

C

D

E

F

G

H

(G1) 10 10

14

11 6 8

5 2 7 3

4

8 6

Câu 1

Tìm đường đi ngắn nhất xuất phát từ S đến tất cả các đỉnh còn lại bằng thuật giải Dijkstra

Lời giải Dijkstra:

Trang 2

i S A B C D E F G H π(0) 0 10 10 +∞ +∞ +∞ +∞ 14 +∞

π(1) 10 10 21 +∞ +∞ +∞ 14 +∞

π(2) 10 16 18 +∞ +∞ 14 +∞

Từ bảng trên, ta có thể xác đinh đường đi ngắn nhất từ A đến các đỉnh còn lại

• S → A

• S → B

• S → B → C

• S → B → D

• S → B → C → E

• S → B → C → F

• S → G

• S → G → H

2

Câu 2

Tìm đường đi ngắn nhất xuất phát từ S đến tất cả các đỉnh còn lại bằng thuật giải Bellman-Ford trong đồ thị G1

Lời giải

π(0) 0 +∞ +∞ +∞ +∞ +∞ +∞ +∞ +∞

π(1) 0 10 10 +∞ +∞ +∞ +∞ 14 +∞

π(2) 0 10 10 21 +∞ +∞ +∞ 14 +∞

π(3) 0 10 10 16 18 +∞ +∞ 14 +∞

π(4) 0 10 10 16 18 21 18 14 +∞

π(5) 0 10 10 16 18 21 18 14 25 π(6) 0 10 10 16 18 21 18 14 25 π(7) 0 10 10 16 18 21 18 14 20

Trang 3

Từ bảng trên, ta có thể xác đinh đường đi ngắn nhất từ A đến các đỉnh còn lại.

• S → A

• S → B

• S → B → C

• S → B → D

• S → B → C → E

• S → B → C → F

• S → G

• S → G → H

2

Câu 3

Xác định độ dài đường đi ngắn nhất xuất phát từ một đỉnh bất kỳ đến tất cả các đỉnh còn lại trong G2 dưới đây bằng thuật giải Floyd-Warshall

(G2) 2

6

1 4 5

4

2

3 1

Lời giải

A 0 2 6 +∞

B 1 0 4 +∞

D +∞ 3 1 0

Trang 4

k = 1 A B C D

A 0 2 6 +∞

B 1 0 4 +∞

D +∞ 3 1 0

A 0 2 6 +∞

B 1 0 4 +∞

C 5 4 0 2

D 4 3 1 0

A 0 2 6 8

B 1 0 4 6

C 5 4 0 2

D 4 3 1 0

A 0 2 6 8

B 1 0 4 6

C 5 4 0 2

D 4 3 1 0

2

3 Bài tập cần giải

Câu 4

Hãy xác định xem các đồ thị vô hướng sau (G10), (G11), (G12) có chứa đường đi/chu trình Euler và Hamilton không? Nếu có, hãy vẽ ra

S

A

B

C

D

E

F

G

H

(G10)

10

10

14

11 6 8

5 2 7 3

4 8 6

Trang 5

G F E

D (G11)

D

(G12) Lời giải

1 (G10)

• Chu trình Euler: không có, vì tồn tại đỉnh S có số bậc là lẻ (bằng 3)

• Đường đi Euler: không có, vì tồn tại 3 đỉnh S, B, H có số bệc là lẻ (đều bằng 3)

• Chi trình Hamilton: B → S → A → C → E → H → G → F → D → B

• Đường đi Hamilton: S → A → C → B → D → F → E → H → G

2 (G11)

• Chu trình Euler: All of the vertices have even degree except B (degree 3) and

D (degree 3) According to Euler’s Theorems, there is no Euler circuit for this graph

• Đường đi Euler: there is an Euler path, starting at one of the odd vertices and ending at the other B → A → G → F → A → D → C → F → E → C → B

→ D

• Chi trình Hamilton: One possible solution: A → G → F → E → C → D → B

→ A

• Đường đi Hamilton: A → G → F → E → C → D → B

3 (G12)

• Chu trình Euler: Since there are no odd vertices, there is an Euler circuit One possible solution: A → G → F → A → D → C → F → E → C → B → A

• Đường đi Euler: B → A → G → F → E → C → F → A → D → C → B (cũng

là chu trình)

• Chi trình Hamilton: There is no Hamilton circuit

Trang 6

• Đường đi Hamilton: B → A → D → C → E → F → G.

4 Ghi nhớ: odd: lẻ, even: chẵn

Trong cả hai loại Euler và Hamilton:

Có chu trình thì chắc chắn có đường đi, ngược lại không đúng

Có đường đi thì chưa chắc có chu trình

Không có chu trình nhưng có thể có đường đi

2

Câu 5

Hãy dùng thuật giải Dijsktra, Bellman-Ford, Floyd-Warshall để tìm đường đi ngắn nhất của đỉnh E đến một đỉnh bất kỳ khác trong đồ thị G13 như sau

E

(G13)

3

1

1

4

2

2

Câu 6

Hãy dùng thuật giải Dijsktra để tìm đường đi ngắn nhất của đỉnh A đến một đỉnh bất kỳ khác trong đồ thị G3 như sau

Lời giải Dựa theo thuật giải Dijkstra, chúng ta cần xây dựng bảng sau

Trang 7

B

C

D

E

F

(G3) 4

1

2 6

6

7

2 4 5

5

π(0) 0 4 1 +∞ +∞ +∞

π(1) 4 1 7 +∞ 8

Từ bảng trên, ta có thể xác đinh đường đi ngắn nhất từ A đến các đỉnh còn lại

• A → B

• A → C

• A → B → D

• A → B → D → E

• A → C → F

Diễn giải:

• Tại mỗi lần lặp (mỗi bước π) giải thuật đi thêm một bước

• Bước π(0) start từ đỉnh A đề bài yêu cầu, đi một bước tới được B, C với trọng số lần lượt là 4, 1 Đỉnh đầu là A, và từ A đến A có trọng số bằng 0 Do đó π(0) là 0, 4, 1, +∞, +∞ , +∞ Và trong dãy này 0 (starting) là nhỏ nhất, đánh dấu 0

• Bước π(1), chọn số nhỏ nhất (mà chưa từng được chọn) trong bước π(0) (nếu có 2 số bằng nhau thì chọn từ trái sang) Do đó 1 được chọn, và là vị trí đỉnh C, đánh dấu

số 1

Từ đỉnh C được chọn này có thể đi một bước đến các đỉnh D và F với trọng số là 6

Trang 8

và 7 Do đó đường đi từ A → C đến D là 1 + 6 = 7 < +∞ => cập nhật lại +∞ thành 7 , từ A → C đến F là 1 + 7 = 8 < +∞, do đó cập nhật lại +∞ thành 8 Cột nào đã được đánh dấu trước đó thì không cập nhật nữa, ví dụ số 0 ớ bước π(0)

• Bước π(2), chọn số nhỏ nhất (mà chưa từng được chọn) trong bước π(1) và π(0), ở đây π(1) có 4, 1, 7, 8 trong đó 1 đã được đánh dấu do đó không tính Chọn 4, đánh dấu 4

Chọn 4 tức là đang ở B, B có thể đi một bước đến E và D với trọng số lần lượt là 6

và 2 Do đó đường đi từ A → B đến D là 4 + 2 = 6 < 7 => cập nhật lại 7 thành 6 , từ A → B đến E là 4 + 6 = 10 < +∞, do đó cập nhật lại +∞ thành 10

Tại sao biết là từ A → B ở bước này?

Backtracking, để track lại đường đi, đỉnh 4 ở đây đang là B ở π(2), từ chỗ này nhìn thẳng lên thấy hàng nào B đổi số thì lùi xuống một hàng và gióng sang trái để biết

đi từ đỉnh nào đến B

Ở đây từ 4 của π(2) nhìn thẳng lên π(1) và π(0), không thấy chỗ nào B đổi số, thì nhìn vào hàng cuối là π(0), nhìn sang trái thấy số nào được đánh dấu (gạch dưới) thì nghĩa là đi từ đỉnh đó đến B, ở đây ta thấy 0 bị gạch dưới tức là đi từ A đến B

• Tại π(3):

Chọn số nhỏ nhất ở π(2) mà chưa bị gạch dưới, tức là 6 và là D, từ D có thể đi một bước đến E và F với trọng số lần lượt là 2 và 4 Do đó đường đi từ A → B → D đến

E là 4 + 2 + 2 = 8 < 10, cập nhật lại tại E là 8 Đường đi từ A → B → D đến F

là 4 + 2 + 4 = 10 > 8, không cập nhật Do đó π(3) là 6, 8, 8

Tại sao biết track ở đây là A → B → D?

Backtracking: 6 được chọn tức là D, nhìn thẳng lên chỗ đổi số gần nhất là π(1) (tại π(1), D có số 7, không phải số 6) thì lùi xuống một hàng là π(2), nhìn sang trái số

bị gạch dưới là 4, tức là B (vậy là B qua D), từ B này ở π(2), nhìn thẳng lên tìm chỗ

số bị đổi, không có thì chọn π(0), nhìn sang trái thấy A bị gạch dưới, tức là A qua

B Vậy là A → B → D

• Tại π(4):

Chọn số nhỏ nhât trong dãy π(3) là 8 tại E, từ E đi một bước đến được F với trọn

số 5 Từ A → B → D → E tới F là 4 + 2 + 2 + 5 = 13 > 8, do đó không cập nhật Tại sao biết là A → B → D → E ở đây?

Backtracking: từ 8 của E ở π(4), nhìn thẳng lên thấy tại π(2) đổi số, lùi 1 hàng xuống π(3), nhìn sang trái thấy 6 của D bị gạch dưới, vậy là D → E

Tại 6 của D ở π(3), nhìn thẳng lên thấy tại π(1) đổi số, lùi xuống một hàng là π(2), nhìn sang trái thấy 4 của B bị gạch dưới, vậy B → D

Tương tự, ta có A → B → D → E

• Từ F nhìn thẳng lên thấy tại π(0) đổi số, lùi xuống một hàng là π(1), nhìn sang trái thấy 1 của C bị gạch dưới, vậy là C → F Từ C này của π(1), nhìn thẳng lên không

Trang 9

thấy chổ đổi số thì chọn hàng cuối là π(0), nhìn sang trái thấy A bị gạch dưới Vậy đường đi ngắn nhất từ A đến F là A → C → F

2

Câu 7

Hãy dùng thuật giải Bellman-Ford để tìm đường đi ngắn nhất của đỉnh A đến một đỉnh bất kỳ khác trong đồ thị G7 như bên dưới

A

(G7)

7 5 9

8

1

2 5

8

1

-6

-4

10

3

Lời giải

π(0) 0 +∞ +∞ +∞ +∞ +∞ +∞ +∞

π(1) 0 7 +∞ 5 +∞ +∞ 9 +∞

π(2) 0 7 15 5 +∞ +∞ 9 +∞

π(3) 0 7 15 5 17 +∞ 9 +∞

π(4) 0 7 15 5 7 +∞ 9 10 π(5) 0 7 15 5 7 15 9 8

Từ bảng trên, ta có thể xác đinh đường đi ngắn nhất từ A đến các đỉnh còn lại

• A → B

• A → D → E → F → C

• A → D

• A → D → E

• A → D → E → F

Trang 10

• A → G

• A → D → E → H

Diễn giải:

• Do giải thuật áp dụng được cho đồ thị có trọng số âm nên giải thuật không chọn số nhỏ nhất tại mỗi bước như của Dijkstra, mà thay vào đó, giải thuật này sẽ chọn từ trái sang phải Do đó việc sắp thứ tự các cột khác nhau sẽ cho ra các table khác nhau nhưng kết quả cuối cùng là như nhau, tức là đường đi ngắn nhất là duy nhất (trừ phi

có 2 cách đi đến cùng một đỉnh với tổn trọng số bằng nhau)

• Tại bước π(0), đỉnh start bắt đầu là 0, các đỉnh còn lại là +∞ (khác với Dijkstra)

• Tại bước π(1), chọn A, từ A đi một bước đến được B, D, G với trọng số lần lượt là

7, 5, 9 đêu nhỏ hơn +∞ nên câp nhật lại table

• Tại bước π(2), chọn B (7), do chọn từ trái sang phải Từ B đi một bược tới được

C và D với trọng số là 8 và 1 Do đó A → B → C = 15 < +∞ => cập nhật lại,

A → B → D = 8 > 5 => khộng câp nhật

• Tại bước π(3), chọn C(15), do chọn từ trái sang phải Từ C đi một bược tới được D

và E với trọng số là -3 và 2 Do đó A → B → C → D = 12 > 5 => không cập nhật,

A → B → C → E = 17 < +∞ => cập nhật lại

• Tại bước π(4), chọn D(5), do chọn từ trái sang phải Từ D đi một bược tới được

E và H với trọng số là 2 và 5 Do đó A → D → E = 7 < 17 => cập nhật lại,

A → D → H = 10 < +∞ => cập nhật lại

Backtracking: Tương tự trong diễn giải Dijkstra Tại sao biết là A → D ở đây? Backtracking: Tương tự trong diễn giải Dijkstra Từ D là số 5 ở π(4), nhìn thẳng lên tìm hàng đổi số đầu tiên, ở đây là π(0), lùi xuống 1 hàng là π(1), nhìn sang trái số

bị gạch dưới là A (0) Do đó đường đi là A → D

• Tại bước π(5), chọn E(7), do chọn từ trái sang phải Từ E đi một bược tới được F

và H với trọng số là 8 và 1 Do đó A → D → E → F = 15 < +∞ => cập nhật lại,

A → D → E → H = 8 < 10 => cập nhật lại

Backtracking: Tương tự trong diễn giải Dijkstra Tại sao biết là A → D → E ở đây? Backtracking: Tương tự trong diễn giải Dijkstra Từ E là số 7 ở π(5), nhìn thẳng lên thấy đổi số ở π(3) (từ 7 sang 17), lùi xuống một hàng là π(4), nhìn sang trái thấy 5

bị gạch dưới là D, vậy là D → E

Từ D là số 5 ở π(4), nhìn thẳng lên tìm hàng đổi số đầu tiên, ở đây là π(0), lùi xuống 1 hàng là π(1), nhìn sang trái số bị gạch dưới là A (0) Do đó đường đi là

A → D → E

Trang 11

• Tại bước π(6), chọn F(15), do chọn từ trái sang phải Từ F đi một bược tới được C với trọng số là -6 Do đó A → D → E → F =→ C = 9 = 9 hiện tại => không có gì thay đổi

Backtracking: Tương tự trong diễn giải Dijkstra Tại sao biết là A → D → E → F ở đây?

Backtracking: Tương tự trong diễn giải Dijkstra Từ F là số 15 ở π(6), nhìn thẳng lên thấy đổi số ở π(4) (từ 15 sang +∞), lùi xuống một hàng là π(5), nhìn sang trái thấy 7 bị gạch dưới là E, vậy là E → F

Từ E là số 7 ở π(5), nhìn thẳng lên thấy đổi số ở π(3) (từ 7 sang 17), lùi xuống một hàng là π(4), nhìn sang trái thấy 5 bị gạch dưới là D, vậy là D → E

Từ D là số 5 ở π(4), nhìn thẳng lên tìm hàng đổi số đầu tiên, ở đây là π(0), lùi xuống 1 hàng là π(1), nhìn sang trái số bị gạch dưới là A (0) Do đó đường đi là

A → D → E → F

• Tại bước π(7), chọn G(9), do chọn từ trái sang phải Từ G đi một bược tới được D

và H với trọng số là -4 và 10 Do đó A → G → D = 5 = 5 hiện tại => không có gì thay đổi A → G → H = 19 > 8 => không cập nhật

Backtracking: Tương tự trong diễn giải Dijkstra Tại sao biết là A → G ở đây? Backtracking: Tương tự trong diễn giải Dijkstra Từ G là số 9 ở π(7), nhìn thẳng lên thấy đổi số ở π(0) (từ 9 sang +∞), lùi xuống một hàng là π(1), nhìn sang trái thấy

0 bị gạch dưới là A, vậy là A → G

Do đó đường đi là A → G → D hoặc A → G → H

2

Câu 8

Hãy dùng thuật giải Floyd-Warshall để tìm đường đi ngắn nhất của một đỉnh bất kỳ đến một đỉnh khác bất kỳ trong đồ thị G8 như bên dưới

A

(G8)

8 6 7

2

1

3

2 5

1

4

4 5

7

Lời giải

Trang 12

k = 0 A B C D E F G H

E +∞ +∞ +∞ +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ +∞ +∞ 0 3

G 5 +∞ +∞ +∞ +∞ +∞ 0 4

H +∞ +∞ +∞ +∞ +∞ 7 +∞ 0

E +∞ +∞ +∞ +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ +∞ 0 +∞ 3

G 5 13 +∞ 11 +∞ +∞ 0 4

H +∞ +∞ +∞ +∞ +∞ 7 +∞ 0

E +∞ +∞ +∞ +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ +∞ 0 +∞ 3

G 5 13 15 11 +∞ +∞ 0 4

H +∞ +∞ +∞ +∞ +∞ 7 +∞ 0

C +∞ +∞ 0 +∞ 2 5 +∞ +∞

D +∞ +∞ +∞ 0 4 1 +∞ +∞

E +∞ +∞ +∞ +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ 6 0 +∞ 3

G 5 13 15 11 17 20 0 4

H +∞ +∞ +∞ +∞ +∞ 7 +∞ 0

Trang 13

k = 4 A B C D E F G H

C +∞ +∞ 0 +∞ 2 5 +∞ +∞

D +∞ +∞ +∞ 0 4 1 +∞ +∞

E +∞ +∞ +∞ +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ 6 0 +∞ 3

G 5 13 15 11 15 12 0 4

H +∞ +∞ +∞ +∞ +∞ 7 +∞ 0

C +∞ +∞ 0 +∞ 2 5 +∞ 3

D +∞ +∞ +∞ 0 4 1 +∞ 5

E +∞ +∞ +∞ +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ 6 0 +∞ 3

G 5 13 15 11 15 12 0 4

H +∞ +∞ +∞ +∞ +∞ 7 +∞ 0

A 0 8 10 6 10 7 7 10

C +∞ +∞ 0 +∞ 2 5 +∞ 3

D +∞ +∞ 5 0 4 1 +∞ 4

E +∞ +∞ 13 +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ 6 0 +∞ 3

G 5 13 15 11 15 12 0 4

H +∞ +∞ 11 +∞ 13 7 +∞ 0

A 0 8 10 6 10 7 7 10

C +∞ +∞ 0 +∞ 2 5 +∞ 3

D +∞ +∞ 5 0 4 1 +∞ 4

E +∞ +∞ 13 +∞ 0 9 +∞ 1

F +∞ +∞ 4 +∞ 6 0 +∞ 3

G 5 13 15 11 15 12 0 4

H +∞ +∞ 11 +∞ 13 7 +∞ 0

Diễn giải

Trang 14

• Lấy một ví dụ đơn giản để minh hoạ:

item Đầu tiên đánh index số cho các đỉnh, nếu là đỉnh chữ thì gán cho đỉnh một số thứ tự index Giải thuật sẽ duyệt qua các đỉnh có trong đồ thị

item Bước k = 0, liệt kê hết tất cả các cạnh và trọng số, 1 bước đi Cập nhật table cho k = 0

item Bước k = 1, chọn đỉnh có số thứ tự index bằng 1, liệt kê tất cả đường đi mà đỉnh

có số thứ tự 1 này nằm giữa (không nằm hai biên) Nếu đường đi có trọng nhỏ hơn

ở table k = 0, thì cập nhật bảng tại k = 1, nếu không nhỏ hơn thì không cập nhật item Bước k = 2, chọn đỉnh có số thứ tự index bằng 2, liệt kê tất cả đường đi mà đỉnh

có số thứ tự 2 này nằm giữa (không nằm hai biên) Nếu đường đi có trọng nhỏ hơn ở table k = 0 và k = 1, thì cập nhật bảng tại k = 2, nếu không nhỏ hơn thì không cập nhật

item Tiếp tục cho đến k = N với N là tổng số đỉnh có trong đồ thị

item Xem lại bài giải mẫu câu 3 để kiểm chứng Trong bài giải mẫu câu 3, các đỉnh

A, B, C, D được đánh chỉ số lần lượt là 1, 2, 3, 4

2

Câu 9

Gọi Π∗ là đường đi ngắn nhất trong một đồ thị Nếu trọng số của tất cả các cạnh đều tăng lên một giá trị hằng số nào đó thì liệu Π∗ có vẫn là đường đi ngắn nhất trong đồ thị mới không?

Lời giải.Không Giả sử ta có đồ thị G9 như sau: Khi này, đường đi ngắn nhất từ A tới

A

(G9)

8

6

15

C có độ là A → B → C (độ dài là 14) Nếu tăng trọng số của mỗi cạnh bởi một hằng số

∆ = 2 thì đường đi ngắn nhất sẽ chuyển thành A → C (độ dài là 17) 2

Trang 15

Câu 10.

Liệu có thể dùng thuật giải Dijsktra để giải bài toán tìm đường đi ngắn nhất xuất phát từ một đỉnh bất kỳ đến một đỉnh bất kỳ khác không ? Nếu có hãy minh họa bằng áp dụng vào các đồ thị G7 và G8

Lời giải.Chỉ có thể dùng Dijkstra nếu đồ thị thỏa mãn điều kiện là không có cạnh với trọng số âm Với đội thị G7 thì không thể áp dụng Dijkstra Với G8 thì ta có thể áp dụng thuật toán với các đỉnh của đồ thị lần lượt là đỉnh xuất phát 2

4 Bài tập làm thêm

Câu 11

Hãy thiết kế một giải thuật để đếm số đường đi ngắn nhất trong một đồ thị cho sẵn

Câu 12

a) Làm thế nào đếm được số đường đi khác nhau xuất phát từ một đỉnh u và đến một đỉnh v trong một đồ thị G cho trước?

b) Hãy vẽ một đồ thị và minh họa việc đếm

c) Liệu có tồn tại giải thuật đếm số đường đi có thể có từ u đến v không?

Câu 13

Liệu có tồn tại giải thuật xác định một cách nhanh chóng sự tồn tại của chu trình trong một đồ thị cho trước không? Nếu có hãy viết thuật giải đó

Câu 14

Tìm đường đi ngắn nhất của một đỉnh bất kỳ đến một đỉnh bất kỳ khác trong đồ thị G9

sau

Trang 16

Hà Nội

Hải Phòng

Hồ Chí Minh

Cà Mau

Đà Nẵng Nha Trang

Vũng Tàu

(G9)

200

1200

1900

1000

600

400

800

200

100

500

500

Trang 17

5 Tổng kết

Thông qua các bài tập trong phần này, chúng ta đã làm quen với lý thuyết về đường đi

và chu trình (tham khảo chi tiết lý thuyết trong chương 5) Và các bài tập này cũng đã giúp chúng ta phần nào hiểu thêm về các ý tưởng, các hướng giải thuật để giải được vài bài toán thực tế đơn giản chung quanh chúng ta

Ngày đăng: 24/02/2014, 22:39

HÌNH ẢNH LIÊN QUAN

Đồ thị G 1 như hình bên dưới đây. - Toán RR(BT+bài giải) exercise9 circuit answer
th ị G 1 như hình bên dưới đây (Trang 1)

TỪ KHÓA LIÊN QUAN