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ị (

49 138 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 49
Dung lượng 0,9 MB

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

Nội dung

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é

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 để em hoà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ếu sai sót tôi xin chịu hoàn toàn trách nhiệm

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ạc ngườ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ải quyết các bài toán thực tế Lý thuyết đồ thị không những có nhiều ứng dụng trong thực tế mà còn là công cụ đắc lực cho ngành công nghệ thông tin 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 Tuy nhiên, đây là kiến thức hoàn toàn mới, không có trong chương trình học củ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ới tì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 dung khó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ực củ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ững mố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ênh thoạ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ôn khổ 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

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

Người ta thường ký hiệu V { , , , }v v1 2 v n ,cạnh e{ , }u v thường 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 7

đỉnh liên thuộc với cạnh đó

Ví dụ Đồ thị G( , )V E với V { , , , }v v1 2 v7 , E{v v1 2, v v 1 5,

2 3, 1 3, 2 6, 2 7, 3 4, 3 5, 3 7, 4 6, 5 6, 6 7}

v v v v v v v v v v v v v v v v v v v v

là đồ thị được biểu diễn trong hình 1

Hình1 Đồ thị G được biểu diễn bằng sơ đồ đỉnh – cạnh

Định nghĩa 1.2 Giả sử G( , )V E là đồ thị không rỗng Đồ thị

( , )

G V E  được gọi là đồ thị con của G, kí hiệu G G , nếu V V

Trang 8

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

Các phần tử của W có thể chỉ đơn thuần là các dữ liệu nhưng E

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

Trang 9

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

1.2.1 Liên thuộc, kề

Định nghĩa 1.4 Giả sử G( , )V E là đồ thị không rỗng với v V

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

Đỉnh v liên thuộc với 1 e e1, 2 Đỉnh v kề với các đỉnh 2 v v v 1, , 3 5

1.2.2 Bậc của đỉnh

Định nghĩa 1.5 Giả sử G( , )V E là đồ thị không rỗng với v là một

Trang 10

Ví dụ

Hình 5 Bậc của các đỉnh trên đồ thị G

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

deg( v ) = 1, deg(1 v ) = 3, deg(2 v ) = 4, deg(3 v ) = 2 4

Từ khái niệm ta có đỉnh v là đỉnh cô lập, 5 v là đỉnh treo 1

Định nghĩa 1.6 Giả sử G( , )V E là đồ thị không rỗng, một đường đi

Trang 11

Một đường đi được gọi là chu trình nếu đỉnh đầu và đỉnh cuối của

Dãy v v v v v là đường đi đơn độ dài 4 1, , , ,2 3 4 6

Dãy v v v v v v là chu trình có độ dài 5 1, , , , ,2 4 6 5 1

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

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

Ví dụ Đồ thị G( , )V E cho trong hình 7 là đồ thị 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

đồ thị liên thông

Mỗi đồ thị liên thông là đồ thị con của G và được gọi là một

thành phần liên thông của đồ thị G đã cho

Ví dụ Đồ thị G( , )V E cho trong hình 8 là đồ thị không liên thông Nó

Trang 13

Định nghĩa 1.9 Giả sử G( , )V E là đồ thị không rỗng với e là một

cạnh của G Cạnh e được gọi là cầu nếu khi loại bỏ nó khỏi đồ 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 đầu

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

đồ thị đầy đủ Đồ thị đầy đủ n đỉnh, ký hiệu là K n

Ví dụ Các đồ thị K K K K cho trong hình 11 dưới đây 2, 3, 4, 5

Trang 14

Đồ thị bánh xe thu được bằng cách bổ sung vào đồ thị vòng C n

một đỉnh mới nối với tất cả các đỉnh của C Kí hiệu n W n

Ví dụ Đồ thị bánh xe W W W W cho trong hình 13 3, 4, 5, 6

1.3.4 Đồ thị hai phía

Đồ 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ử

dụng ký hiệu G =(X Y, E) để chỉ đồ thị hai phía với tập đỉnh X Y

Đồ thị hai phía G = (XY, E) với X = m, Y = n được gọi là đồ

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

Ví dụ Các đồ thị K2,3,K3,3,K được cho trong hình 15 3,4

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: bij≠ 0

Trang 18

- cij= 0 nếu cạnh e jliên thuộc với đỉnh v i

- cij = l nếu cạnh e jliên thuộc với đỉnh v i

Ví dụ Giả sử G = (V, E) là đồ thị với tập đỉnh V { , , , , }v v v v v1 2 3 4 5 và tập cạnh E{ , , , , , }e e e e e e1 2 3 4 5 6 được cho trong hình 18 Khi đó ma trận liên thuộc của đồ thị G là:

- 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ình hó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ểu diễ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ập trì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ết nhiề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ất phá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ột cách hệ thống Những thuật toán như vậy gọi là những thuật toán tìm kiếm trên đồ thị Ở đây ta quan tâm đến hai thuật toán cơ bản đó là thuật toá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)

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

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ực hiện nhờ thuật toán sau:

