1. Trang chủ
  2. » Văn Hóa - Nghệ Thuật

lý thuyết đồ thị

69 8 0

Đ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

nhất giữa hai đỉnh làm việc thực sự hiệu quả hơn những thuật toán tìm đđnn từ một đỉnh đến tất cả các đỉnh còn lại.... Tính chất của ĐĐNN, Giảm cận trên.[r]

(1)

BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT

(2)

Nội dung

5.1 Bài toán đường ngắn (ĐĐNN)

5.1 Bài toán đường ngắn (ĐĐNN)

5.2 Tính chất ĐĐNN, Giảm cận trên 5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

(3)

5.1 Bài toán đường ngắn nhất

Cho đơn đồ thị có hướng G = (V,E) với hàm trọng số

w: E  R (w(e) gọi độ dài hay trọng số

cạnh e)

Độ dài đường P = v1  v2  …  vk số

Đường ngắn nhất từ đỉnh u đến đỉnh v đường có

độ dài ngắn số đường nối u với v.

Độ dài đường ngắn từ u đến v gọi

khoảng cách từ u tới v ký hiệu (u,v).

1

1

( ) k ( ,i i )

i

w Pw v v

(4)

Ví dụ

weight

s a b c d e f

Cho đồ thị có trọng số G = (V, E), đỉnh nguồn sV, tìm đường ngắn từ s đến đỉnh lại.

(5)

Các ứng dụng thực tế

Giao thông (Transportation)

Truyền tin mạng (Network routing) (cần hướng gói tin đến đích mạng theo đường nào?)

Truyền thông (Telecommunications)

Speech interpretation (best interpretation of a spoken sentence)

Điều khiển robot (Robot path planning) Medical imaging

(6)

Các dạng toán ĐĐNN

1. Bài tốn nguồn đích: Cho hai đỉnh s và t, cần tìm đường ngắn từ s đến t.

2. Bài tốn nguồn nhiều đích: Cho s đỉnh nguồn, cần tìm đường ngắn từ s đến tất đỉnh cịn lại.

3. Bài tốn cặp: Tìm đường ngắn giữa cặp đỉnh đồ thị

(7)

Nhận xét

Các toán xếp theo thứ tự từ đơn giản

đến phức tạp

Hễ có thuật toán hiệu để giải ba

(8)

5.1 Bài toán đường ngắn (ĐĐNN) 5.2 Tính chất ĐĐNN, Giảm cận trên

5.2 Tính chất ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford 5.4 Thuật toán Dijkstra

(9)

Các tính chất ĐĐNN

Tính chất Đường ngắn ln tìm

số đường đơn

• CM: Bởi việc loại bỏ chu trình độ dài khơng âm khỏi đường không làm tăng độ dài

Tính chất Mọi đường ngắn đồ thị G

đều qua không n-1 cạnh, n số đỉnh.

• Như hệ tính chất 1

u v

C

(10)

Các tính chất ĐĐNN

Tính chất 3: Giả sử P = ‹v1, v2, …, vk› đđnn từ v1 đến vk Khi đó, Pij = ‹vi, vi+1, …, vj› đđnn từ vi đến vj, với  i  j  k

Tính chất 3: Giả sử P = ‹v1, v2, …, vk› đđnn từ v1 đến vk Khi đó, Pij = ‹vi, vi+1, …, vj› đđnn từ vi đến vj, với  i  j  k

(Bằng lời: Mọi đoạn đường đường ngắn đường ngắn nhất)

CM Phản chứng Nếu Pij không đđnn từ vi đến vj, tìm

P’ij đường từ vi đến vj thoả mãn w(P’ij) < w(Pij) Khi gọi P’ là đường thu từ P việc thay đoạn Pij P’ij, ta có

w(P’) < w(P) ?!

v1 vk

P’ij

Pij vj

(11)

Hệ quả: Giả sử P đđnn từ s tới v, P = s u v

Khi δ(s, v) = δ(s, u) + w(u, v).

Hệ quả: Giả sử P đđnn từ s tới v, P = s u v

Khi δ(s, v) = δ(s, u) + w(u, v).

Các tính chất ĐĐNN

   p'

Tính chất 4: Giả sử s  V Đối với cạnh (u,v)  E, ta có

δ(s, v)  δ(s, u) + w(u,v).

Tính chất 4: Giả sử s  V Đối với cạnh (u,v)  E, ta có

δ(s, v)  δ(s, u) + w(u,v).

(12)

