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

Những vấn đề cơ bản và một số thuật toán trên đồ thị

52 60 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 52
Dung lượng 1,24 MB

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

Nội dung

Đỉnh v được gọi là đỉnh cắt nếu khi loại bỏ v cùng với các cạnh liên thuộc với nó thì đồ thị nhận được sẽ có số thành phần liên thông lớn hơn số thành phần liên thông của đồ thị ban... h

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

Trang 2

LỜI CẢM ƠN

Trong quá trình thực hiện khoá luận em đã nhận được nhiều sự giúp

đỡ quý báu và bổ ích từ các thầy cô và bạn bè Em xin chân thành cảm

ơn các thầy cô trong khoa Toán trường Đại học Sư phạm Hà Nội 2 đãtận tâm giảng dạy, truyền thụ kiến thức và kinh nghiệm quý báu để emhoàn thành tốt khoá học Đặc biệt, em xin bày tỏ lòng cảm ơn sâu

sắc của mình tới thầy Trần Minh Tước, thầy đã trực tiếp hướng dẫn,

nhiệt tình giúp đỡ và chỉ bảo em trong suốt quá trình thực hiện khoáluận

Em xin chân thành cảm ơn các thầy cô trong tổ toán Ứng dụng –khoa Toán, thư viện nhà trường, gia đình và bạn bè đã tạo mọi điều kiện,động viên, giúp đỡ để em hoàn thành khoá luận này

Xuân Hòa, ngày 06 tháng 5 năm 2014

Sinh viên

Nguyễn Thúy Linh

Trang 3

LỜI CAM ĐOAN

Tôi cam đoan khoá luận “Những vấn đề cơ bản và một số thuật toán trên đồ thị” là kết quả nghiên cứu của tôi dưới sự hướng dẫn

của TS.Trần Minh Tước Tôi xin khẳng định kết quả nghiên cứu trong

khoá luận này không sao chép kết quả của bất cứ tác giả nào khác Nếusai sót tôi xin chịu hoàn toàn trách nhiệm

Xuân Hòa, ngày 06 tháng 5 năm 2014

Sinh viên

Nguyễn Thúy Linh

Trang 4

MỤC LỤC

MỞ ĐẦU 1

Chương 1 MỘT SỐ KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ 2

1 Một số khái niệm của đồ thị 2

1.1 Định nghĩa đồ thị 2

1.2 Các thuật ngữ cơ bản 5

1.3 Một số đồ thị đặc biệt 9

2 Biểu diễn đồ thị 11

2.1 Biểu diễn đồ thị bằng ma trận kề, ma trận trọng số 11

2.2 Ma trận liên thuộc 13

2.3 Ý nghĩa của các cách biểu diễn đồ thị 14

Chương 2 MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ 16

1 Bài toán duyệt đồ thị 16

1.1 Thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search) 16

1.2 Thuật toán tìm kiếm theo chiều rộng BFS (Breath First Search) 20

1.3 Ý nghĩa của bài toán duyệt đồ thị 24

2 Bài toán tìm đường đi ngắn nhất 24

2.1 Thuật toán tìm đường đi ngắn nhất Dijkstra 24

2.2 Thuật toán Floyd 30

2.3 Ý nghĩa của bài toán tìm đường đi ngắn nhất 33

3 Bài toán cây khung cực tiểu 34

3.1 Cây, cây khung và một số tính chất 34

3.2 Bài toán cây khung cực tiểu 35

3.3 Ý nghĩa của bài toán cây khung cực tiểu 42

KẾT LUẬN 44

TÀI LIỆU THAM KHẢO 45

Trang 5

MỞ ĐẦU

Lý thuyết đồ thị là ngành khoa học được phát hiện từ lâu nhưng lại

có nhiều ứng dụng hiện đại Những tư tưởng cơ bản của lý thuyết đồ thịđược đề xuất từ những năm đầu của thế kỉ XVIII bởi nhà toán học lỗi lạcngười Thụy Sĩ Leonhard Euler Chính ông là người đã sử dụng đồ thị đểgiải bài toán nổi tiếng về các cây cầu ở thành phố Königsberg Từ đó lýthuyết đồ thị ngày càng khẳng định được vị trí quan trọng trong việc giảiquyết các bài toán thực tế Lý thuyết đồ thị không những có nhiều ứngdụng trong thực tế mà còn là công cụ đắc lực cho ngành công nghệ thôngtin Nó giúp cho chúng ta mô tả dễ dàng các bài toán phức tạp một cách