Thuật toán tìm kiếm theo chiều sâu trên đồ thị G được cho trong

hình 1 được minh họa trong hình dưới đây Các đỉnh đang xét được

khoanh tròn Các đỉnh đã duyệt xong được khoanh hình ô vuông Thứ tự duyệt bằng tay ta có thể tự quy định từ trên xuống dưới, từ trái qua phải hoặc theo sự tăng dần của chỉ số của đỉnh để tránh nhầm lẫn (bỏ sót hay lặp lại đỉnh trong quá trình duyệt) Ở ví dụ này, ta tìm kiếm theo thứ tự tăng dần chỉ số của các đỉnh Thuật toán bắt đầu tìm kiếm từ đỉnh

Trang 22

đỉnh kề với nó là v v v và tiếp tục tìm kiếm đến 2, ,3 4 v , đến 2 v và đến 3 v 5

Sau khi thăm đỉnh v 7 ta thấy không còn đỉnh nào kề với nó nữa, ta

nói v 7 đã duyệt xong, ta quay lại v và tiếp tục tìm kiếm các đỉnh tiếp 5

Trang 24

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

thúc

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:

Trang 25

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

Trang 26

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

Hình 2 Đồ thị G Thuật toán tìm kiếm theo chiều rộng được cho trong hình 2 được

minh họa trong các hình và bảng dưới đây Tương tự như DFS, ở đây ta cũng quy định duyệt theo thứ tự từ tăng dần của chỉ số của các cạnh Thuật toán BFS bắt đầu tìm kiếm từ đỉnh v Các đỉnh đang xét được 1

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 thúc

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ếm theo chiều sâu và tìm kiếm theo chiều rộng giúp người sử dụng dễ dàng kiể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ủa một đồ thị,…

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

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

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ủ

v

Trang 29

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 trọng

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

{* 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 30

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

tìm độ dài của đường đi ngắn

nhất giữa hai đỉnh v và 1 v của 3

đồ thị có trọng số trên hình 3

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

nhất giữa hai đỉnh v 1 và v 3 được biểu diễn như hình và bảng dưới đây

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

Chưa thăm Đã

thăm

Đang xét

Trang 31

Chưa thăm Đã

thăm

Đang xét

Trang 32

28

Chưa thăm Đã

thăm

Đang xét

Trang 33

Vậy đường đi ngắn nhất từ v đến 1 v là 3 v1 v4 v3có độ dài bằng 4

Chưa thăm Đã thăm Đang

Trang 34

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 đi ngắn nhất giữa hai đỉnh liên thuộc với cạnh đó Cụ thể, với mọi đỉnh

k

như đường đi từ v tới i v jđang có lại dài hơn đường đi từ v tới i v cộng k

với đường đi từ v tới k v jthì ta huỷ bỏ đường đi từ v tới i v jhiện thời và coi đường đi từ v tới i v jsẽ là nối của hai đường đi từ v tới i v rồi từ k v tới k

Ví dụ Dùng thuật toán Floyd hãy tìm độ dài của đường đi ngắn nhất

Ngày đăng: 08/05/2018, 09:33

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