Đường ngắn xuất phát từ đỉnh

(13)

Biểu diễn đường ngắn nhất

d(v) = độ dài đường từ s đến v ngắn nhất biết (cận cho độ dài đường ngắn thực sự)

p(v) = đỉnh trước v đường nói trên

(sẽ sử dụng để truy ngược đường từ s đến v)

Các thuật tốn tìm đường ngắn làm việc với hai mảng:

(14)

Giảm cận (Relaxation)

Sử dụng cạnh (u, v) để kiểm tra xem đường đến v tìm có thể làm ngắn nhờ qua u hay không.

s v u p(v) s z v u p(v)

d[v] > d[u] + w(u, v) Relax(u, v)

if d[v] > d[u] + w(u, v)

then d[v]  d[u] + w(u, v) p[v]  u

Các thuật tốn tìm đđnn khác số lần dùng cạnh trình tự duyệt chúng để thực giảm cận

(15)

Nhận xét chung

Việc cài đặt thuật toán thể nhờ thủ tục gán

nhãn:

Mỗi đỉnh v có nhãn gồm thành phần (d[v], p[v]) Nhãn

sẽ biến đổi q trình thực thuật tốn

Nhận thấy để tính khoảng cách từ s đến t, đây, ta phải

tính khoảng cách từ s đến tất đỉnh lại đồ thị

Hiện chưa biết thuật toán cho phép tìm đđnn

(16)

Nội dung

5.1 Bài toán đường ngắn (ĐĐNN) 5.2 Tính chất ĐĐNN, Giảm cận trên

5.3 Thuật toán Bellman-Ford

5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

(17)

Thuật toán Ford-Bellman

Richard Bellman

(18)

Thuật tốn Ford-Bellman

Thuật tốn Ford - Bellman tìm đường ngắn từ

đỉnh s đến tất đỉnh lại đồ thị

Thuật toán làm việc trường hợp trọng số

cung tuỳ ý.

Giả thiết đồ thị khơng có chu trình âm.

Đầu vào: Đồ thị G=(V,E) với n đỉnh xác định ma

trận trọng số w[u,v], u,v V, đỉnh nguồn s V;

Đầu ra: Với v V

d[v] = (s, v);

(19)

Mơ tả thuật tốn

procedure Ford_Bellman;

begin

for v  V begin (* khởi tạo *) d[v] := w[s,v] ; p[v]:=s;

end;

d[s]:=0; p[s]:=s;

for k := to n-2 (* n = |V| *) for v  V \ {s}

for u  V

if d[v] > d[u] + w[u,v] then begin d[v] := d[u] + w[u,v] ; p[v] := u ;

(20)

Nhận xét

Tính đắn thuật tốn chứng minh

trên sở nguyên lý tối ưu quy hoạch động

Độ phức tạp tính tốn thuật tốn O(n3)

Có thể chấm dứt vịng lặp theo k phát

trong trình thực hai vòng lặp

(21)(22)

Ví dụ: Tìm đường ngắn từ đỉnh s đến tất các đỉnh lại đồ thị

(23)

Nội dung

5.1 Bài toán đường ngắn (ĐĐNN) 5.2 Tính chất ĐĐNN, Giảm cận trên 5.3 Thuật tốn Bellman-Ford

5.4 Thuật toán Dijkstra

5.4 Thuật toán Dijkstra

(24)

Thuật toán Dijkstra

 Trong trường hợp trọng số cung

khơng âm, thuật tốn Dijkstra đề nghị hữu hiệu nhiều so với thuật toán

Ford-Bellman

 Thuật toán dựa thủ tục gán nhãn Thoạt đầu

nhãn đỉnh tạm thời Ở bước lặp có nhãn tạm thời trở thành nhãn cố

định Nếu nhãn đỉnh u trở thành cố

định d[u] cho ta độ dài đđnn từ đỉnh s đến u Thuật toán kết thúc nhãn tất các đỉnh trở thành cố định.

(25)

Thuật toán Dijkstra

Đầu vào: Đồ thị có hướng G=(V,E) với n đỉnh,

s V đỉnh xuất phát,

w[u,v], u,v V - ma trận trọng số;

Giả thiết: w[u,v] > 0, u, v V.

Đầu ra: Với v V

d[v] = (s, v);

(26)

Thuật toán Dijkstra

procedure Dijkstra; begin

for v  V begin (* Khởi tạo *) d[v] := w[s,v] ; p[v]:=s; end;