cụ thể, để từ đó ta có thể mã hóa các bài toán đó bằng máy tính Tuynhiên, đây là kiến thức hoàn toàn mới, không có trong chương trình họccủa tôi Với mong muốn học hỏi và tìm tòi kiến thức mới nên tôi chọn

đề tài “Những vấn đề cơ bản và một số thuật toán trên đồ thị”.

Nội dung khóa luận của tôi tuy không phải là những kết quả mớitìm được nhưng với tinh thần học hỏi kiến thức mới, hi vọng đề tài này

sẽ đem lại nhiều kiến thức bổ ích cho bản thân và cho độc giả Nội dungkhóa luận gồm hai chương:

Chương 1 Một số kiến thức cơ bản về đồ

thị Chương 2 Một số thuật toán trên đồ thị.

Tuy đã có nhiều cố gắng, song do hạn chế về thời gian và năng lựccủa bản thân, nên khóa luận không tránh khỏi sai sót, rất mong được sựquan tâm góp ý của thầy cô và các bạn

Tôi xin chân thành cảm ơn!

Trang 6

Chương 1 MỘT SỐ KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ

1 Một số khái niệm của đồ thị

1.1 Định nghĩa đồ thị

Ta có thể hình dung đồ thị như tập hữu hạn các đối tượng và nhữngmối liên hệ giữa các đối tượng đó Sơ đồ biểu diễn một mạng máy tính làmột hình ảnh của đồ thị Các đối tượng là các máy tính, mỗi kênhthoại sẽ biểu diễn mối liên hệ giữa hai máy tính trong mạng

Có nhiều loại đồ thị được xây dựng dựa vào cấu trúc của đồ thị, cụthể là tùy thuộc vào sự xác định mối liên hệ giữa các đối tượng Khuônkhổ khóa luận này tôi chỉ đề cập tới đồ thị vô hướng và đồ thị vô hướng

có trọng số

Định nghĩa 1.1 Đồ thị là một cặp G  (V ,

E)

gồm hai tập hợp hữu hạn

V và E thỏa mãn điều kiện E  {{u,v}| u,v V;u  v}

Phần tử của V được gọi là đỉnh, phần tử của E được gọi là cạnh của đồ thị G.

viết gọn hơn là uv (cũng trùng với vu).

Trong định nghĩa này, mỗi phần tử của E là một tập gồm hai phần

tử khác nhau thuộc V Như vậy, các đồ thị được xét ở đây là các đồ thị hữu hạn, không có khuyên và cạnh bội (xem [1]) , gọi tắt là đồ thị.

Một cách trực quan, người ta thường biểu diễn đồ thị bằng sơ đồđỉnh – cạnh như sau:

- Biểu diễn mỗi đỉnh của đồ thị bằng một vòng tròn nhỏ (rỗng hoặcđặc)

- Một cạnh được biểu diễn bởi một đoạn (cong hay thẳng) nối hai

Trang 8

được xác định, ở đây giá trị W E  Giá trị

gọi là trọng số của canh e.

Kí hiệu:G  (V , E, w)

w(e) cho e

E

được

thường thì có một ý nghĩa định lượng nào đấy.

Trang 9

đỉnh v) nếu v e Các đỉnh liên thuộc với một cạnh được gọi là các đầu mút của cạnh đó.

Hai đỉnh u và v của G được gọi là kề nhau nếu uv là một cạnh của G.

Xét đồ thị G được cho trong hình 4:

Trang 10

Xét đồ thị G được cho trong hình 5 ta có

deg(v1 ) = 1, deg(v2 ) = 3, deg(v3 ) = 4, deg(v4 ) = 2

deg(v5 ) = 0, deg(v6 ) = 3, deg(v7 ) = 3

1.2.3 Đường đi, chu trình

đi trong G là một dãy phân biệt các đỉnh v0 ,v1,v2 , ,v n , v i V sao cho

v i v i1 

E

với mọi i  0,1, ,n 1 Khi đó n được gọi là độ dài, đỉnh

v0 được gọi là đỉnh đầu, còn đỉnh

trên.

v n được gọi là đỉnh cuối của đường đi

Trang 11

Hình 6 Đường đi và chu trình trên G.

1.2.4 Liên thông, thành phần liên thông

Định nghĩa 1.7 Đồ thị G = (V, E) được gọi là liên thông nếu với hai

đỉnh u và v khác nhau bất kỳ của G tồn tại một đường đi trong G với đỉnh đầu là u và đỉnh cuối là v

Trong trường hợp ngược lại, đồ thị được gọi là không liên thông.

Trang 12

Như vậy có thể thấy một đồ thị G không liên thông là tập hợp các

Hình 8 Đồ thị G không liên thông.

đỉnh của G Đỉnh v được gọi là đỉnh cắt nếu khi loại bỏ v cùng với các cạnh liên thuộc với nó thì đồ thị nhận được sẽ có số thành phần liên thông lớn

hơn số thành phần liên thông của đồ thị ban

Trang 13

của đồ thị ban đầu.

Đồ thị mà giữa hai đỉnh bất kỳ của nó luôn có cạnh nối được gọi là

Trang 14

Đồ thị G = (V, E) được gọi là hai phía nếu như tập đỉnh V của nó

có thể phân hoạch thành hai tập X và Y sao cho mỗi cạnh của đồ thị chỉ

Trang 15

nối một đỉnh nào đó trong X với một đỉnh nào đó trong Y Khi đó ta sẽ sử

thị hai phía đầy đủ và kí hiệu là

nối với mỗi đỉnh trong Y.

K m,n nếu mỗi đỉnh trong tập X đều được

Trang 17

Ví dụ Giả sử G  (V , E,

w)

là đồ thị có trọng số được biểu diễn bằng

hình 18 Khi đó G được biểu diễn bằng ma trận:

- Đơn giản, trực quan, dễ cài đặt trên máy tính

- Để kiểm tra xem hai đỉnh (i, j) của đồ thị có kề nhau hay không, ta

chỉ việc kiểm tra bằng một phép so sánh:

Trang 18

- Ma trận liên thuộc tốn ít bộ nhớ hơn khi đồ thị có ít cạnh.

- Nhìn vào ma trận ta có thể dễ dàng biết được số lượng cạnh, sốlượng đỉnh và bậc của các đỉnh

Nhược điểm:

- Biểu diễn phức tạp nếu đồ thị có số lượng cạnh nhiều

2.3 Ý nghĩa của các cách biểu diễn đồ thị

Trong những ứng dụng rộng rãi của đồ thị đối với các lĩnh vực khoa

Trang 19

học khác và đối với thực tế cuộc sống, việc biểu diễn đồ thị đóng một vai trò quan trọng.

Biểu diễn đồ thị với sơ đồ đỉnh cạnh được dùng khi muốn mô hìnhhóa nhiều bài toán trong thực tế

Với các loại ma trận (kề, liên thuộc, trọng số) và một số cách biểudiễn khác nữa không được đề cập ở đây (Xem [1]), người ta sẽ môphỏng được đồ thị trong các hệ thống máy tính thuận tiện cho việc lậptrình

Phối hợp cả hai dạng biểu diễn nói trên, việc lập trình giải quyếtnhiều bài toán thực tế sẽ trở nên đơn giản, thuận tiện hơn

Trang 20

Chương 2 MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ

1 Bài toán duyệt đồ thị

Một bài toán quan trọng trong lý thuyết đồ thị là bài toán duyệt đồthị Ta phải duyệt qua tất cả các đỉnh của đồ thị, bắt đầu từ một đỉnh xuấtphát nào đó Vấn đề này đưa về một bài toán liệt kê mà yêu cầu của nó làkhông được bỏ sót và cũng không được lặp lại bất kỳ đỉnh nào Chính vìvậy mà ta phải xây dựng những thuật toán cho phép duyệt các đỉnh mộtcách hệ thống Những thuật toán như vậy gọi là những thuật toán tìmkiếm trên đồ thị Ở đây ta quan tâm đến hai thuật toán cơ bản đó là thuậttoán tìm kiếm theo chiều sâu và thuật toán tìm kiếm theo chiều rộng

1.1 Thuật toán tìm kiếm theo chiều sâu DFS (Depth First Search)

Tư tưởng: Cho G  (V ,

E)

bắt đầu tìm kiếm từ đỉnh v nào đó của đồ thị Sau đó với mỗi đỉnh u tùy

