1. Trang chủ
  2. » Công Nghệ Thông Tin

chương 10 single-source shortest paths

45 226 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

Thông tin cơ bản

Định dạng
Số trang 45
Dung lượng 313 KB

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

Nội dung

10: Single-Source Shortest Paths 4 Cạnh có trọng số âm ª Giả thiết: Trọng số của cạnh có thể âm – Chu trình có thể có trọng số âm – Nếu tồn tại một chu trình có trọng số âm đến được reac

Trang 1

Single-Source Shortest Paths

Trang 2

20.11.2004 2

Các đường đi ngắn nhất từ một đỉnh nguồn

ª Bài toán các đường đi ngắn nhất: một số thuật ngữ

Cho một đồ thị có trọng số, có hướng G = (V, E), với một hàm trọng số w : E → ℜ

Trọng số của một đường đi p = v0 , v1,…, v k

• w(p) = i = 1…k w(v i 1 , v i )– Trọng số của đường đi ngắn nhất (shortest path weight) từ u đến

v

min{w(p) : u v } nếu có đường đi từ u đến v

Đường đi ngắn nhất từ u đến v là bất kỳ đường đi p nào từ u đến

v sao cho w(p) = δ(u, v).

4 3 6

2 5

1

u

Trang 3

Các đường đi ngắn nhất từ một đỉnh nguồn (tiếp)

ª Bài toán các đường đi ngắn nhất từ một nguồn duy nhất source shortest-paths problem):