d[s] := 0; S := {s}; (* S – tập đỉnh có nhãn cố định *)

T := V \ {s}; (* T tập đỉnh có nhãn tạm thời *) while T   (* Bước lặp *)

begin

Tìm đỉnh u  T thoả mãn d[u] = min{ d[z] : z  T};

T := T \ {u}; S:= S  {u}; (* Cố định nhãn đỉnh u *)

for v  T (* Gán nhãn lại cho đỉnh T *)

if d[v] > d[u] + w[u,v] then begin d[v] := d[u] + w[u,v] ; p[v] := u ;

end;

end;

(27)

Thuật toán Dijkstra

Chú ý: Nếu cần tìm đường ngắn

từ s đến t chấm dứt thuật toán

đỉnh t trở thành có nhãn cố định

Định lý Thuật tốn Dijkstra tìm đường

đi ngắn từ đỉnh s đến tất đỉnh lại đồ thị sau thời gian O(n2).

(28)

Chứng minh tính đắn Thuật toán Dijkstra

Ta CM với v  S, d(v) = (s, v).

• Qui nạp theo |S|

• Cơ sở qui nạp: Với |S| = 1, rõ ràng • Chuyển qui nạp:

 giả sử thuật toán Dijkstra bổ sung v vào S  d(v) độ dài đường từ s đến v

 nếu d(v) khơng độ dài đđnn từ s đến v, gọi P* đđnn từ s đến v  P* phải sử dụng cạnh khỏi S, chẳng hạn (x, y)

 khi d(v)> (s, v) giả thiết

= (s, x) + w(x, y) + (y, v) tính chất

 (s, x) + w(x, y) (y, v) không âm = d(x) + w(x, y) giả thiết quy nạp

 d(y) theo thuật tốn

vì thuật tốn Dijkstra phải chọn y thay chọn v ?!

(29)

Ví dụ

Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6

Khởi

tạo [0, 1] [1, 1]* [, 1] [, 1] [, 1] [, 1] 1 - - [6, 2] [3, 2]* [, 1] [8, 2]

2 - - [4, 4]* - [7, 4] [8, 2]

3 - - - - [6, 3] [5, 3]*

4 - - - - [6, 3]*

-Tìm đường ngắn nhất từ đỉnh đến tất cả đỉnh lại

(30)(31)

Bài tập

(32)

Cây đường ngắn nhất

Tập cạnh {(p(v), v): vV \ {s} } tạo thành có gốc đỉnh nguồn s gọi đđnn xuất phát từ đỉnh s.

1 1 2 2 1 10 7 5 4 3 1 2 3 4 6 5 2 1 4 3 5 6

• Các cạnh màu đỏ tạo thành đđnn xuất phát từ đỉnh

(33)

Nội dung

5.1 Bài toán đường ngắn (ĐĐNN) 5.2 Tính chất ĐĐNN, Giảm cận trên 5.3 Thuật tốn Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường ngắn đồ thị khơng có chu

5.5 Đường ngắn đồ thị khơng có chu

trình

trình

(34)

Đường đồ thị khơng có chu trình

(35)

Đường đồ thị khơng có chu trình Một trường hợp riêng tốn đường ngắn

giải nhờ thuật toán với độ phức tạp tính tốn O(n2),

đó tốn đồ thị khơng có chu trình (cịn trọng số cung số thực tuỳ ý) Kết sau đây sở để xây dựng thuật tốn nói trên:

Định lý Giả sử G đồ thị khơng có chu trình Khi

(36)

Thuật toán đánh số đỉnh

Trước hết nhận thấy rằng: Trong đồ thị khơng có chu trình

cũng tìm đỉnh có bán bậc vào Thực vậy, đỉnh v1 có cung vào từ v2 ta lại chuyển sang xét đỉnh

v2 Nếu có cung từ v3 vào v2, ta lại chuyển sang xét v3, Do

đồ thị khơng có chu trình nên sau số hữu hạn lần chuyển như ta phải đến đỉnh khơng có cung vào

 Thuật toán xây dựng dựa ý tưởng đơn giản sau:

(37)

Thuật toán đánh số đỉnh

Đầu vào: Đồ thị có hướng G=(V,E) với n đỉnh

khơng chứa chu trình cho danh sách kề Ke(v), v  V.

Đầu ra: Với đỉnh v  V số NR [v]

(38)