ý kề với v, ta lặp lại quá trình một cách đệ quy đối với u Ở bước tổng quát, giả sử đang xét đỉnh v, nếu như trong số các đỉnh kề với v ta tìm

được một đỉnh nào đó là chưa xét thì ta sẽ xét đỉnh này và bắt đầu từ nó

ta sẽ tiếp tục quá trình tìm kiếm Còn nếu như không có đỉnh nào kề với

v là chưa xét thì ta nói đỉnh này là đã duyệt xong và quay trở lại tiếp tục tìm kiếm từ đỉnh mà trước đó ta đến được đỉnh v Quá trình này có thể

mô tả bởi thủ tục đệ quy sau:

Trang 21

for u Ke(v) do

if Chuaxet[u] then DFS(u);

end; (* đỉnh v đã duyệt xong *)

Khi đó, tìm kiếm theo chiều sâu trên đồ thị tổng quát được thựchiện nhờ thuật toán sau:

BEGIN

END.

(* Initialization *) for v V do Chuaxet[v] := true;

Trang 22

và tiếp tục tìm kiếm các đỉnh tiếp

Trang 24

Khi tất cả các đỉnh đã được đánh dấu là duyệt xong, thuật toán kết

1.2 Thuật toán tìm kiếm theo chiều rộng BFS (Breath First Search)

Tư tưởng: Thuật toán tìm kiếm theo chiều rộng trên đồ thị được xây

dựng dựa trên cơ sở hàng đợi QUEUE Tức là đỉnh được thăm càng sớm

sẽ càng sớm trở thành đã duyệt xong (tức là càng sớm rời khỏi hàng đợi).Một đỉnh sẽ trở thành đã duyệt xong ngay sau khi ta xét xong tất cả cácđỉnh kề với nó Thủ tục có thể mô tả như sau:

Procedure BFS(v);

Trang 25

(* Tìm kiếm theo chiều rộng bắt đầu từ đỉnh v*)

begin

QUEUE := ; QUEUE v; (* Kết nạp v vào QUEUE *) Chuaxet[v]:= false;

end;

end;

end;

QUEUE u; Chuaxet[u] := false;

Khi đó, tìm kiếm theo chiều rộng trên đồ thị được thực hiện nhờthuật toán sau:

Trang 26

Ví dụ Dùng thuật toán BFS duyệt đồ thị sau:

minh họa trong các hình và bảng dưới đây Tương tự như DFS, ở đây tacũng quy định duyệt theo thứ tự từ tăng dần của chỉ số của các cạnh

khoanh tròn Các đỉnh đã duyệt xong được khoanh hình ô vuông

Trang 28

Khi tất cả các đỉnh đã được đánh dấu là duyệt xong, thuật toán kết

1.3 Ý nghĩa của bài toán duyệt đồ thị

Với một đồ thị có nhiều nút, việc kiểm tra tính liên thông của đồthị là bài toán lớn, cần có cách thức để thực hiện nhanh, chính xác Trênđây đã nêu hai cách duyệt đồ thị phổ biến được áp dụng đó là tìm kiếmtheo chiều sâu và tìm kiếm theo chiều rộng giúp người sử dụng dễ dàngkiểm tra những tính chất liên quan đến tính liên thông của đồ thị nhưkiểm tra sự liên thông của một đồ thị, tìm đường đi giữa hai đỉnh củamột đồ thị,…

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

Bài toán: Giả sử G  (V , E,

w)

là một đồ thị có trọng số liên thông

với w : E  Giả sử a, z

V

và L là đường đi từ a tới z Hãy tìm

đường đi ngắn nhất trong số tất cả các đường đi từ a tới z và cho biết độ

dài đó bằng bao nhiêu?

2.1 Thuật toán tìm đường đi ngắn nhất Dijkstra

Trang 29

Tư tưởng: Trong trường hợp trọng số của các cạnh là không âm.

Thuật toán này dựa trên một dãy các bước lặp Một tập đặc biệt các đỉnhđược xây dựng bằng cách cộng thêm một đỉnh trong mỗi bước lặp Thủ

Trang 30

tục gán nhãn được thực hiện trong mỗi lần lặp đó Trong thủ tục gán

nhãn này, đỉnh z được gán nhãn bằng độ dài của đường đi ngắn nhất từ a tới z và chỉ đi qua các đỉnh đã thuộc tập đặc biệt Một đỉnh được thêm

vào tập này là đỉnh có nhãn nhỏ nhất so với các đỉnh chưa có trong tập

đó Thuật toán tìm đường đi ngắn nhất Dijkstra:

Procedure Dijkstra (*G là đồ thị liên thông có trọng số, với

for tất cả các đỉnh v không thuộc S

if L(u) + w(u, v) < L(v) then L(u) := L(u) + w(u, v) {* thêm vào S đỉnh có nhãn nhỏ nhất , và sửa đổi

nhãn của các đỉnh không thuộc S*}

end {* L(z) bằng độ dài đường đi ngắn nhất từ a tới z *}

Trang 31

Ví dụ Dùng thuật toán Dijkstra hãy

2 

v1

 10

Các bước dùng thuật toán Dijkstra tìm độ dài của đường đi ngắn

Tại mỗi bước lặp của thuật toán các đỉnh của tập S được khoanh tròn.

1

v1[0]

 10

Trang 32

[1]v2 

v1[0]

 10

Trang 33

Chưa thăm Đã

thăm

Đangxét

Trang 34

5 1 6

Trang 36

2.2 Thuật toán Floyd

Tư tưởng: Thuật toán Floyd có thể dùng để tìm độ dài của đường đi

ngắn nhất giữa tất cả các cặp đỉnh trong một đồ thị liên thông có trọng

số Giả sử đồ thị có trọng số G = (V, E,w) Từ ma trận trọng số của G,

thuật toán Floyd tính lại các trọng số của cạnh thành độ dài đường đingắn nhất giữa hai đỉnh liên thuộc với cạnh đó Cụ thể, với mọi đỉnh

v j

Thuật toán Floyd được mô tả như sau:

Trang 37

Các bước dùng thuật toán Floyd tìm độ dài của đường đi ngắn nhất

Trang 38

1  

3  

1  

3  

v 4 v 7 v 4 v 5 v 4 v 5 v 7 v 5 v 4 v 7 v 4 v 5 v 5 v 3 v 2 v 4 v 2 v 6 - v2 là đỉnh trung gian, ta có: 1 v3 1 v4 1 v3 1 v4 2 6 2 3 2 6 2 3

v2 v2 v2 v2 3 v1 3 v4 4 v1 4 v3 6 2 6 3 3 2 3 6

v2 v2 v2 v2 v1 v2 v3 v4  v  0 2 4 5 

D2  v2  2 0 6 3 

v  4 6 0 5 

v4 5 3 5 0

- v3 là đỉnh trung gian, ta có: 1 v3 1 v4 1 v3 1 v4 2 6 2 3 2 6 2 3

v2 v2 v2 v2 v1 v2 v3 v4  4 v1 4 v2 v  0 2 4 5 

D3  v2  2 0 6 3 

5 4 5 6

v3 v3 v 

4 6 0 5 

v4 5 3 5 0

- v4 là đỉnh trung gian, ta có: 1 v2 1 v3 2 v1 2 v3 5 3 5 5 32 3 5 3 5

v4 v4 v4 v4

Trang 39

2.3 Ý nghĩa của bài toán tìm đường đi ngắn nhất

Bài toán tìm đường đi ngắn nhất giữa hai đỉnh của một đồ thị liênthông có một ý nghĩa to lớn trong các ứng dụng thực tế Chẳng hạn nhưtrong mạng lưới giao thông đường bộ, đường thủy hay đường không,chọn một hành trình tiết kiệm nhất theo tiêu chuẩn khoảng cách, thờigian hoặc chi phí Bài toán chọn một phương pháp tiết kiệm nhất để đưa

ra một hệ thống động lực từ trạng thái xuất phát đến một trạng thái đích.Trong lĩnh vực Tin học, xét ở một mạng máy tính, nhiều khi người tacần xác định một đường truyền có thời gian truyền tin ngắn nhất giữahai máy nào đó Để thực hiện được điều này có thể mô hình mạng bằng

đồ thị, sau đó vận dụng thuật toán tìm đường đi ngắn nhất để giảiquyết Các thuật toán được xây dựng dựa trên cơ sở lý thuyết đồ thị cóhiệu quả cao nhất để giải quyết các bài toán đó đã được trình bày ở trên.Mỗi thuật toán có những ưu nhược điểm riêng, vì vậy cần lựa chọnthuật toán phù hợp để giải các bài toán đó

Ngày đăng: 03/12/2019, 15:02

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