1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo bài tập lớn môn Đại số tuyến tính Đề tài 6 lí thuyết Đồ thị

16 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
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

Tiêu đề Lí Thuyết Đồ Thị
Tác giả Le Quoc Quy En, Nguyen Nhan Viet Quoc, Nguyen Minh Quy, Le Khanh Tan, Dang Xuan Thang
Người hướng dẫn ThS. Nguyễn Hữu Hiệp
Trường học Đại Học Quốc Gia TP. Hồ Chí Minh
Chuyên ngành Đại Số Tuyến Tính
Thể loại Báo Cáo Bài Tập Lớn
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 16
Dung lượng 1,78 MB

Nội dung

Trong khoa học máy tính và trong toán học, thuật toán tìm đường đi ngắn nhất trong đ ồ thị là một bài toán thưởng được vận dụng trong các ứng dụng tin học.. Trong các ứng dụng thực tế, b

Trang 1

DAI HOC QUOC GIA TP HO CHI MINH

TRUONG DAI HOC BACH KHOA TP.HCM

KHOA KHOA HOC UNG DUNG

BK TP.HCM

BAO CAO BAI TAP LON MÔN ĐẠI SỐ TUYẾN TÍNH

ĐỀ TÀI 6: LÍ THUY ẾT ĐỒ THỊ

Giảng viên hướng dẫn: ThS Nguyễn Hữu Hiệp

Nhóm thực hiện: Nhóm 6

Lớp: L03

Trang 2

DANH SACH THANH VIEN

STT HO VA TEN MA SO SINH VIEN

Trang 3

MUC LUC

DANH SACH THANH VIEN scsssssssssssssesessesseesesseesescsssecsesnsessseesusseeseeceseseaeneaes 2 LỜI MỞ ĐẦẦU - 52 2S 2221 1122112211 21 TT H1 HT 1g Hư 4 Ic909:0)20109:000)1677 7 +1 5

2 Sơ lược v ềthuật toán Floyd WarshalÌ - Gv HH ng 5

II CƠ SỞ LÝ THUYẾT - 2-52 S<9SSESEEEEEEEE212716 1122115 1121071 1121111 ce 6

II THUAT TOAN FLOYD WARSHALL scsssessssssesssesssesssssseessessessseesseesesssesseeees 9

L,Y tung, CCH iab cece cccccssessesessesessescescssssssuescssescsuesesescseeseeauescseacseaeecesas 9

2 Giải thuật toán trong matflab - + + x23 91 HH my ve rưh 10

040902 12

Le VÍ dụ Ì à.22Sc 22211221 2E 2211 11 21 T1 11 T11 TH HH HH n ườu 12

2 VÍ Ụ 2 à 2S 22214222 E211 11221 211111 T11 1 TT 1 H1 1g ng 13 S7 £‹£1II 14 V.TÀI LIỆU THAM KHẢO 5-2225 2EE£EE22E12E122212111212221211 1 cv 17 9/977 ::‹: 17

VILNHAN XÉT CỦA GIÁO VIÊN - St cc ST TS EE SE EEeEeEEErrerersrserere 17

Trang 4

LỚI MỞ ĐẦU

Với sự ra đời của Internet, tất cả các trưởng học hiện nay đ âi đã áp dụng các kiến thức, kĩ năng và hiểu biết v`êcông nghệ thông tin trong các môn học nhằm nâng cao hiệu quả day

và học

Trong khoa học máy tính và trong toán học, thuật toán tìm đường đi ngắn nhất trong đ ồ thị là một bài toán thưởng được vận dụng trong các ứng dụng tin học Trong các ứng dụng thực tế, bài toán tìm đường đi ngắn nhất giữa hai đỉnh của một đ ôthị có một ý nghĩa to lớn Ví dụ, bài toán chọn một hành trình tiết kiệm nhất (v`êtiêu chuẩn khoảng cách, thởi gian hoặc chi phí) trên một mạng lưới giao thông đương bộ, đường thủy, Hiện nay có rất nhi âi các phương pháp để giải các bài toán như vậy Thế nhưng thông thưởng, các thuật toán được xây dựng dựa trên cơ sở lý thuyết đ`ôthi là hiệu quả cao nhất Sau đây chúng ta sẽ xét đến thuật toán Hoyd Warshall, một trong những thuật toán tìm đường

đi ngắn nhất được xây dựng dựa trên lí thuyết đ ồthi Mong thẦ% và các bạn theo dõi và góp ý để chủ đ`êcủa chúng em được hoàn thiện hơn

Trang 5

L GIỚI THIỆU CHUNG:

1 Lịch sử lý thuyết đ ôthi:

Bài toán bảy cây câi Euler, còn gọi là Bảy câi ở Konigsberg là bài toán nảy sinh từ thành phố Konigsberg, Phổ Bài toán đặt ra là tìm một tuyến đường mà đi qua mỗi cay cA một Lần và chỉ đúng một lần (bất kể điểm xuất phát hay điểm tới) Năm 1736, Leonhard Euler

đã chứng minh rằng bài toán này là không có lời giải Kết quả này là cơ sở phát triển của

lý thuyết đ Ôthi

MALL AY

Nam 1852 Francis Guthrie dia ra bai tod4n bOin mau v évan d€liéu chi với bốn màu có thể

tô màu một ban d Gbat kì sao cho không có hai nước nào cùng biên giới được tô cùng màu Bài toán này được xem như đã khai sinh ra lý thuyết đ ồthi và chỉ được giải sau một thế kỉ vào năm 1Ø76 bởi Kenneth Appel (1932 -) và Wolfgang Haken (1928 - )

2 Sơ lược v`êthuật toán Floyd Warshal:

2.1 Giới thiệu:

Thuật toán Hloyd—Warshall còn được gọi là thuật toán Floyd được Robert Floyd tìm ra năm 1962

Thuật toán Floyd là một thuật toán giải quyết bài toán tìm đường đi ngắn nhất trong một

đ thi có hướng dựa trên các đỉnh trung gian Khi c3n chỉ ra đường đi ngắn nhất của mọi cặp đỉnh trong đ ôthi thì thuật toán Floyd chính là công cụ giúp ta thực hiện chỉ trong một Lần chạy Hơn thế nữa, cách tiếp cận và cài đặt của nó cũng khá đơn giản và quen thuộc

2.2 Tác dụng:

Thuật toán Floyd-Warshall được thiết kế để tính toán đường đi ngắn nhất giữa mọi cặp điểm trong đ ôthi có hướng

2.3 Ưu điểm:

- Tìm được đường đi ngắn nhất giữa tất cả các điểm trong đ ồthị với trọng số âm hoặc dương, trong đ ồthi có hướng hoặc vô hướng

- Chỉ với một lân chạy thuật toán sẽ cho ta kết quả

- Phát hiện được chu trình âm trong d Gthi

Trang 6

2.4 Nhược điểm:

- Trong đ ồthịi không được có vòng nào có tổng các cạnh là âm, nếu có vòng như vậy ta không thể tìm được đường đi ngắn nhất (mỗi l 3n đi qua vòng này độ dài quãng đường lại giảm, nên ta có thể đi vô hạn ln.)

IL CƠ SỞ LÝ THUYẾT

1 DGthi:

Định nghĩa 1.1: D Gthi la mdt tap cdc diém gọi là đỉnh nối với nhau bởi các cạnh Thông thường, đ ồthị được vẽ dưới dạng một tập các điểm (đỉnh, nút) nối với nhau bởi các đoạn thẳng (canh)

Định nghĩa 1.2: Hai đỉnh u và v của đ ồthị vô hướng G được gọi là k Enhau nếu (u,v)

là cạnh của đ ồthi G Nếu e= (u,v) là cạnh của đ ôthi ta nói cạnh này là liên thuộc với hai đỉnh u và v, hoặc cũng nói là nối đỉnh u và đỉnh v, đ ng thời các đỉnh u và v sé được gọi là các đỉnh đầi của canh (u,v)

Ta gọi bậc của đỉnh v trong đ `ôðthi vô hướng là số cạnh liên thuộc với nó và sẽ

ký hiệu là deg(v)

Dinh bậc 0 gợi là đỉnh cô lập, đỉnh bậc I gọi là đỉnh treo

Định lý 1: Giả sử G = (V,E) là đ ôthi vô hướng với m cạnh Khi đó tổng bậc của tất cả các đỉnh bằng hai lần số cung

2 Ð ồthi vô hướng và đ Gthi có hướng:

2.1 Ð ồthi vô hướng: là một cặp không có thứ tự G=(V, E), trong đó:

e_ V là tập các đỉnh hoặc nút

e E, tap cdc canh Hai đỉnh thuộc một cạnh được gọi là các đỉnh đi cuối của cạnh đó

Hình 2.2.1: đ`ôthi vô hướng

Trang 7

2.2 D Sthi cé huong: 14 mét_cap không có thứ tự G=(V, A), trong đó:

e_ V là tập các đỉnh hoặc nút

@ A là tập các cạnh có hướng hoặc gọi là cung

Một cạnh e = (u, v) được coi là có hướng tử u tới v; u được gọi là điểm đ ầ/gốc và v được gọi là điểm cuối/ngọn của cạnh

Hình 2.2.2: đ`ồthi có hướng

3 Đơn đồthi và đa đ ồthi:

3.1 Đơn đồthi: là đ ôthi được tạo thành từ tập hợp các đỉnh nối bởi các cạnh, trong

đó các cạnh có hướng liên kết với chúng thỏa đi âi kiện: nếu x và y là hai đỉnh thì đ ồ thị chỉ được phép có tối đa một trong hai cung (x, y) hoặc (y, x)

3.2 Da d 6thi: la d Gthi ma không thỏa mãn đơn đ ôthị Đa đ ôthi có hướng là một

đ ồthi có hướng, trong đó, nếu x và y là hai đỉnh thì đ ôthi được phép có cả hai cung

(x, y) va (y, X)

4 Ma trận kcủa d Gthi:

Xét đơn đ thi vô hướng G= (V,E), với tập đỉnh V=‡ 1 ,2, ,n}, tập cạnh E={e¡,e›,

my:

Ta gọi ma trận k €ctia d Gthi G 1a ma tran A=(a¡) thỏa

aij

Ví dụ: Cho đ ôthi như hình vẽ:

Trang 8

Hinh 2.4.1: Ð ôthị vô hướng

Ma trận k*của đ ồthi này là A=

Giải thích: Có đưởng nối từ A đến B nên phn tử a:z=1, không có đường nối từ D đến C nên a„=0 Tương tự cho các ph” tử còn lại

Ví dụ: Cho d Gthi có trọng số như hình

B

Hình 2.4.2: Ð ôthị có trọng số

Ma trận k*của đ ồthi này là A=

Ví dụ: Cho đ ôthi có hướng và có trọng số như hình

D

Trang 9

Hình 2.4.3: Ð ôthị có hướng và có trọng số

Ma trận k*của đ ồthi này là A=

Il THUAT TOAN FLOYD WARSHALL

I Ý tưởng cách giải

1.1 Ý tưởng:

Từ bài toán đã cho, chuyển các số liệu v`êdạng ma trận trọng số A Mỗi ô A[i.,j] được lấp day bởi khoảng cách từ đỉnh ¡ tới đỉnh j, nếu không có đưởng đi nào từ đỉnh ¡ tới đỉnh j thì ô đó sẽ có giá trị là © Sau bước lặp thứ k, A[i,J] chứa độ dài đường đi ngắn nhất từ đỉnh ¡ đến đỉnh j (có thể đi qua đỉnh khác r ổ đến j), các đỉnh nó đi qua có chỉ số không vượt quá k

1.2 Cách giải:

Bước 1: Viết ma tran k 6A của đ ôthị

Bước 2: Chọn I3 lượt từng đỉnh của đ ồthi làm đỉnh trung gian Giả sử chọn đỉnh k làm đỉnh trung gian Ta giữ nguyên hàng k, cột k của ma tran A, giữ nguyên các

phẦn tử trên đường chéo của A

Bước 4: Kí hiệu A là ma trận A sau Lần lặp thứ k, khi đó A.[ï.j] được tính theo công thức sau:

Atj]l = min Ai [LJ], Axa[Lk]+ Arilky] )

Bước 4: Sau đó, ta thực hiện n ln lặp Sau lần lặp thứ k, ma trận A sẽ chứa độ dài các đường đi ngắn nhất chỉ đi qua các đỉnh thuộc {1,2 ,k}

Bước 5: Do đó, sau n Lần lặp ta nhận được ma trận A chứa độ dài các đưởng đi ngắn nhất

2 Giải thuật toán trong matlab:

Các hàm matlab cơ bản được sử dụng trong bài toán:

Lệnh Cú pháp Ý nghĩa

Clear clear all -xóa hết mọi giá trị, biến, dữ liệu ban đ ân

Input A=input(“tên biến”) -Nhập vào 1 giá trị cho biến A

Min N= Min (A,B) -Nhập giá trị N bởi giá trị của biến nhỏ hơn trong

Trang 10

hai bién A va B

Length length( -Tinh chi ai dai vector

Ones ones(N,N) -Tao ra ma trận các phần tử 1 cấp N

For for -Tao vong lap

If-else- If-(else)-end -Câu lệnh If xác đ nh đi €a1 ki 4 ho & 1 nhém di €a end kiện ä y ra thì cho phép thự c hệ n các câuã nh Fprintf Fprint(“ tên biến”) -Thực hiện ghi định dạng vào màn hình

Disp disp(S) -Xuất giá trị của biến Š ra màn hình

10

Trang 11

Doan code được sử dụng trong Matlab:

clc

clear all

A=input('Nhap ma tran A‘);

N=min(length(A));

=-1*ones(N,N);

S=A;

for k=1:N

for i=1:N

for j=1:N

if S(i,k)==inf

continue;

end

if S(k,j)==inf

continue;

end

if S(i,j)>S(i,k)+5(k, 9)

if P(i,k)==-

P(i,j)=k;

else

end

end

end

fprintf('Ma

disp(S);

P(i,j)=P(i,k);

end

S(1,j)=S(i,k)+S(k,Jj);

end

tran duong di ngan nhat la\n');

11

Trang 12

IV VI DU

1 Vidu 1; O'khu nha cia A, cdc dia diém 123,45 (Lần lượt là khu mua sấm, ngân hàng, công viên, trưởng học, siêu thị) cách nhau những quãng đường như hình vẽ

mô tả Hãy tìm đường đi ngắn nhất giữa các địa điểm trên

2km

2 h

Giải: Từ hình vẽ trên ta lập được ma trận biểu diễn đường đi như sau:

Giải thích: Ma trận 5*5 được lập nên bởi các ph*n tử hàng ¡ cột j ứng với khoảng cách

giữa các địa điểm với nhau khi đã cho sẵn, với các đường đi chưa xác định được thì ta nhập vào giá trị tại chỉ số đó là œ , khoảng cách tử điểm đó đến chính nó sẽ là 0

Đây là kết quả của VDI sau khi cho chạy trên phì m`ềần Matlab:

Command Window

Nhap ma tran A [0 5 inf 9 1

5 0 2 inf inf

inf 2 0 7 inf

9 inf 702

1 inf inf 2 0]

Ma tran duong di ngan nhat la

rPwWrAo ON

0

2

8

6 on

8

0

2

12

Trang 13

Khi đó ta có thể hiểu là đường đi ngắn nhất từ 3 đến 1 sẽ bằng 7km, tức là từ đường di từ công viên qua ngân hàng r ` đến khu mua sắm sẽ là đường ngắn nhất, tương tự với các cặp địa điểm còn lại

2 Ví dụ 2: Giả sử bạn có 5 người bạn là Quy ân, Quốc, Quý, Tân, Thắng Bạn biết một vài con đường và chi i dài quãng đường dẫn đến nhà các bạn đó (bản đ `ôbên dưới) Nhưng bạn không biết đi đường nào ngắn nhất, tuy nhiên nhờ tìm hiểu vê thuật toán Floyd Warshall bạn đã có thể tìm được hướng đi ngắn nhất Hãy tạo ma trận đường đi ngắn nhất giữa nhà mỗi bạn

a ee Quyén

6 Tan

Quốc ——— Thing

Giải: Từ ban d6trén ta có ma trận sau:

0 20 ©

5 6 œ ơœ 0

(Quy ước các ph tử của ma trận tương tự như ví dụ l)

Ta sử dụng thuật toán Floyd Warshall để biến đổi ma trận trên:

0 13 2 co oO 0 13 2 œ o'

o 0 60 w o 0 60 ow

5 6 7 » 0 5 6 7 @ 09/

0 13 2 5 ơ Mm 232 5 6

o 0 69 @ o 0 6 9 10

~|ao wo 0 3B œ|D|o wo 0 3 4

ow wo 0 1 ow wo 0 1

5 6 7 10 0/ 5 6 7 10 0

0 12 2 5 6`

15 0 6 9 10

9 10 0 3 4

6 7 8 0 1

5 ñ 7 19 A

Sau đây là kết quả của VD2 chạy trên phẦn m`ân Matlab:

13

Trang 14

Nhap ma tran A [0 13 2 inf inf

inf 0 6 inf inf inf inf 0 3 inf inf inf inf 01

5 6 inf inf 0]

Ma tran duong đi ngan nhat la

0 12 2 5 6

15 9 6 9 10

9 10 0 3 4

6 7 8 0 1

5 6 7 10 0

Từ ma trận kết quả, ta biết được quãng đường ngắn nhất giữa mỗi nhà

3 Ví dụ3: Tìm đường đi ngắn nhất từ Điện Biên đến Côn Đảo? Biết sơ đ`ôđường đi như hình vẽ:

Dien Bien

HA NOI

iS

Hai Phong

Nha Trang

S

Can Tho &

Con Dao

Giải: Giả sử các hàng, cột thứ 1,2.3.4.5,6,7,8.9 Lần lượt là Điện Biên, Hà Nội, Hải Phòng, Vinh,

Đà Năng, Nha Trang, C® Thơ Ta sẽ có được ma trận trọng số như sau:

0 296 œ œ œ œ 0© © ©

296 0 8826#605 œ 1146 œ œ

88 0 ® ơ œ 0® ở œ

œ

œ

oO 264 ® 0 © © 886 @

œ 605 ® œ 0 436 610 œ

œ œ %0 œ 436 0 322 œ w

® 1146 ® 886 610322 0 126230

œ œ ® œ © © 230 © O

Đây là kết quả của VD3 chạy trên phần mềần Matlab:

14

Trang 15

0

296

384

560

901

1337

1442

1568

1672

Nhap ma tran A [0 296 inf inf inf inf inf inf inf

296 0 88 264 605 inf 1146 inf inf

inf 88 0 inf inf inf inf inf inf

inf 264 inf O inf inf 886 inf inf

inf 605 inf inf 0 436 610 inf inf

inf inf inf inf 436 0 322 inf inf

inf 1146 inf 886 610 322 0 126 230

inf inf inf inf inf inf 126 0 inf

inf inf inf inf inf inf 230 inf 0

Ma tran duong di ngan nhat la

296

0

88

264

605

1041

1146

1376

384

88

0

352

1129

1234

1464

560

264

352

0

869

1208

886

1012

1116

Do đó ma trận đường đi ngắn nhất sẽ là:

0

296

384

560

901

1337

1442

1568

1672

296

0

88

264

605

1041

1146

1272

1376

384

88

352

1129

1234

1360

1464

869

1208

886

1012

1116

901

605

693

869

0

436

610

736

840

1337

1041

1129

1208

436

901

605

693

869

436

610

736

840

1442

1146

1234

886

610

322

126

230

1337

1041

1129

1208

436

322

446

552

1568

1272

1360

1012

736

448

126

0

356

1442

1146

1234

886

610

322

126

230

Vậy đường đi ngắn nhất từ Điện Biên đến Côn Đảo là 1672 (đvđd)

1568

1272

1360

1012

448

126

356

1672

1376

1464

1116

840

552

230

356

Kết luận: Qua các ví dụ trên, ta có thể thấy nhờ có thuật toán Floyd Warshall ứng dụng

lý thuyết đ `ôthi mà các bài toán thực tế tìm đường đi ngắn nhất giữa các đỉnh trở nên dễ

dàng hơn Thêm vào đó, do cách lập trình thuật toán trên công cụ Matlab không quá phức tạp nên thuật toán Floyd Warshall rất lợi hại trong nhi âi trường hợp so với các thuật toán

tìm đường đi ngắn nhất khác

15

Ngày đăng: 09/02/2025, 13:48

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN