1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Toán rời rạc Chương 9 bài toán đường đi ngắn nhất

58 7 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

Tiêu đề Chương 9 bài toán đường đi ngắn nhất
Trường học Trường Đại học
Chuyên ngành Toán Rời Rạc
Thể loại Giáo trình môn học
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 58
Dung lượng 0,94 MB

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

Nội dung

Microsoft PowerPoint Chương 9 Pa Compatibility Mode LOGO CHƯƠNG 9 BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT 9 1 Các khái niệm mở đầu  Cho đơn đồ thị có hướng G = (V,E) với hàm trọng số w E  R (w(e) được gọi là độ dài hay trọng số của cạnh e)  Độ dài của đường đi P = v1  v2   vk là số  Đường đi ngắn nhất từ đỉnh u đến đỉnh v là đường đi có độ dài ngắn nhất trong số các đường đi nối u với v  Độ dài của đường đi ngắn nhất từ u đến v còn được gọi là khoảng cách từ u tới v v.

Trang 1

CHƯƠNG 9

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

Trang 2

9.1 Các khái niệm mở đầu

 Cho đơn đồ thị có hướng G = (V,E) với hàm trọng số w: E  R (w(e) được gọi là độ dài hay trọng số của cạnh e)

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

đường đi có độ dài ngắn nhất trong số các đường

đi nối u với v.

 Độ dài của đường đi ngắn nhất từ u đến v còn được gọi là khoảng cách từ u tới v và ký hiệu là

(u,v)

1

1 1

Trang 3

Ví dụ

Đường đi s s,a s,a,b s,a,b,c s,a,d s,a,b,e s,a,b,e,f

s a b c d e f

Cho đồ thị có trọng số G = (V, E), và đỉnh nguồn

sV, hãy tìm đường đi ngắn nhất từ s đến mỗi đỉnh

còn lại

as

f

dc

3

3

51

đỉnh nguồn

Trang 4

9.2 Đường đi ngắn nhất xuất phát

từ một đỉnh

Tính chất 1 Đường đi ngắn nhất luôn có thể tìm trong số các đường đi đơn

Tính chất 2 Mọi đường đi ngắn nhất

trong đồ thị G đều đi qua không quá n-1cạnh, trong đó n là số đỉnh

Trang 5

9.2 Đường đi ngắn nhất xuất phát

từ một đỉnh

Tính chất 3: Giả sử P = ‹v1, v2, …, vk› làđường đi ngắn nhất từ v1 đến vk

Khi đó, Pij = ‹vi, vi+1, …, vj› là ĐĐNN từ viđến vj, với 1  i  j  k

(Bằng lời: Mọi đoạn đường con của đường đi ngắn nhất đều là đường đi ngắn nhất)

P’ij

Pij vj

vi

Trang 6

9.2 Đường đi ngắn nhất xuất phát

Trang 7

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

d(v) = độ dài đường đi từ s đến v ngắn nhất hiện biết

(cận trên cho độ dài đường đi ngắn nhất thực sự).

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

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

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

Khởi tạo (Initialization)

for v  V(G)

do d[v]   p[v]  NIL d[s]  0

Trang 8

Giảm cận trên (Relaxation)

Sử dụng cạnh (u, v) để kiểm tra xem đường đi đến

v đã tìm được có thể làm ngắn hơn nhờ đi qua uhay không

Trang 9

Nhận xét chung

 Việc cài đặt các thuật toán được thể hiện nhờ thủ tục gán nhãn:

 Mỗi đỉnh v sẽ có nhãn gồm 2 thành phần (d[v], p[v]) Nhãn sẽ biến đổi trong quá trình thực hiện thuật toán

Trang 10

9.3 Thuật toán Dijkstra

Bài toán

Cho G = (V, E) đơn, liên thông, có trọng

số dương (w(uv) > 0 với mọi u khác v).Tìm đường đi ngắn nhất từ u0 đến v và tínhkhoảng cách d(u0,v)

Trang 11

9.3 Thuật toán Dijkstra

Phương pháp

Xác định tuần tự các đỉnh có khoảng cáchđến u0 từ nhỏ đến lớn

đến u0 là u0

đỉnh kề với u0) giả sử đó là u1

Trang 12

9.3 Thuật toán Dijkstra

3 Trong V\{u0,u1} tìm đỉnh có khoảng cách

đến u0 nhỏ nhất(đỉnh này phải là mộttrong các đỉnh kề với u0 hoặc u1) giả sử đó

là u2

4 Tiếp tục như trên cho đến bao giờ tìm

được khoảng cách từ u0 đến mọi đỉnh

Nếu G có n đỉnh thì:

0=d(u0,u0)<d(u0,u1) d(u0,u2) … d(u0,un-1)

Trang 13

Bước1 i:=0, S:=V\{u0}, L(u0):=0, d(v):= với mọi v

S và đánh dấu đỉnh v bởi(,-).

Nếu n=1 thì xuất d(u0,u0)=0=L(u0)

Bước2 Với mọi vS và kề với ui (nếu đồ thị có hướng thì v là đỉnh sau của ui),

9.4 Cài đặt Thuật toán Dijkstra

Trang 14

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

Bài tập 1 Tìm đường đi ngắn nhất từ u0 đến các đỉnh còn lại

1

2

1 4

u

x

w z

y

t

Trang 15

2

1 4

u

r

x

w z

y

t

Trang 16

2

1 4

u

r

x

w z

y

t

Trang 17

1

3

5 3

1

2

1 4

u

r

x

w z

y

t

Trang 18

1 2

4 u

r

x

w z

y

t

Trang 19

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

Cây đường đi

Trang 20

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

Trang 21

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

Trang 22

Đường đi trong đồ thị không có chu trình

Định lý Giả sử G là đồ thị không có chutrình Khi đó các đỉnh của nó có thể đánh

số sao cho mỗi cung của đồ thị chỉ hướng

Trang 23

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

 Thuật toán được xây dựng dựa trên ý tưởng sau:

 Ban đầu: tìm các đỉnh có bán bậc vào bằng 0.

 Tiếp theo: loại bỏ khỏi đồ thị những đỉnh đã được đánh số cùng các cung đi ra khỏi chúng, ta thu được

đồ thị mới cũng không có chu trình, và thủ tục được lặp lại với đồ thị mới này.

 Quá trình đó sẽ được tiếp tục cho đến khi tất cả các đỉnh của đồ thị được đánh số.

Trang 24

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 được cho bởidanh sách kề Ke(v), vV

 Đầu ra: Với mỗi đỉnh vV chỉ số NR[v]thoả mãn: Với mọi cung (u,v) của đồ thị

ta đều có NR[u]<NR[v]

Trang 25

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

procedure Numbering;

begin

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

for u  V do (* TÝnh Vao[v] = b¸n bËc vµo cña v *)

for v  Ke(u) do Vao[v] := Vao[v] + 1 ;

Trang 26

Thuật toán tìm đđnn trên đồ thị không có

Đối với mỗi cung (v[i], v[j])  E, ta có i < j.

Đồ thị được cho bởi danh sách kề Ke(v), v  V.

 Đầu ra: Khoảng cách từ v[1] đến tất cả các đỉnh còn lại được ghi trong mảng d[v[i]], i = 2, 3, , n

Trang 27

Thuật toán tìm đđnn trên đồ thị không có

for v  Ke[v[j]] do

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

end;

 §é phøc t¹p tÝnh to¸n cña thuËt to¸n lµ O(m), do mçi

Trang 28

Cần tìm đường đi ngắn nhất từ s đến tất cả các đỉnh đạt đến được từ nó

Trang 35

Ứng dụng: PERT

khiển việc thực hiện những dự án lớn, gọi tắt là PERT (Project Evaluation and Review

Method).

ra làm n công đoạn, đánh số từ 1 đến n Có một số công đoạn mà việc thực hiện nó chỉ được tiến hành sau khi một số công đoạn nào đó đã hoàn thành Đối với mỗi công đoạn i biết t[i] là thời gian cần thiết để hoàn thành nó (i = 1, 2, , n).

Trang 36

Ứng dụng: PERT

 Các dữ liệu với n = 8 được cho trong bảng sau

Công đoạn t[i] Các công đoạn phải

Trang 37

Ứ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 là 0 Hãy tìm tiến độ thi công công trình (chỉ rõ mỗi công đoạn phải được bắt đầu thưc hiện vào thời điểm nào) để cho công trình được hoàn thành xong trong thời điểm sớm nhất có thể được.

 Ta có thể 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ác công việc như sau:

 Mỗi đỉnh của đồ thị tương ứng với một công việc Nếu công việc i phải được thực hiện trước công đoạn j thì trên đồ thị có cung (i,j), trọng

số trên cung này được gán bằng t[i]

Trang 38

Thuật toán PERT

 Thêm vào đồ thị 2 đỉnh 0 và n+1 tương ứng với hai sự kiện đặc biệt:

 đỉnh số 0 tương ứng với công đoạn Lễ khởi công, nó phải được thực hiện trước tất cả các 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, nó phải thực hiện sau tất cả các

công đoạn,

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

với tất cả các đỉnh có bán bậc vào bằng 0 và nối tất

cả các đỉnh có bán bậc ra bằng 0 với đỉnh n+1)

 Gọi đồ thị thu được là G

Trang 39

Thuật toán PERT

 Do đồ thị G không chứa chu trình, nên để giải bài toán đặt ra có thể áp dụng thuật toán Critical_Path trong đó chỉ cần đổi toán tử min thành toán tử max.

 Kết thúc thuật toán, ta thu được d[v] là độ dài đường đi dài nhất từ đỉnh 0 đến đỉnh v.

 Khi đó d[v] cho ta thời điểm sớm nhất có thể bắt đầu thực hiện công đoạn v, nói riêng d[n+1] là thời điểm sớm nhất có thể cắt băng khánh thành, tức là thời điểm sớm nhất có thể hoàn thành toàn bộ công trình.

Trang 40

PERT: Ví dụ minh hoạ

 Qui bài toán PERT về tìm đường đi dàinhất trên đồ thị không có chu trình

Trang 41

PERT: Ví dụ minh hoạ

Trang 44

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

Bài tập3(ĐHKHTN2005)

Cho một ví dụ chứng tỏ rằng thuậttoán Dijkstra để tìm đường đi ngắn nhất

từ một đỉnh đến các đỉnh khác không ápdụng được cho đồ thị có trọng lượng nếu

có cạnh có trọng lượng âm

Trang 45

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

Trang 46

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

Tìm đường đi ngắn nhất từ u0 đến các đỉnhhoặc chỉ ra đồ thị có mạch âm

Bước 1 L0(u0) =0 và L0(v) =  vu0. Đánhdấu đỉnh v bằng ( ,-) ; k=1

Bước 2 Lk(u0) = 0 và

Lk(v) =min{Lk-1(u)+w(uv)/u là đỉnhtrước của v}

Nếu Lk(v)=Lk-1(y)+w(yv)thì đánh dấu đỉnh

v bởi (Lk(v),y)

Thuật toán Ford – Bellman

Trang 47

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

Bước 3 Nếu Lk(v) =Lk-1(v) với mọi v,tức Lk(v) ổn định thì dừng Ngược lạiđến bước 4

Bước 4 Nếu k = n thì dừng G có mạch

âm Nếu

k  n-1 thì trở về bước 2 với k:=k+1

Trang 48

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

Trang 49

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

Trang 56

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

k = n = 6 Lk(i) chưa ổn định nên đồ thị

có mạch âm Chẳng hạn:

4→2→6→4 có độ dài -3

Trang 57

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

Trang 58

Áp dụng thuật toán Dijkstra

Ngày đăng: 22/05/2022, 12:25

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm