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

Một số bài toán trong lý thuyết đồ thị

53 12 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 53
Dung lượng 700,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

Đặc biệt là các thuật toán trên đồ thị đã có nhiều ứng dụng trong nhiều lĩnh vực khác nhau như: Mạng máy tính, Lí thuyết mã, Tối ưu hoá….. Cặp đỉnh u,v có 2 cạnh song song Hình 1.1 Tro

Trang 1

TRƯỜNG ĐẠI HỌC VINH KHOA CÔNG NGHỆ THÔNG TIN

KHÓA LUẬN

TỐT NGHIỆP ĐẠI HỌC

Đề tài:

Một số bài toán trong lí thuyết đô thị

Sinh viên thực hiện:

LÊ THỊ DUNG

Giáo viên hướng dẫn:

THS TRẦN XUÂN SANG

Trang 2

GIỚI THIỆU ĐỀ TÀI

A Giới thiệu chung

Bước sang thế kỷ 21, nhìn lại thế kỷ 20 là thế kỷ mà con người đạt được nhiều thành tựu khoa học rực rỡ nhất, một trong những thành tựu đó là sự bùng

nổ của ngành khoa học máy tính Sự phát triển kỳ diệu của máy tính trong thế kỷ

này gắn liền với sự phát triển toán học hiện đại, đó là toán rời rạc

Toán học rời rạc nghiên cứu các cấu trúc có tính chất rời rạc không liên tục Toán rời rạc bao gồm các lĩnh vực như: quan hệ, lý thuyết đồ thị, logíc toán, ngôn ngữ hình thức, trong đó lý thuyết đồ thị là một bộ phận trọng tâm với

nhiều khối lượng kiến thức khá lý thú và được nghiên cứu nhiều nhất

Toán rời rạc nói chung và lý thuyết đồ thị nói riêng là công cụ thiết yếu cho nhiều ngành khoa học kỹ thuật, và là một thành phần quan trọng trong học vấn đối với sinh viên các ngành kỹ thuật đặc biệt sinh viên ngành Tin học Lý thuyết đồ thị, với cách tiếp cận đối tượng nghiên cứu và phương pháp tư duy khá độc đáo thực sự ngày càng hữu ích có nhiều ứng dụng phong phú và gây không

ít bất ngờ Máy tính mà bản thân nó với các quá trình làm việc mang tính rời rạc, nên điều này tương hợp gắn chặt lý thuyết đồ thị với công nghệ máy tính trong

việc nghiên cứu các đối tượng có tính chất rời rạc

Trên thực tế nhiều bài toán liên quan đến một tập các đối tượng và mối liên hệ giữa chúng, đòi hỏi toán học phải đặt ra một mô hình biểu diễn 1 cách chặt chẽ và tổng quát bằng ngôn ngữ kí hiệu đó là đồ thị Những ý tưởng cơ bản của nó được đưa ra từ thế kỉ thứ XVIII bởi nhà toán học thuỵ sỹ Leonhard Euler, ông đã dùng mô hình đồ thị để giải bài toán về những cây cầu Konigsbirg nổi tiếng

Mặc dù lí thuyết đồ thị đã được khoa học phát triển từ rất lâu nhưng lại có nhiều ứng dụng hiện đại Đặc biệt trong khoảng vài mươi năm trở lại đây, cùng

Trang 3

với sự ra đời của máy tính điện tử và sự phát triển nhanh chóng của tin học, lí thuyết đồ thị càng được quan tâm đến nhiều hơn Đặc biệt là các thuật toán trên

đồ thị đã có nhiều ứng dụng trong nhiều lĩnh vực khác nhau như: Mạng máy tính, Lí thuyết mã, Tối ưu hoá…

C Cấu trúc của đề tài

Chương I: Một số vấn đề cơ bản của đồ thị

Chương II: Bài toán tìm đường đi ngắn nhất

 Thuật toán Dijkstra

 Thuật toán Ford_Bellman

 Thuật toán Ployd Chương III: Bài toán tìm chu trình Euler

 Thuật toán Fleury

 Phương pháp sử dụng ngăn xếp

Trang 4

CHƯƠNG 1 MỘT SỐ VẤN ĐỀ CƠ BẢN CỦA ĐỒ THỊ

Giả sử V là tập hữu hạn, không rỗng các phần tử nào đó và E  V  V Bộ

G = <V,E> được gọi là đồ thị hữu hạn Mỗi phần tử vV gọi là một đỉnh và mỗi phần tử e = (u,v)  E gọi là một cạnh của đồ thị G = <V,E>

Xét một cạnh e  E khi đó tồn tại 2 đỉnh u,v  V sao cho e = (u, v), ta nói rằng

u nối với v hoặc u và v thuộc e

- Nếu cạnh e = (u, v) mà u và v là hai đỉnh phân biệt thì ta nói u, v là hai đỉnh kề nhau

- Nếu e = (v, v) thì e là cạnh có hai đỉnh trùng nhau ta gọi đó là một khuyên

- Nếu e = (u, v) mà u,v là cặp đỉnh có phân biệt thứ tự hay có hướng từ u đến v thì e là một cung, khi đó u là gốc còn v là ngọn hoặc u là đỉnh ra, v là đỉnh vào

- Khi giữa cặp đỉnh (u,v) có nhiều hơn một cạnh thì ta nói những cạnh cùng cặp đỉnh là những cạnh song song hay là cạnh bội

Trang 5

a) b) c)

a Tại đỉnh u có một khuyên b Một cung có hướng từ u sang v

c Cặp đỉnh (u,v) có 2 cạnh song song

Hình 1.1

Trong thực tế ta có thể gặp nhiều vấn đề mà có thể dùng mô hình đồ thị để biểu diễn, như sơ đồ một mạng máy tính, sơ đồ mạng lưới giao thông, sơ đồ thi công một công trình

Ví dụ: Xét một mạng máy tính, có thể biểu diễn mạng này bằng một mô hình đồ

thị, trong đó mỗi máy là một đỉnh, giữa các máy được nối với nhau bằng các dây truyền, chúng tương ứng là các cạnh của đồ thị Một mô hình mạng máy tính

Hình 1.2 trong đó có các máy tính A, B, C, D tương ứng là các đỉnh, giữa 2 máy

được nối trực tiếp với nhau thì tương ứng với 1 cặp đỉnh kề nhau

Hình 1.2 Ví dụ về một đồ thị 1.1.2 Đồ thị đơn

Đồ thị G = <V, E> được gọi là đồ thị đơn nếu giữa hai đỉnh bất kỳ được nối với nhau bởi không quá một cạnh (cung), tức là đồ thị không có cạnh bội,

không có khuyên (Hình 1.2 là một ví dụ về đồ thị đơn)

Trang 6

thị không có bất kỳ một cung nào

Hình 1.3.a biểu diễn của một đồ thị vô hướng

1.2.2 Đồ thị có hướng

Đồ thị G = <V,E> được gọi là đồ thị có hướng nếu tất cả các cạnh e  E

mà cặp đỉnh thuộc nó e = (u,v)  V có phân biệt thứ tự Đồ thị có hướng là đồ thị

mà mọi e = (u,v)  V đều là cung

Trang 7

Hình 2.1 Đồ thị có hướng 1.2.3 Đồ thị hỗn hợp

Đồ thị G = <V,E> vừa có cạnh vô hướng, vừa có cạnh có hướng thì nó được gọi là đồ thị hỗn hợp Loại đồ thị này rất ít khi được dùng tới

Vấn đề phân chia đồ thị và các thuật ngữ về đồ thị chỉ mang tính tương đối, hiện nay vẫn còn chưa mang tính thống nhất chuẩn trên nhiều tài liệu

1.3 Một số khái niệm và tính chất cơ bản của đồ thị

1.3.1 Bậc đồ thị

a Bậc đồ thị vô hướng

Cho đồ thị vô hướng G = <V,E> Xét 1 đỉnh v  V đặt m(v) là số cạnh thuộc đỉnh v khi đó m(v) được gọi là bậc của đỉnh v Nếu v có một khuyên thì m(v) được cộng thêm 2

m(v) = 3 m(v) = 2

- Nếu m(v) = 0 thì đỉnh v được gọi là đỉnh cô lập

- Nếu m(v) = 1 thì đỉnh v được gọi là đỉnh treo

v m G

Trang 8

b Bậc đồ thị có hướng

Cho đồ thị có hướng G = <V,E> xét 1 đỉnh v  V, ký hiệu m+(v) là số các cung vào của đỉnh v, còn m-(v) là số các cung ra khỏi v Khi đó ta gọi m+

(v) là bậc vào của đỉnh v còn m-(v) là bậc ra của đỉnh v

- Nếu m+(v) + m-(v) = 0 thì đỉnh v được gọi đỉnh là cô lập

- Nếu m+(v) + m-(v) = 1 thì đỉnh v được gọi là đỉnh treo

v

v m v

m G

Trang 9

Hệ quả: Số đỉnh bậc lẻ của đồ thị G = <V,E> là một số chẵn

v V

v

v m v

m v

1.3.2 Đường đi và chu trình

trong đó các cạnh, các đỉnh trong đường đi có thể lặp lại

Độ dài của đường đi bằng số các cạnh (hoặc cung) trong đường đi đó

Chú ý trong đồ thị có hướng, trên một cung uv chẳng hạn thì đường đi chỉ có thể đi từ gốc (u) đến ngọn (v) không thể đi ngược lại

b Chu trình

Xét một đường đi từ vi - vj Nếu vi  vj thì đường đi này được gọi là một chu trình Như vậy chu trình là một đường đi có đỉnh xuất phát và đỉnh kết thúc trùng nhau

Chú ý đường đi trong đồ thị có hướng không được đi ngược chiều mũi tên

Trang 10

- Đường đi (chu trình) được gọi là đơn nếu nó đi qua mỗi cạnh không quá một lần

- Đường đi (chu trình) được gọi là sơ cấp nếu nó đi qua mỗi đỉnh đúng một lần

Hình 3.1

Ví dụ Hình 3.1 ADBE là một đường đi sơ cấp từ A đến E độ dài 3; ABCDBE là

đường đi không sơ cấp (qua B 2 lần) từ A đến E độ dài 5; ABDAB là một đường

đi không đơn (chứa cạnh AB 2 lần) từ A đến B độ dài 4; ABDA Là 1 chu trình đơn và sơ cấp độ dài 3; CC là đường đi độ dài 0

Xét đồ thị có hướng Hình 2.1 thì ABCB là một đường đi độ dài 3; CBA

không là một đường đi vì không có cung đi từ B đến A

Định lý:

Nếu trong đồ thị G = <V,E> các đỉnh đều có bậc không nhỏ hơn 2

)2)(

D

C

Trang 11

1.3.3 Đồ thị liên thông

Cho đồ thị G = <V,E> Hai đỉnh phân biệt u,v  V được gọi là liên thông nếu tồn tại một đường đi nối các đỉnh u,v với nhau Đồ thị G được gọi là liên thông nếu với hai đỉnh phân biệt bất kỳ trong đồ thị đều là liên thông

Hình 3.1 là một đồ thị liên thông vì luôn có đường đi nối hai đỉnh bất kỳ của đồ

Trang 12

Đồ thị Hình 3.3 có ba thành phần liên thông sau:

G1 = <V1, E1> với V1= {A,B,C} và E1 = {AB, AC, CB}

G2 = <V2, E2> với V2= {D, E} và E2 = {DE}

G3 = <V3, E3> với V3= {F} và E3 = 

Cho đồ thị có hướng G = <V,E>

- G được gọi là đồ thị liên thông yếu nếu đồ thị vô hướng tương ứng với nó là liên thông

- G là liên thông một chiều nếu với hai đỉnh u,v khác nhau bất kỳ của G luôn có đường đi u - v hoặc đường đi v - u

- G là liên thông mạnh (liên thông 2 chiều) nếu hai đỉnh u,v khác nhau bất kỳ của

G đều có đường đi u - v và đường đi v - u

H1 H2 H3

Hình 3.4

Hình 3.4 đồ thị H1 là liên thông mạnh, giả sử cặp đỉnh (A,C) ta có chiều

đi từ C tới A, và đồng thời cũng có chiều đi từ A tới C, và bất kỳ các cặp đỉnh khác cũng tương tự như vậy H2 là liên thông một chiều vì xét cặp đỉnh (A,D) có chiều đi từ D tới A nhưng không có chiều đi từ A tới D H3 là liên thông yếu vì

Trang 13

tồn tại cặp đỉnh (B,C) không có chiều đi B - C cũng không có chiều đi C - B, nhưng đồ thị vô hướng tương ứng là liên thông

1.3.4 Đồ thị con và đồ thị bộ phận

Cho đồ thị G = <V,E>

- Nếu trong đồ thị đó ta bỏ đi một số đỉnh nào đó và các cạnh xuất phát từ đỉnh

đó thì phần còn lại của đồ thị được gọi là đồ thị con của đồ thị G đã cho, hoặc nếu D = <V',E'> là đồ thị con của G = <V,E> thì V'  V và E'  E

- Nếu trong đồ thị G ta bỏ đi một số cạnh nhưng giữ nguyên các đỉnh thì phần còn lại của đồ thị được gọi là đồ thị bộ phận của đồ thị G

1.4 Các dạng biểu diễn của đồ thị

1.4.1 Biểu diễn hình học của đồ thị

Để có cái nhìn trực quan ta thường biểu diễn đồ thị bằng hình học, một đồ thị có thể biểu diễn trên một mặt phẳng hoặc trong không gian Phương pháp biểu diễn như sau: Biểu diễn các đỉnh của đồ thị bằng các điểm (hay vòng tròn nhỏ, ô vuông nhỏ) và nối hai điểm bằng một đường (cong, thẳng, mũi tên) khi cặp điểm đó ứng với một cạnh (cung) của đồ thị

Ví dụ 1: Cho đồ thị G = <V,E> trong đó

V = {A, B, C, D, E} và E = {AB, AC, AD, AE, BD, CD, CE}

a) b)

Hình 4.1 Hình 4.1.a và Hình 4.1.b đều là biểu diễn hình học của đồ thị G đã cho ở trên

Trang 14

1.4.2 Sự đẳng cấu

Với mỗi đồ thị thì có thể có nhiều dạng biểu diễn hình học, có nhiều đồ thị tưởng chừng khác nhau nhưng đó là cách biểu diễn hình học khác nhau của cùng một đồ thị, sự đẳng cấu cho phép chúng ta kết luận được điều đó

Định nghĩa: Xét 2 đồ thị G1 = (V1, E1) và G2 = <V2, E2>

Hai đồ thị này được gọi là đẳng cấu với nhau nếu tồn tại 1 song ánh từ V1 vào V2

và từ E1 vào E2 sao cho nếu có cạnh e = (u, v)  E1 tương ứng với cạnh e' = (u', v')  E2 thì cặp đỉnh u, v  V1 cũng là tương ứng cặp đỉnh u', v' V2

Nếu a, b  V1 kề nhau thì f(a), f(b)  V2 kề nhau

Vậy đây là 2 đồ thị đẳng cấu với nhau, ta có thể xem G1 và G2 thực chất chỉ là 1 chỉ có điều biểu diễn ở dạng hình học khác nhau, các tên đỉnh khác nhau

Với 2 đồ thị đẳng cấu thì chúng có những tính chất bất biến như sau:

Trang 15

Hình 4.3 a: G- 1 đều; b: G - 2 đều; c: G - 2 đều; d: G - 3 đều

Trường hợp riêng như đồ thị Hình 4.3.b và Hình 4.3.c là những đồ thị vòng ký

hiệu Cn (n là số đỉnh)

b Đồ thị đầy đủ

Đồ thị đầy đủ n đỉnh, ký hiệu Kn là đơn đồ thị vô hướng mà mọi cặp đỉnh

phân biệt luôn kề nhau Hình 4.4 dưới đây hoặc 1 trường hợp riêng của đồ thị

đều G - 3 là những đồ thị đầy đủ

a) b)

Hình 4.4 a - đồ thị đầy đủ K 2 ; b - đồ thị đầy đủ K 4

Trang 16

d Một vài ứng dụng của đồ thị đặc biệt

Ở các mạng cục bộ (LAN), các máy tính thường được kết nối theo một cách thức nào đó gọi là hình trạng (topolopy) Dựa theo đặc điểm của các topolopy này mà ta có thể mô hình bằng 1 số dạng đồ thị đặc biệt Ví dụ với mạng LAN các máy tính được kết nối theo topolopy hình sao (Star) sau đây:

Trang 17

a) b) c) d)

a) Dạng sao b) dạng vòng c) dạng hỗn hợp d) dạng đầy đủ (Complete)

Hình 4.7 Một số topolopy của LAN

Ở mạng LAN ta cũng thường có các dạng topolopy khác như dạng chu trình (loop) hoặc gọi là vòng Ở dạng này mỗi máy nối đúng với 2 máy khác Mạng cục bộ với cấu trúc vòng tròn được mô hình bằng các đồ thị đặc biệt dạng vòng Cn (Hình 4.7.b), thông báo gửi từ máy này sang máy khác theo chu trình

vòng tròn cho tới khi tới được máy đích Hoặc 1 dạng nữa là dạng hỗn hợp, đó là

sự kết hợp của dạng hình sao và hình vòng Topolopy kiểu này là một đồ thị bánh xe Wn (Hình 4.7.c) Mạng cục bộ dạng bánh xe các máy có thể truyền vòng

quanh theo vòng tròn hoặc có thể qua bộ phận trung tâm Ngoài ra người ta cũng thường hay bố trí mạng sao cho các máy đều kết nối trực tiếp với nhau, với kiểu này có thể mô hình bằng đồ thị đầy đủ Kn (Hình 4.7.d)

1.4.4 Biểu diễn đồ thị trên máy tính

Lĩnh vực đồ thị có nhiều ứng dụng trong thực tế, có thể mô hình nhiều ứng dụng bằng đồ thị và sử dụng máy tính để giải quyết các bài toán về ứng dụng đó Nên việc biểu diễn và lưu trữ đồ thị trên máy tính là một vấn đề khá trọng tâm, phương thức biểu diễn từng loại đồ thị trên máy tính ảnh hưởng đến các giải thuật, phương pháp giải quyết các ứng dụng trên máy tính

a Biểu diễn bằng ma trận kề

Phương pháp này dựa trên mối quan hệ giữa các cặp đỉnh, mỗi đồ thị được đặt tương ứng với một ma trận vuông cấp n (n là số đỉnh của đồ thị) Gọi ma trận

kề là A = (aij ) i,j = 1 n

Trang 18

+ Trường hợp G = <V,E> là đồ thị vô hướng với V = {v1, v2, ,vn} khi đó mỗi phần tử aij của ma trận A được xác định như sau: aij = aji = d, nếu cặp đỉnh (vi, vj)

có d cạnh nối với nhau Khi cặp đỉnh (vi, vj) không có cạnh nào nối với nhau thì

aij = 0 Ta thấy ma trận kề của đồ thị vô hướng là ma trận đối xứng

+ Trường hợp G = <V,E> là đồ thị có hướng với V = {v1, v2, ,vn} thì mỗi phần

tử aij của A được xác định như sau: đối với mỗi cặp đỉnh (vi, vj) từ vi đến vj nếu

có d cung thì aij = d Chú ý aji = 0 nếu không có cung nào hướng từ vj đến vi Ma trận kề trong trường hợp này là không đối xứng

Trong 2 trường hợp trên ta chú ý nếu đỉnh vi có một khuyên thì phần tử tương ứng của ma trận kề là aii = 1

Hình 4.8

Ta có thể dựng ma trận kề biểu diễn đồ thị G1 và G2 trong Hình 4.8 như sau:

Đối với đồ thị có trọng số mỗi cạnh e = (vi, vj) được gán một trọng số l(e) (hoặc l(vi, vj) ) thì ma trận kề của nó được thay bằng ma trận có trọng số, khi đó mỗi phần tử của ma trận bằng trọng số của cạnh tương ứng: aij =l(vi, vj)

0021

1201

0111

0 1 0

1 1 0

2

GM

Trang 19

Ưu điểm của phương pháp này là dễ dàng xác định được các cặp đỉnh có

kề nhau hay không hoặc rất thuận tiện khi tìm số bậc của mỗi đỉnh Việc truy cập phần tử của ma trận kề qua chỉ số không phụ thuộc vào số đỉnh của đồ thị

Nhược điểm lớn nhất của phương pháp này là không phụ thuộc vào số cạnh của đồ thị, ta luôn phải sử dụng n2

đơn vị bộ nhớ để lưu trữ ma trận kề của

b.Biểu diễn bằng danh sách cạnh (cung)

Cho đồ thị G = <V,E> với số cạnh m, số đỉnh n Nếu m < 6n thì G thường được biểu diễn dưới dạng danh sách cạnh (cung)

Theo cách này danh sách tất cả các cạnh (cung) của đồ thị vô hướng (có hướng) Mỗi cạnh (cung) e = (u,v) của đồ thị tương ứng với hai biến Dau[e], Cuoi[e]

Hình 4.9

Hình 4.9 đồ thị G1 và G2 được biểu diễn bằng danh sách cạnh (cung) như sau:

Vậy để lưu trữ đồ thị cần sử dụng 2m đơn vị bộ nhớ Nhược điểm của phương pháp này là để xác định những đỉnh nào của đồ thị là kề với một đỉnh cho trước chúng ta phải làm m phép so sánh

3 33

Trang 20

2 Nil

c Danh sách kề

Phương pháp biểu diễn bằng danh sách kề cũng được sử dụng khá phổ biến

và thường hay dùng cho đồ thị có hướng

Danh sách kề cho đỉnh vi là danh sách gồm tất cả các đỉnh kề của vi theo thứ

tự các đỉnh trong tập đỉnh V Ta có thể biểu diễn đồ thị như một mảng FIRST, với phần tử FIRST[i] là con trỏ trỏ tới danh sách kề cho đỉnh vi

Hình 4.9 đồ thị G1 và G2 được biểu diễn bằng danh sách kề như sau:

Trang 21

CHƯƠNG 2 BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT

2.1 Giới thiệu bài toán

Trong thực tế chẳng hạn trong mạng lưới giao thông đường bộ, đường thuỷ hoặc đường không, người ta không chỉ quan tâm đến việc tìm đường đi giữa

2 địa điểm mà còn phải lựa chọn một hành trình tiết kiệm nhất (theo tiêu chuẩn thời gian, không gian hay chi phí) Khi đó phát sinh yêu cầu tìm đường đi ngắn nhất giữa 2 đỉnh của đồ thị Bài toán đó phát biểu dưới dạng tổng quát như sau: Cho đồ thị có trọng số G=(V,E), hãy tìm một đường đi ngắn nhất xuất phát từ đỉnh xuất phát SV đến đỉnh đích fV, độ dài của đường đi này sẽ kí hiệu là:

Cho đồ thị hữu hạn G = <V,E> với mỗi cạnh e  E ta đặt tương ứng với

số dương w(e) là trọng số của e Gọi là đồ thị có trọng số

Gọi a là một đường đi nào đó trong G = <V,E>

Giả sử a = vi1ei1vi2ei2 vin – 1ein-1vin, vij V , e ij E (j = 1, 2, ,n)

Khi đó ký hiệu gọi là trọng số của đường a

ký hiệu D(a,b) là tập tất cả các đường đi nối đỉnh a với đỉnh b trong đồ thị

G Đường đi a giữa a và b là ngắn nhất nếu a thoả mãn w(a) = min {w(b) / b 

D(a,b)}



 1 ( ))

(

n j ij

e w

w

Trang 22

b Bài toán: Cho đơn đồ thị G = <V, E> liên thông có trọng số, và a, b  V Tìm các đường đi ngắn nhất giữa 2 đỉnh a, b

Cơ sở thuật toán tìm đường đi ngắn nhất:

Gọi c , u v là trọng số của cạnh  u, v Quy ước c v,v  0với mọi vV

 u v  

c , nếu như  u,vE Đặt d , s v là khoảng cách từ s tới v Để tìm đường

đi từ s tới f, ta có thể nhận thấy rằng luôn tồn tại đỉnh f1 f sao cho:

d  s,f1 d s,f2 c f2 , f1

Tiếp tục như vậy sau một số hữu hạn bước ta suy ra dãy f,f1,f2, không chứa đỉnh lặp lại và kết thúc ở s Đường đi ngắn nhất sẽ được lấy theo thứ tự ngược lại từ s tới f Khi lập trình phải sử dụng lưu vết đường đi ngay trong quá trình tìm kiếm

Dưới đây ta sẽ xét 1 số thuật toán tìm đường đi ngắn nhất từ đỉnh s tới đỉnh f trên đơn đồ thị có hướng G=(V,E) có n đỉnh và m cung Trong trường hợp đơn đồ thị vô hướng, bài toán tìm đường đi ngắn nhất có thể dẫn về bài toán trên

đồ thị có hướng bằng cách thay đổi mỗi cạnh của nó bằng hai cung có hướng ngược chiều nhau Các thuật toán dưới đây sẽ luôn tìm được đường đi ngắn nhất

Trang 23

2.2.1 Thuật toán FORD-BELLMAN

a Thuật toán:

Cho đồ thị có hướng được lưu vào một tệp văn bản dưới đây

Input: File văn bản

 Dòng 1: Chứa số đỉnh (n<=100), số cung m của đồ thị, đỉnh xuất phát(f)

 m dòng tiếp theo mỗi dòng có 3 dạng số u,v,c[u,v] cách nhau ít nhất 1 dấu cách thể hiện (u,v) là một cung thuộc E và trong số của cung đó là c[u,v] Bước 1: Khởi tạo

d[v]:=c[u,v] { d[v]: khoảng cách ngắn nhất từ f tới v}

Bước 2: Xác định đường đi ngắn nhất

For u:=1 to n do

For v:=1 to n do

d[v]:= min(d[v], d[u]+c[u,v])

b Nhận xét về Tính đúng của thuật toán

Tại bước khởi tạo thì mỗi d[v] chính là độ dài ngắn nhất của đường đi từ S tới v qua không quá 0 cạnh.Giả sử khi bắt đầu bước lặp thứ i (i 1), d[v] đã bằng

độ dài đường đi ngắn nhất từ S tới v qua không quá i-1 cạnh Bởi đường đi từ S tới v qua không quá i cạnh sẽ phải thành lập bằng cách: Lấy một đường đi từ S tới 1 đỉnh u nào đó qua không quá i-1 cạnh rồi đi tiếp tới v bằng cung (u,v), nên

độ dài đường đi ngắn nhất từ S tới v qua không quá i cạnh sẽ được tính bằng giá trị nhỏ nhất trong các giá trị

 Độ dài đường đi ngắn nhất từ S tới v qua không quá i-1 cạnh

 Độ dài đường đi ngắn nhất từ S tới u qua không quá i-1 cạnh cộng với số cạnh (u,v) (u)

Trang 24

Vì vậy sau bước lặp tối ưu các d[v] được tính bằng công thức:

d[v]bước i =min(d[v] bước i-1,d[u] bước i-1 +c[u,v] )( u ),

các d[v] sẽ bằng độ dài đường đi ngắn nhất từ S tới v qua không quá i cạnh

Sau bước lặp thứ n-1, ta có d[v]=độ dài đường đi ngắn nhất từ S tới v qua không quá n-1 cạnh Vì đồ thị không có chu trình âm nên sẽ có 1 đường đi ngắn nhất từ S tới v là đường đi cơ bản (qua không quá n-1 cạnh) Tức là d[v] sẽ là đường đi ngắn nhất từ S tới v

Vậy số bước lặp tối ưu hoá sẽ không quá n-1 bước

Sự tối ưu bắc cầu (dùng d[u] tối ưu d[v] rồi lại có thể dùng d[v] để tối ưu d[w] nữa …) Nó chỉ làm cho tốc độ tối ưu các nhãn d[v] tăng nhanh hơn nên số bước lặp vẫn sẽ không quá n-1 bước

Output: File văn bản ghi đường đi ngắn nhất từ đỉnh xuất phát tới các đỉnh còn lại trong đồ thị và độ dài đường đi đó

Ngày đăng: 21/10/2021, 23:12

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

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

w