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 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ả Ho Quốc, Quôc Quí, Minh Quy, T., 2110525, 2112328
Người hướng dẫn ThS. Nguyễn Hữu Hiệp
Trường học Trường Đại học Bách Khoa TP.HCM
Chuyên ngành Đại số tuyến tính
Thể loại Báo cáo bài tập lớn
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 16
Dung lượng 1,81 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 tín học.. Irong 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 MON DAISO TUYEN TINH

DE TAI 6: LI THUYET DO THI

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: 103

Trang 2

DANH SACH THANH VIEN

HO V SO SINH

QUỐC Q 2112155

2112328

Trang 3

MUC LUC

DANH SACH THANH VIEN 2 LOI MO DAU 4

I GIOI THIEU CHUNG 5

1 Ly thuyét dé thi Š

2 Sơ lược về thuật toán Floyd Warshall 2-5 5c < cseeecseeeeersee 5

II CƠ SỞ LÝ THUUYÊ-T - << s©Sse+seEESeExeeErEerkeersersrsetrerkerrsrsersersersee 6

HI THUẬT TOÁN FLOYD WARSHALL.L 2-5 5° << cse+scsee serscse 9

1 Ý tưởng, cách giải 5c cscsceeEreExeEEkEEEEEEEEkeErkererrkererserserrreererke 9

IV VÍDỤ .12

1 Vidul 12

2 Vidu2 13

V.TAI LIEU THAM KHẢO 17 VLTONG KET 17 VILNHAN XET CUA GIAO VIEN 17

Trang 4

LOI MO DAU

Với sự ra đời cua Internet, tất cả các trường học hiện nay đều đã á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ả đạy

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 tín học Irong 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 g1ao thông đường bộ, đường thủy, Hiện nay có rất nhiều 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 dé thị là hiệu quả cao nhất Sau đây chúng ta sẽ xét đến thuật toán Floyd Warshall, một trong những thuật toán tìm đường

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

Trang 5

I GIOL THIEU CHUNG:

1 Lịch sử lý thuyết đồ thị:

Bài toán bảy cây cầu Euler, còn gọi là Bảy cầu ở 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 cây cầu một

lần va 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 đồ thị

Năm 1852 Francis Guthrie đưa ra bài toán bốn màu về vấn đề liệu chỉ với bến màu có thể

tô màu một bản đỗ bất 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 1976 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 Floyd—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

đỗ thị có hướng dựa trên các đỉnh trung gian Khi cần chỉ ra đường đi ngắn nhất của mọi cặp đỉnh trong đề thị 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 đồ thị 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 đồ thị 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é thi

Trang 6

2.4 Nhược điểm:

- Trong đồ thị 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ần đi qua vòng này độ dài quãng đường lại giảm, nên ta có thê đi vô hạn lần.)

II CO SO LY THUYET

1 D6 thi:

Dinh nghia 1.1: Dé thi là một tập các điể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 dang m6t tập các điểm (đỉnh, nút) nỗi với nhau bởi các đoạn thắng (cạnh)

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

là cạnh của đồ thị G Nếu e= (u,v) la canh của dé 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 đầu của cạnh (u,v)

Ta goi bac cua dinh v trong dé thi vô hướng là số cạnh liên thuộc với nó và sẽ

ký hiệu la deg(v)

Đỉnh bậc 0 gọi là đỉnh cô lập, đỉnh bậc 1 gọi là đỉnh treo

Dinh ly 1: Gia st G =(V,E) la dé thị 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 Đề thị vô hướng và đồ thị có hướng:

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

e lla tap các đỉnh hoặc nút

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

Hình 2.2.1: đồ thị vô hướng

Trang 7

2.2 Đồ thị có hướng: là một cặp không có thứ tự G=(V, A), trong đó:

e lla tap các đỉnh hoặc nút

® 4 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 đầu/gốc và v được gọi là điêm cuô1/ngọn của cạnh

Hình 2.2.2: đồ thị có hướng

3 Don dé thi và đa đồ thị:

3.1 Đơn đề thị: là đồ thị đượ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ều kiện: nếu x va y là hai đỉnh thì đồ thi chỉ được phép có tối đa một trong hai cung (x, y) hoặc (y, x)

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

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

(x, y) và (y, X)

4 Ma trận kề của đồ thị:

Xét đơn đồ thị vô hướng G= (V,E), với tập đỉnh V={ I,2 n}, tập cạnh E={ei.e›,

-.Ôm }

Ta gọi ma trận kề của đồ thị G là ma trận A=(a) thỏa

8ị=

Ví dụ: Cho đề thị như hình vẽ:

Trang 8

Hình 2.4.1: Đồ thị vô hướng

Ma trận kề của đồ thị nay la A=

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

Ví du: Cho dé thi cd trong số như hình

Hình 2.4.2: Đề thị có trọng SỐ

Ma trận kề của đồ thị nay la A=

Vi du: Cho dé thi cd 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 đồ thị nay la A=

Ill THUAT TOAN FLOYD WARSHALL

LLY 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[LJ] được lấp

đầy 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ì 6 đó 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ồi đến j), các đỉnh nó đi qua có chỉ số không vượt qua k

L2 Cách giải:

Bước l: Viết ma trận kề A của đồ thị

Bước 2: Chọn lần lượt từng đỉnh của đồ thị 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 trận A, srữ nguyên các phần tử trên đường chéo của A

Bước 4: Kí hiệu A, là ma tran A sau lan lap thứ k, khi đó A¿[i.j] được tính theo công thức sau:

Ax(ij] = min( Acifij], Acifik] + Acalky] )

Bước 4: Sau đó, ta thực hiện n lần lặp Sau lần lặp thứ k, ma tran A sẽ chứa độ dài các đường đi ngắn nhất chi di 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 Giai thuat toan trong matlab:

Cac ham matlab co bản được sử dụng trong bài toán:

Clear clear all -Xóa hết mọi gia tri, biến, dữ liệu ban đầu Input A=input(‘tén bién’) -Nhập vảo | gia tri 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 và B

Length length( -Tinh chiéu dai vector

Ones ones(N,N) -Tạo ra ma tran cac phan tir | cap N

If-else- If-(else)-end -Câu lénh if xac d nl diééu ki ậ ho ä 1 nhóm điêêu end kiện xảy ra thì cho phép thực hiện các câu lệnh Fprintf Fprint(‘ tén bién’) -Thực hién ghi dinh dang vao man hinh

Disp disp(S) -Xuất giá trị của biến S ra man hinh

10

Trang 11

Đoạn 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

end

end

end

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

if P(i,k)==-1

P(i,3)=k;

else

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

end

S(1,3)=S(1,k)+S(k, 3);

end

fprintf('Ma tran duong di ngan nhat la\n');

disp(S);

11

Trang 12

IV VÍ DỤ

1 Ví dụ 1: Ở khu nhà của A, các địa điểm 1,2,3,4,5 (lần lượt là khu mua sắm, ngân

hàng, công viên, trường học siêu thi) 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 diém trên

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*Š đượ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ần mềm 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

0 5 7 3 1

5 0 2 8 6

7 2 0 7 8

3 8 7 0 2

1 6 8 2 0

12

Trang 13

Khi đó ta có thé hiểu là đường | đi ngắn nhất từ 3 đến l sẽ bang 7km, tức là từ đường đi từ công viên qua ngân hàng rôi đế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ều 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

_ Ðộ — Quyền

Tân 6

Quốc —————Thắng |

Giai: Tir ban do trén ta có ma trận sau:

0 13 2 œ ©œ

co O 6 œ œ

œ œ0 3 @

co wo œ0 1

5 6 œ ơœ 0

(Quy ước các phần 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 0 0 13 2 @ o'

oom gq i œ ằœ œ 0 1

5 6 7 œ 0 5 6 7 œ 0,

03 2 5 wi Mm 23.2 5 6

6 7 8 0 1

Sau đây là kết quả của VD2 chay trén phan mém 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 di ngan nhat la

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

HẠ NOI

Hai Phong

¬

re

8

Da Nang

Ww

oO Nha Trang

HO CHI MINH Can Tho S

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ân Thơ Ta sẽ có được ma trận trọng số như sau:

0 296 œ œ œ œ 0œ © ©

296 0 88264605 œ 1146 œ w

œ 88 0 ® œ œ © © ơƠ

© 2647 0 © © 886 œ œ

© 605 ® œ 0 436610 © w

œ œ © œ 436 0 322 © w

© 1146 © 886610322 0 126230

® œ ®œ® œ 0œ © 126 0 w

oo OP wm © © 230 © 0

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

14

Trang 15

0

296

384

560

901

1337

1442

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

Ma tran duong di ngan nhat la

296

a

88

264

605

1041

1146

1272

1376

384

88

0

352

1129

1234

1360

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

0

352

693

1129

1234

1360

1464

869

1208

886

1012

1116

901

605

693

869

0

436

610

736

840

1337

1041

1129

1208

436

0

322

448

552

1442

1146

1234

886

610

322

0

126

230

1337

1041

1129

1208

436

322

552

1568

1272

1360

1012

736

448

126

0

356

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

1672

1116

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

lý thuyết đỗ thị 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ụ Miatlab không quá phức tạp nên thuật toán Floyd Warshall rất lợi hại trong nhiều trường hợp so với các thuật toán tìm đường đi ngắn nhất khác

15

Trang 16

V.TAI LIEU THAM KHAO

[1]:Dai s6 tuyén tinh - Dang Van Vinh

[2]: https:/Awww.mathworks.com/matlabcentral/fileexchange/11549-floyd-shortest-path-

routing

[3]: https://brilli re/wiki/floyd- hall-al

[4]: Wikipedia

VLTONG KET

Với sự phân công chuân bị kỹ lưỡng và cùng với sự nỗ lực cô găng hệt mình, nhóm đã hoàn thành đề tài được giao và Matlab đã cho ra kết quả như mong muốn

Qua phần bải tập lớn này nhóm đã biết được :

- Thao tác giải toán trên Matlab

- _ Làm bài toán trở nên sinh động hơn, nâng cao sự hứng thú đối với môn học

- _ Trau đồi kỹ năng học tập và làm việc nhóm hiệu quả

- Nang cao tinh thần trách nhiệm và thắt chặt tính đoàn kết của các thành viên trong nhóm

VIH.NHÂN XÉT CỦA GIÁO VIÊN

16

Ngày đăng: 28/10/2024, 12:16

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

TÀI LIỆU LIÊN QUAN

w