Thuật toán đánh số đỉnh  procedure Numbering;

 begin

 for v  V Vao[v] := 0;

 for u  V (* Tính Vao[v] = bán bậc vào v *)  for v  Ke(u) Vao[v] := Vao[v] + ;

 QUEUE :=  ;  for v  V

 if Vao[v] = then QUEUE  v ;  num := 0;

 while QUEUE   do  begin

 u  QUEUE ; num := num + ; NR[u] := num ;  for v  Ke(u) begin

 Vao[v] := Vao[v] - ;

 if Vao[v] = then QUEUE  v ;  end;

(39)

Thuật toán đánh số đỉnh

Rõ ràng bước khởi tạo ta phải duyệt qua tất

các cung đồ thị tính bán bậc vào đỉnh, vì ta tốn cỡ O(m) phép tốn, m số cung đồ thị Tiếp theo, lần đánh số đỉnh, để thực việc loại bỏ đỉnh đánh số với cung khỏi nó, lại duyệt qua tất cung Suy để đánh số tất đỉnh đồ thị chúng ta phải duyệt qua tất cung đồ thị một lần

(40)

Thuật tốn tìm đđnn đồ thị khơng có chu trình  Do có thuật tốn đánh số trên, nên xét đồ thị khơng có chu

trình ta giả thiết đỉnh đánh số cho cung từ đỉnh có số nhỏ đến đỉnh có số lớn  Thuật tốn tìm đường ngắn từ đỉnh nguồn v[1] đến tất

cả đỉnh lại đồ thị khơng có chu trình

Đầu vào: Đồ thị G=(V, E), V={ v[1], v[2], , v[n] }. Đối với cung (v[i], v[j])  E, ta có i < j.

Đồ thị cho danh sách kề Ke(v) , v  V.Đầu ra: Khoảng cách từ v[1] đến tất đỉnh lại

(41)

Thuật tốn tìm đđnn đồ thị khơng có chu trình

procedure Critical_Path; begin

 d[v[1]] := 0;

for j:=1 to n d[v[j]] :=  ;  for v[j]  Ke[v[1]]

 d[v[j]] := w(v[1], v[j]) ;  for j:= to n

for v  Ke[v[j]]

 d[v] := ( d[v], d[v[j]] + w(v[j], v) ) ;  end;

Độ phức tạp tính tốn thuật toán O(m), cung đồ thị

(42)

Ví dụ

0    

r s t u v w

5 –1 –2

6

3

2

Cần tìm đường ngắn từ ss đến tất đỉnh đạt

(43)

Ví dụ

0    

r s t u v w

5 –1 –2

6

3

(44)

Ví dụ

0 2 6  

r s t u v w

5 –1 –2

6

3

(45)

Ví dụ

0 2 6 6 4

r s t u v w

5 –1 –2

6

3

(46)

Ví dụ

0 2 6 5 4

r s t u v w

5 –1 –2

6

3

(47)

Ví dụ

0 2 6 5 3

r s t u v w

5 –1 –2

6

3

(48)

Ví dụ

0 2 6 5 3

r s t u v w

5 –1 –2

6

3

2

Kết quả: Cây đường ngắn từ s thể

(49)

Ứng dụng: PERT

 Xây dựng phương pháp giải toán điều khiển việc thực dự án lớn, gọi tắt PERT (Project

Evaluation and Review Technique) hay CDM (Critical path Method)

Việc thi cơng cơng trình lớn chia làm n công

đoạn, đánh số từ đến n Có số cơng đoạn mà việc thực tiến hành sau số cơng

đoạn hồn thành Đối với công đoạn i biết

(50)

Ứng dụng: PERT

Các liệu với n = cho bảng sau đây

Công đoạn t[i] Các cơng đoạn phải hồn thành trước nó 1 15 Khơng có

2 30 1

3 80 Khơng có 4 45 2, 3

(51)

Ứng dụng: PERT

Bài toán PERT: Giả sử thời điểm bắt đầu tiến hành thi công

cơng trình Hãy tìm tiến độ thi cơng cơng trình (chỉ rõ cơng đoạn phải bắt đầu thưc vào thời điểm nào) cơng trình hồn thành xong thời điểm sớm

Ta xây dựng đồ thị có hướng n đỉnh biểu diễn ràng buộc

về trình tự thực hiệc công việc sau:

 Mỗi đỉnh đồ thị tương ứng với công việc

Nếu công việc i phải thực trước công đoạn j

(52)

Thuật toán PERT

Thêm vào đồ thị đỉnh n+1 tương ứng với hai kiện đặc

biệt:

đỉnh số tương ứng với cơng đoạn Lễ khởi cơng, phải

thực trước tất công đoạn khác,

đỉnh n+1 tương ứng với công đoạn Cắt băng khánh thành cơng

trình, phải thực sau tất công đoạn,

với t[0] = t[n+1] = (trên thực tế cần nối đỉnh với tất

các đỉnh có bán bậc vào nối tất đỉnh có bán bậc ra với đỉnh n+1)

Gọi đồ thị thu G

 Rõ ràng tốn đặt dẫn tốn tìm đường dài từ

(53)

Thuật toán PERT

Do đồ thị G không chứa chu trình, nên để giải tốn

đặt áp dụng thuật tốn Critical_Path chỉ cần đổi toán tử thành toán tử max

Kết thúc thuật toán, ta thu d[v] độ dài đường

dài từ đỉnh đến đỉnh v

Khi d[v] cho ta thời điểm sớm bắt đầu

(54)

PERT: Ví dụ minh hoạ

 Qui tốn PERT tìm đường dài đồ

thị chu trình

(55)

Nội dung

5.1 Bài tốn đường ngắn (ĐĐNN) 5.2 Tính chất ĐĐNN, Giảm cận trên 5.3 Thuật toán Bellman-Ford

5.4 Thuật toán Dijkstra

5.5 Đường ngắn đồ thị khơng có chu trình

5.6 Thuật toán Floyd-Warshal

(56)

ĐƯỜNG ĐI NGẮN NHẤT GIỮA MỌI CẶP ĐỈNH

(57)

Đường ngắn cặp đỉnh

Bài toán Cho đồ thị G = (V, E), với trọng số cạnh e w(e), cặp đỉnh u, v V, tìm đường ngắn

từ u đến v

Đầu ma trận: phần tử dòng u cột v độ dài đường đi ngắn từ u đến v.

Cho phép có trọng số âm

Giả thiết: Đồ thị khơng có chu trình âm

(58)

Ví dụ 2 1 5 3 4

2 -5

6 -4

Đầu vào

0  -4       -5    

n  n ma trận W = (w ) vớiij w =

0 i = j

w (i, j) i  j & (i, j)  E

 lại

(59)

Tiếp 2 1 5 3 4

2 -5

6 -4

0 1 -3 -4 -4 -1 -1 -5 -2 8 - -

Đường đi: 1- - - -

4 - 1-

Đầu ra

(60)

Thuật toán Floyd-Warshall

d = độ dài đường ngắn từ i đến j sử dụng đỉnh trung gian tập đỉnh { 1, 2, …, m } ij

(m)

im  m  m j

(61)

Cơng thức đệ qui tính d(h)

i j

d = w ij(0) ij

d = ( d , d + d ) h  (h) (h-1) (h-1) (h-1)ij ij ih hj

i j

h

d(h-1)

(62)

Thuật toán Floyd-Warshall

Floyd-Warshall(n, W) D(0)  W

for k  1 to n do

for i  to n do

for j  1 to n do

d  (d , d + d ) return D(n)

(k) (k-1) (k-1) (k-1)

Thời gian tính (n3) !

(63)

Xây dựng đường ngắn nhất Predecessor matrix P = (p ) : ij(k)

đường ngắn từ i đến j qua đỉnh trung gian {1, 2, …, k}

i, (i, j)  E

NIL, (i, j)  E

p = ij(k) p d  d + d ij ij

(k-1)

ik kj

(k-1) (k-1) (k-1)

p trái lại(k-1)

(k)

i

j k

p ij(0) =

(64)

Ví dụ 1 3 4 2

D (0) 

    

P(0) NIL NIL

NIL NIL NIL NIL NIL NIL NIL NIL

D (1)   6 P(1) NIL NIL NIL 2 2NIL

(65)

Ví dụ (tiếp)

D (2)  64 9

  8

P(2) NIL 2 2

NIL NIL NIL NIL NIL 2 NIL

D

6

3

  (3)

P(3) NIL NIL NIL 2 3 3

NIL NIL NIL NIL

(4)

D 67 3 6 9

P(4)

NIL 4 NIL

(66)

Ví dụ (tiếp)

3

1 2

1 2 2

(67)

Bài tập

(68)

Bài tập

(69)

Chú ý

Thuật toán Floyd áp dụng cho đồ thị vơ

hướng đồ thị có hướng

Ta cần thay cạnh vô hướng (u,v)

Ngày đăng: 18/04/2021, 08:56

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w