(Single-– Cho đồ thị G = (V, E) và một đỉnh nguồn s V.

– Tìm đường đi ngắn nhất từ s đến mọi đỉnh v V.

3

6

7 2

4 3 6

2 5

1

s

Trang 4

20.11.2004 Ch 10: Single-Source

Shortest Paths

4

Cạnh có trọng số âm

ª Giả thiết: Trọng số của cạnh có thể âm

– Chu trình có thể có trọng số âm

– Nếu tồn tại một chu trình có trọng số âm đến được (reachable) từ

s thì trọng số của đường đi ngắn nhất không được định nghĩa:

không đường đi nào từ s đến một đỉnh nằm trên chu trình có thể

là đường đi ngắn nhất

3 5 2

j

số trong mỗi đỉnh là trọng số đường đi ngắn nhất

từ đỉnh nguồn s.

Trang 5

Cạnh có trọng số âm (tiếp)

– Nếu tồn tại một chu trình có trọng số âm trên một đường đi từ s đến v, ta định nghĩa δ(s, v) = −∞

– Trong ví dụ sau, các đỉnh h, i, j không đến được từ s nên có trọng

số đường đi ngắn nhất là ∞ (chứ không là −∞ mặc dù chúng nằm trên một chu trình có trọng số âm)

3 5 2

j

Trang 6

– Với mọi đỉnh v, đỉnh cha (predecessor) của v là một đỉnh khác

hay là NIL

Duy trì π[v], con trỏ đến đỉnh cha Dùng π để suy ra đường đi

ngắn nhất từ s đến v.

– Đồ thị con Gπ = (Vπ , Eπ ) (predecessor subgraph)

• Vπ = {v V : π[v] ≠ NIL} ∪ {s}

• Eπ = {(π[v], v) E : v Vπ − {s}}

Trang 7

Biểu diễn các đường đi ngắn nhất (tiếp)

ª Cho G = (V, E) là một đồ thị có hướng, có trọng số;

G không chứa chu trình trọng số âm đến được từ đỉnh nguồn s V.

Cây các đường đi ngắn nhất với gốc tại s là đồ thị có hướng G’ = (V’,

E’), với V’ V và E’ E sao cho

1 V’ là tập các đỉnh đến được (reachable) từ s trong G

2 G’ là cây có gốc với gốc là s

3 Với mọi v V’, đường đi đơn duy nhất từ s đến v là đường đi

ngắn nhất từ s đến v trong G

Trang 8

3

6

7 2

4 3 6

0 3

6

7 2

4 3 6

2 5

0 3

6

7 2

4 3 6

2 5

Ví dụ: trong (b) và (c) là hai cây các đường đi ngắn nhất có gốc tại đỉnh

nguồn s của đồ thị trong (a)

Trang 9

Cấu trúc của đường đi ngắn nhất

ª Lemma 25.1 (Đường đi con của đường đi ngắn nhất cũng là đường

đi ngắn nhất)

Cho

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

w : E → ℜ

– p = v1 , v2 ,…, v k đường đi ngắn nhất từ v1 đến v k

– Với mọi i, j mà 1 i j k, gọi p ij = 〈v i , v i + 1 ,…, v j 〉 là đường đi con

(subpath) của p từ v i đếnv j

Trang 10

p ij

p 1i

p jk

Trang 11

Cấu trúc của đường đi ngắn nhất (tiếp)

p’

Trang 13

Cấu trúc của đường đi ngắn nhất (tiếp)

Trang 14

20.11.2004 Ch 10: Single-Source

Shortest Paths

14

Kỹ thuật nới lỏng

ª Kỹ thuật nới lỏng (relaxation)

– Duy trì cho mỗi đỉnh v một thuộc tính d [v] dùng làm chận trên cho trọng số của một đường đi ngắn nhất từ s đến v.

– biến d[v] được gọi là ước lượng đường đi ngắn nhất (shortest path

estimate)

– Khởi động các ước lượng đường đi ngắn nhất và các predecessors bằng thủ tục sau

2 do d[v] ← ∞

3 π[v] ← NIL

4 d[s] ← 0

Trang 15

Kỹ thuật nới lỏng (tiếp)

ª Thực thi nới lỏng lên một cạnh (u, v): kiểm tra xem một đường đi đến v thông qua cạnh (u, v) có ngắn hơn một đường đi đến v đã tìm được hiện thời hay không Nếu ngắn hơn thì cập nhật d[v] và π[v].

Trang 16

Trị của d[v] giảm sau khi

gọi RELAX(u, v, w) Trị của d[v] không thay đổi sau khigọi RELAX(u, v, w)

Trang 17

Kỹ thuật nới lỏng (tiếp)

ª Các giải thuật trong chương này gọi INITIALIZE-SINGLE-SOURCE và sau đó gọi RELAX một số lần để nới lỏng các cạnh

– Nới lỏng là cách duy nhất được dùng để thay đổi các ước lượng đường đi ngắn nhất và các predecessors

– Các giải thuật khác nhau ở thứ tự và số lần gọi RELAX lên các cạnh

Trang 19

Các tính chất của kỷ thuật nới lỏng (tiếp)

– Một khi d[v] đạt đến cận dưới δ(s, v) của nó thì nó sẽ không bao

giờ thay đỗi

Trang 20

– đẳng thức này được duy trì thành bất biến đối với mọi dãy các

bước nới lỏng lên các cạnh của G.

Trang 21

Các tính chất của kỷ thuật nới lỏng (tiếp)

ª Để chứng minh tính đúng đắn của các giải thuật tìm đường đi ngắn nhất (giải thuật Dijkstra và giải thuật Bellman-Ford) ta cần Lemma sau

ª Lemma 25.7

Cho

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

w : E → ℜ

– Một đỉnh nguồn s, và s u v là một đường đi ngắn nhất trong

G với các đỉnh nào đó u, v V.

– G được khởi động bỡi INITIALIZE-SINGLE-SOURCE(G, s) và sau đó

một chuỗi các bước nới lỏng trong đó có gọi RELAX(u, v, w) được thực thi lên các cạnh của G.

Nếu d[u] = δ(s, u) trước khi gọi RELAX(u, v, w), thì sau khi gọi luôn luôn có d[v] = δ(s, v).

Trang 22

Sau khi khởi động G bởi INITIALIZE-SINGLE-SOURCE(G, s), ta có

– Đồ thị Gπ là cây có gốc s

– Mọi chuổi các bước nới lỏng lên các cạnh của G duy trì tính chất

trên thành một bất biến

Trang 23

Cây các đường đi ngắn nhất (tiếp)

– G không chứa chu trình có trọng số âm đến được từ s.

Khởi động G bằng INITIALIZE-SINGLE-SOURCE(G, s) và thực thi chuổi bất kỳ các bước nới lỏng lên các cạnh của G sao cho d[v] = δ(s, v) với mọi đỉnh v V.

Đồ thị Gπ là một cây các đường đi ngắn nhất có gốc tại s.

Trang 24

20.11.2004 Ch 10: Single-Source

Shortest Paths

24

Giải thuật của Dijkstra

ª Đồ thị G = (V, E) có hướng, có trọng số với

– Hàm trọng số w : E → ℜ mà w(u, v) 0 cho mọi cạnh (u, v) E

– Đỉnh nguồn s.

ª Giải thuật của Dijkstra:

– Dùng một priority queue Q với khóa là các trị d[ ]

Trang 25

Phân tích giải thuật của Dijkstra

ª Thời gian chạy phụ thuộc vào hiện thực của priority queue Q:

– Linear array

° Mỗi EXTRACT-MIN tốn O(V) thời gian, vậy tất cả các

° Tất cả các lần gọi RELAX tốn O(E) thời gian

Thời gian chạy tổng cộng: O(V 2 + E) = O(V 2)

Trang 26

20.11.2004 Ch 10: Single-Source

Shortest Paths

26

Phân tích giải thuật của Dijkstra (tiếp)

ª Thời gian chạy phụ thuộc vào hiện thực của priority queue Q:

– Binary heap

° Tạo heap tốn O(V) thời gian.

° Mỗi EXTRACT-MIN tốn O(lg V) thời gian, vậy tất cả các

° Tất cả các lần gọi RELAX tốn O(E lg V) thời gian, vì mỗi

Thời gian chạy tổng cộng: O((V + E) lg V).

Trang 27

Phân tích giải thuật của Dijkstra

(tiếp)

– Fibonacci heap

° Tạo heap với V phần tử tốn O(V) thời gian.

° Mỗi EXTRACT-MIN tốn O(lg V) phí tổn bù trừ, vậy tất cả các

° Tất cả các lần gọi RELAX tốn O(E) thời gian, vì mỗi

Thời gian chạy tổng cộng: O(V lg V + E).

Trang 28

9 7 2

9 7 2

2 5

Đỉnh màu đen là đỉnh trong S

Đỉnh màu xám là đỉnh được đem vào S trong lần lặp tới

Ngay trước khi vào vòng lặp while: Vòng while: ngay sau lần lặp 1

Trang 29

Thực thi giải thuật của Dijkstra (tiếp)

9 7 2

0

10

1

6 4

9 7 2

2 5

Trang 30

10

1

6 4

9 7 2

0

10

1

6 4

9 7 2

2 5

Trang 31

Tính đúng đắn của giải thuật của Dijkstra

ª Định lý 25.10 (Tính đúng đắn của giải thuật của Dijkstra)

Thực thi giải thuật của Dijkstra lên đồ thị G = (V, E) có trọng số và

có hướng với

– hàm trọng số w : E → ℜ không âm

– đỉnh nguồn s.

Khi giải thuật thực thi xong,

d[u] = δ(s, u) cho mọi đỉnh u V

Chứng minh

Sẽ chứng minh: ∀u V, d[u] = δ(s, u) khi u được đưa vào tập S và

sau đó đẳng thức luôn được duy trì

Trang 32

Chứng minh bằng phản chứng.

(*) Gọi u là đỉnh đầu tiên sao cho d[u] ≠ δ(s, u) khi u được đưa vào

tập S.

– Phải có một đường đi từ s đến u Vì nếu không thì δ(s, u) = ∞, do

đó d[u] = , do đó d[u] = δ(s, u) dùng Hệ luận 25.6, mâu thuẫn! – Do đó có đường đi ngắn nhất p từ s đến u, với s S và u V S Gọi y là đỉnh đầu tiên trên p sao cho y V S Đặt x = π[y].

Trang 33

Tính đúng đắn của giải thuật của Dijkstra

Chứng minh (tiếp)

– Chứng tỏ d[y] = δ(s, y) khi u được đưa vào tập S: theo (*) ta phải có d[x] = δ(s, x) khi x được đưa vào S Khi đó cạnh (x, y) được nới lỏng nên d[y] = δ(s, y) dùng Lemma 25.7.

– Vì y trước u trên đường đi ngắn nhất từ s đến u và mọi trọng số

đều dương nên δ(s, y) ≤ δ(s, u).

Trang 34

– Khi u được chọn bởi EXTRACT-MIN thì y cũng còn trong Q nên

d[u] d[y], do đó bất đẳng thức :

d[y] = δ(s, y) = δ(s, u) = d[u], từ đó d[u] = δ(s, u), mâu thuẫn với

(*)!

– Dùng Lemma 25.5 để chứng minh phần còn lại

Trang 35

Tính đúng đắn của giải thuật của Dijkstra (tiếp)

ª Hệ luận 25.11

Thực thi giải thuật của Dijkstra lên đồ thị G = (V, E) có trọng số và

có hướng với

– hàm trọng số w : E → ℜ không âm

– đỉnh nguồn s.

Khi giải thuật thực thi xong thì đồ thị Gπ là cây các đường đi ngắn

nhất có gốc tại s.

Trang 36

20.11.2004 Ch 10: Single-Source

Shortest Paths

36

Giải thuật của Bellman-Ford

ª Cho G = (V, E) là đồ thị có trọng số, có hướng

– Hàm trọng số w : E → ℜ

Trang 37

Phân tích giải thuật của Bellman-Ford

ª Thời gian chạy:

– Khởi tạo: Θ(V) thời gian

– |V| − 1 lượt, mỗi lượt O(E) thời gian

– vòng lặp for dòng 5-7: O(E) thời gian

Thời gian chạy tổng cộng: O(V E)

Trang 38

8 7

5

7 9

8 7

Trong mỗi lượt, thứ tự relax các cạnh là:

(u, v) (u, x) (u, y) (v, u) (x, v) (x, y) (y, v) (y, z) (z, u) (z, x)

Ngay trước lượt đầu: Ngay sau lượt đầu:

Cạnh (u, v) được sơn xám nếu π[v] = u

Trang 39

Thực thi giải thuật Bellman-Ford (tiếp)

2 7

0

6

5

7 9

8 7

5

7 9

8 7

0 6

5

7 9

8 7

Trang 41

Tính đúng đắn của giải thuật Bellman-Ford (tiếp)

Chứng minh

Gọi v là một đỉnh đến được từ s Gọi p = <v0 , , v k > là một đường đi

ngắn nhất từ s đến v Vì p là đường đi đơn nên k ≤ | V | − 1

Sẽ chứng minh: d[v i ] = δ(s, v i ) sau lượt nới lỏng thứ i, với i = 0, ,k,

và đẳng thức được duy trì sau đó

Dùng quy nạp:

– Cơ bản: d[v0 ] = δ(s, v0) = 0 (vì v0 = s)

– Giả thiết quy nạp: d[v i − 1 ] = δ(s, v i − 1) sau lượt nới lỏng thứ i 1.

– Bước quy nạp: Cạnh (v i − 1 , v i ) được nới lỏng trong lượt thứ i nên d[v i ] = δ(s, v i ) sau lượt i và tại mọi thời điểm sau đó, theo Lemma

25.7

Để ý là k ≤ | V | − 1 và có | V | − 1 lượt nới lỏng

Trang 42

Với mọi đỉnh v V, tồn tại đường đi từ s đến v nếu và chỉ nếu

Trang 43

Tính đúng đắn của giải thuật của Bellman-Ford (tiếp)

ª Định lý 25.14 (Tính đúng đắn của giải thuật của Bellman-Ford)

Thực thi BELLMAN-FORD lên đồ thị G = (V, E) có trọng số và có

hướng với

– hàm trọng số w : E → ℜ

– đỉnh nguồn s

(i) Nếu G không chứa chu trình có trọng số âm đến được từ s, thì

(1) giải thuật trả về TRUE

(2) d[v] = δ(s,v) cho mọi đỉnh v V

(3) đồ thị Gπ là cây các đường đi ngắn nhất có gốc tại s.

(ii) Nếu G chứa một chu trình có trọng số âm đến được từ s, thì giải

thuật trả về FALSE

Trang 44

(i) Giả sử G không chứa chu trình có trọng số âm đến được từ s.

– Nếu v đến được từ s thì Lemma 25.12 chứng minh (2).

Nếu v không đến được từ s thì có (2) từ Hệ luận 25.6

– Lemma 25.9 cùng với (2) chứng minh (3)

– Khi giải thuật hoàn tất, ta có với mọi cạnh (u, v):

d[v] = δ(s,v) ≤ δ(s,u) + w(u, v) (từ Lemma 25.3)

= d[u] + w(u, v),

vậy các test dòng 6 khiến giải thuật trả về TRUE, chứng minh (1)

Trang 45

Tính đúng đắn của giải thuật của Bellman-Ford

Chứng minh (tiếp)

(ii) Giả sử G chứa một chu trình có trọng số âm đến được từ s là

c = v0 ,…,v k với v0 = v k

Vậy ∑ i = 1…k w(v i − 1, v i ) < 0 (*)

Chứng minh (ii) bằng phản chứng:

° Giả sử Bellman-Ford trả về TRUE, thì (dòng 5-8)

Ngày đăng: 19/10/2014, 00:42

TỪ KHÓA LIÊN QUAN

w