1. Trang chủ
  2. » Khoa Học Tự Nhiên

Giáo án môn lý thuyết đồ thị

63 891 5
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 đề Giáo án môn lý thuyết đồ thị
Tác giả PGS. TS Đỗ Đức Giỏo, Nguyễn Đức Nghĩa, Nguyễn Tụ Thành, Nguyễn Thanh Hựng
Trường học Đại học Quốc gia Hà Nội
Chuyên ngành Lý thuyết đồ thị
Thể loại Giáo án
Năm xuất bản 2002
Thành phố Hà Nội
Định dạng
Số trang 63
Dung lượng 725,61 KB

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

Nội dung

Đồ thị với các trọng số được gắn cho các cạnh có thể dùng để giải quyết bài toán tìm đường đi ngắn nhất giữa hai thành phố trong một mạng lưới giao thông.. Trong chương này chúng ta sẽ n

Trang 1

v2

v4

e1 e2

e3

e4

€GIÁO ÁN MÔN LÝ THUYẾT ĐỒ THN

Số tiết học: 60 tiết ( 45 tiết lý thuyết + 15 tiết thực hành)

Tài liệu tham khảo:

1) Toán rời rạc, PGS TS Đỗ Đức Giáo, Nhà xuất bản Đại học Quốc gia Hà Nội 2002

2) Toán rời rạc, Nguyễn Đức Nghĩa, Nguyễn Tô Thành, Nhà xuất bản Đại học Quốc gia Hà Nội

2003

3) Giáo trình Lý thuyết đồ thị, Nguyễn Thanh Hùng, Nguyễn Đức Nghĩa

4) Toán học rời rạc ứng dụng trong tin học, Dịch từ Discrete Mathematics and Its Applications, Nhà xuất bản khoa học kỹ thuật

Chương 1

CÁC KHÁI NIỆM CƠ BẢN CỦA LÝ THUYẾT ĐỒ THN

(9 tiết)

1.1 Giới thiệu

Lý thuyết đồ thị là nghành khoa học đã có từ lâu nhưng lại có rất nhiều ứng dụng hiện đại Những

ý tưởng cơ sở ban đầu của nó được đưa ra từ những năm đầu thế kỷ 18 bởi nhà toán học người Thuỵ

Sỹ là Leonhard Euler

Lý thuyết đồ thị được dùng để giải quyết các bài toán thuộc nhiều lĩnh vực khác nhau Chẳng hạn: Dùng mô hình đồ thị để xác định xem hai máy tính trong một mạng máy tính có trao đổi thông tin được với nhau hay không? Đồ thị với các trọng số được gắn cho các cạnh có thể dùng để giải quyết bài toán tìm đường đi ngắn nhất giữa hai thành phố trong một mạng lưới giao thông Chúng ta cũng có thể phân biệt các hợp chất hoá học có cùng công thức phân tử nhưng có cấu trúc khác nhau nhờ vào đồ thị

1.2 Các định nghĩa và tính chất cơ bản

Định nghĩa 1:

Giả sử V là một tập khác rỗng các phần tử nào đó và EVxV (E là tập con của tích đề các VxV) Bộ G = (V, E) được gọi là một đồ thị

Mỗi phần tử vVđược gọi là một đỉnh của đồ thị, V được gọi là tập các đỉnh của đồ thị

Mỗi phần tử e=(u,v)∈Eđược gọi là một cạnh của đồ thị, E được gọi là tập các cạnh của đồ thị

Ví dụ 1:

G = (V = {v1, v2, v3, v4, }, E = {e1 = (v1,v2), e2 = (v1,v3), e3 = (v2,v3), e4 = (v3,v4), })

Như vậy ta có thể hình dung đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh này với nhau

Trang 2

Tây hồ

Hồ gươm CVThủ lệ

TTCPQG

Đồ thị có hướng

Đồ thị vô hướng

v1 v2 v3 e1 e2 e3

b) Hai cạnh được gọi là kề nhau nếu giữa chúng có đỉnh chung

c) Nếu e = (v,v) là một cạnh của đồ thị thì e được gọi là một khuyên Trong trường hợp này đồ thị được gọi là giả đồ thị

Ví dụ 3:

v1 và v2 được gọi là hai đỉnh kề nhau, e1 được gọi là cạnh liên thuộc hai đỉnh v1 và v2

e1 và e2 được gọi là hai cạnh kề nhau, e3 được gọi là một khuyên

Định nghĩa 3:

a) Nếu mỗi cạnh e=(u,v)∈Elà không phân biệt thứ tự của các đỉnh u và v, (tức là từ u tới v không kể hướng) thì ta nói đồ thị G = (V,E) là đồ thị vô hướng

b) Nếu mỗi cạnh e=(u,v)∈Ecó phân biệt thứ tự của các đỉnh u và v, (tức là từ u tới v khác với

từ v tới u) thì ta nói đồ thị G = (V,E) là đồ thị có hướng Cạnh của đồ thị có hướng còn được gọi là cung

Ví dụ 4:

Trang 3

R5 R1

R3 R2

Trang 4

Bậc của đồ thị vô hướng G = (V,E) được kí hiệu là deg(G) và được tính deg(G) = ∑

V v

v)

deg(

Ví dụ 9:

Với đồ thị trên ta có:

deg(v5) = 0, v5 được gọi là đỉnh cô lập

deg(v4) = 1, v4 được gọi là đỉnh treo

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

Định nghĩa 9:

Cho đồ thị có hướng G = (V,E) Với v V∈ là một đỉnh của đồ thị, ta ký hiệu deg-(v) là số các cung vào của đỉnh v, deg+(v) là số các cung ra của đỉnh v Khi đó deg-(v) được gọi là bậc vào của đỉnh v, deg+(v) được gọi là bậc ra của đỉnh v và bậc của đỉnh v là deg(v) = deg-(v) + deg+(v)

Nếu deg+(v) = deg-(v) = 0 thì v được gọi là đỉnh cô lập, nếu deg+(v) = 0, deg-(v) = 1 hoặc deg+(v)

= 1, deg-(v) = 0 thì v được gọi là đỉnh treo

Bậc của đồ thị có hướng G = (V,E) được kí hiệu là deg(G) và được tính deg(G) =

deg-(v3) = 1, deg+(v3) = 0, đỉnh v3 được gọi là đỉnh treo

deg-(v4) = deg+(v4) = 0, đỉnh v4 được gọi là đỉnh cô lập

Trang 5

Giả sử u,v∈V và e = (u,v)∈E

Nhận xét: Giả sử u≠v Khi đó nếu xoá cạnh (cung) e thì bậc của đồ thị sẽ giảm đi 2 Nếu ta xoá tất

cả các cạnh có dạng như trên thì đồ thị còn lại chỉ gồm các đỉnh cô lập hoặc các đỉnh có khuyên Tại mỗi đỉn u có khuyên, nếu ta xoá khuyên thì bậc của đồ thị cũng sẽ giảm đi 2 Như vậy nếu ta xoá một cạnh hoặc một khuyên thì bậc của đồ thị giảm đi 2 và sau khi xoá hết tất cả các cạnh và các khuyên của đồ thị thì bậc của đồ thị còn lại là bằng 0

Từ nhận xét trên, hiên nhiên ta có đẳng thức deg(G) = 2|E| (đpcm)

j k

i

v

1 1

)deg(

)deg( = 2|V| = 2n

i

k

i i i

n

k j

n

k j j j

v

22)

j k

i

v

1 1

)deg(

)

k j j k

i i k

i

n

k j j

Vì bậc của đồ thị bằng 10.5 = 50, mà 2.e = 50 Suy ra e = 25

1.3 Đường và chu trình trong đồ thị

Định nghĩa 10:

Cho đồ thị G = (V,E) Một đường đi trong đồ thị là một dãy vi1ei1vi2ei2 vijeij vikeikvik+1, Trong

đó vij V∈ là các đỉnh, eij∈E là các cạnh sao cho với ∀j∈{1,2, ,k}thì đỉnh vij và đỉnh vij+1 là hai đỉnh kề nhau Đường đi đó xuất phát từ đỉnh vij và kết thúc tại đỉnh vik+1(hoặc ngược lại)

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

Chu trình trong đồ thị là một đường đi có đỉnh xuất phát và đỉnh kết thúc trùng nhau

Ví dụ 12:

Trong đồ thị trên ta co:

Trang 6

a,b,e,d là một đường đi có độ dài 3

c,e,b,a,d là một đường đi có độ dài 4

a,d,c,a là một chu trình có độ dài 3

d,a,b,c,d là một chu trình có độ dài 4

a,b,d không phải là một đường đi

a,d,e,a không phải là một chu trình

Ví dụ 13:

Trong đồ thị trên ta có:

a,c,d là một đường đi có độ dài 2

c,d,a,b là một đường đi có độ dài 3

a,b,d,a là một chu trình có độ dài 3

a,c,d,b,d,a là một chu trình có độ dài 5

a,c,b không phải là một đường đi

a,b,c,a không phải là một chu trình

a,b,c,d là một đường đi đơn trong đồ thị

d,a,b,c,d là một chu trình đơn trong đồ thị

a,b,c,d,a là một chu trình sơ cấp của đồ thị

a,b,c là một đường sơ cấp

Trang 7

Theo giả thiết deg(vij)≥2 nên phải tồn tại ít nhất một đỉnh vi0 và một cạnh nối đỉnh vi1 và vi0 Đỉnh vi0 phải trùng với một đỉnh, chẳng hạn là đỉnh vij trong đường w, vì nếu không trùng thì đường w không phải là đường sơ cấp dài nhất, điều này trái với giả thiết w là đường có độ dài lớn nhất Điều này chứng tỏ phải tồn tại một chu trình trong đồ thị đang xét Vì các đường đang xét là các đường sơ cấp, cho nên chu trình này là chu trình sơ cấp Định lý đã được chứng minh

1.4 Đồ thị con, đồ thị bộ phận và đồ thị liên thông

Trang 8

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

a) Đồ thị G được gọi là liên thông mạnh nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó b) Đồ thị G được gọi là liên thông yếu nếu đồ thị vô hướng tương ứng với nó là đồ thị liên thônng

Ví dụ 17:

Đồ thị liên thông mạnh

Đồ thị liên thông yếu

Định nghĩa 15:

Cho đồ thị G = (V,E), H = (W,F) là đồ thị con của G

Nếu H là đồ thị liên thông thì H được gọi là thành phần liên thông của G

Trang 9

Để nhận được Gn từ Gn-1 ta thêm tuỳ ý một cạnh liên thuộc với một cạnh của Gn-1 và thêm một đỉnh khác liên thuộc với cạnh mới đó nếu đỉnh đó chưa có trong Gn-1, điều này làm được vì G là liên thông G sẽ nhận được sau khi e cạnh được ghép thêm vào các đồ thị tạo ra trước Gọi rn, en, và vntương ứng là số miền, số cạnh, số đỉnh của biểu diễn phẳng của Gn sinh ra Ta sẽ chứng minh bằng quy nạp biểu thức r = e – v +2

Với G1 thì biểu thức r1 = e1 – v1 + 2 là đúng, vì r1 = 1, e1 = 1, v1 = 2, điều này được thể hiện như hình sau:

Giả sử ta có rn = en – vn + 2

Gọi (an+1, bn+1) là cạnh gộp vào Gn để được Gn+1 Khi đó có hai khả năng xảy ra

Trường hợp thứ nhất hai đỉnh an+1, bn+1 đã thuộc Gn Khi đó nó phải ở trên biên của miền chung

R nếu không thì không thể gộp cạnh (an+1,bn+1) vào Gn mà không có các cạnh cắt nhau (Gn+1 là phẳng) Cạnh mới này sẽ chia miền R thành hai miền con Do đó rn+1 =rn+1, en+1 = en+1, vn+1 = vn

Do vậy ta có công thức rn+1 = en+1 – vn+1 +2 Trường hợp này được minh hoạ như sau:

Trường hợp thứ hai, một trong hai đỉnh của cạnh chưa thuộc Gn Ta giả sử an+1 thuộc Gn còn bn+1

không thuộc Trong trường hợp này cạnh thêm (an+1, bn+1) không sinh ra miền mới nào vì bn+1 phải nằm trong miền có an+1 và ở trên biên của nó (Gn+1 phẳng) Do đó rn+1 = rn Nhưng en+1 = en+1 và

vn+1 = vn+1 Mỗi vế của công thức không đổi nên công thức vẫn đúng, hay rn+1=en+1 – vn+1 +2 Trường hợp này được minh hoạ như sau:

Vậy với mọi n ta đều có rn = en – vn +2 Vì đồ thị gốc là Ge nhận được sau khi thêm e cạnh, định lý được chứng minh

Ví dụ 19:

Cho đơn đồ thị G phẳng liên thông có 20 đỉnh, mỗi đỉnh đều có bậc là 3 Hỏi biểu diễn phẳng của

đồ thị này chia mặt phẳng thành bao nhiêu miền?

Giải:

Ta có v = 20, deg(G) = v.3 = 20.3 = 60 = 2.e Suy ra e = 30

Áp dụng công thức Euler : r = e – v +2 = 12 Vậy mặt phẳng bị chia thành 12 miền

G1

R

Trang 11

a b c

d e f

v3

v2 v1

e4 e3

e2 e1

Hãy tìm số đỉnh, số cạnh, bậc ra, bậc vào và bậc của mỗi đỉnh trong các đồ thị vô hướng cho dưới đây Xác định các đỉnh cô lập và đỉnh treo Xác định bậc của đồ thị và kiểm tra xem nó có bằng hai lần số cạnh không?

Trang 13

Chương 2

CÁC PH ƯƠNG PHÁP BIỂU DIỄN ĐỒ THN

(6 tiết)

2.1 Biểu diễn bằng hình học

Cho đồ thị G = (V, E), khi đó ta có thể biểu diễn G bằng phương pháp hình học như sau:

Mỗi v∈V ta đặt tương ứng với một điểm trong mặt phẳng, điểm đó gọi là đỉnh của đồ thị

a) Trường hợp G là đồ thị vô hướng, nếu e = (u,v) ∈V thì trong mặt phẳng, các đỉnh u, v được nối với nhau bởi một cạnh không có hướng Nếu e = (u,u) ∈V thì tại đỉnh u sẽ có một khuyên b) Trường hợp G là đồ thị có hướng, Nếu e = (u,v) ∈V thì trong mặt phẳng sẽ có một cung có hướng đi từ u đến v Nếu u = v thì tại đỉnh u sẽ có một khuyên có hướng vào chính nó

2.2 Biểu diễn bằng ma trận kề (liền kề), ma trận trọng số

Xét đơn đồ thị vô hướng G = (V,E), với tập đỉnh V = {v1, v2, ,vn}, tập cạnh E = {e1, e2, , em}

Trang 14

Các tính chất của ma trận kề của đồ thị đơn vô hướng:

a) Ma trận kề của đơn đồ thị vô hướng n đỉnh là một ma trân vuông đối xứng cấp nxn

b) Tổng các phần tử trên hàng i (cột j) của ma trận kề chính bằng bậc của đỉnh i (đỉnh j)

Trang 16

Trong rất nhiều ứng dụng của lý thuyết đồ thị, mỗi cạnh e = (u,v) của đồ thị được gắn một con số

c nào đó (c(e), c(u,v)) gọi là trọng số của cạnh e Đồ thị có các cạnh được gán trọng số gọi là đồ thị

có trọng số Trong trường hợp đồ thị có trọng số, để biểu diễn đồ thị thay vì dùng ma trận kề ta dùng

ma trận trọng số như sau:

C = cij, i,j=1, 2, , n

Với

cij = c(eij)) nếu eij ∈E

cij = θ nếu eij ∉E , i = 1,2, ,n; j = 1,2, ,n

Trong đó số θ tuỳ từng trường hợp cụ thể, có thể được đặt bằng một trong các giá trị sau: 0, - ∞, +∞

Trang 17

2.3 Biểu diễn bằng ma trận liên thuộc đỉnh - cạnh

Giả sử G = (V,E) là một đồ thị vô hướng với tập đỉnh V = {v1,v2, , vn}, và tập các cạnh E = {e1,e2, ,em} Khi đó ma trận liên thuộc đỉnh - cạnh A = aij, i = 1,2, n, j = 1,2, m của nó được xác định như sau:

Aij = 1 nếu cạnh ej nối với đỉnh vi

Aij = 0 nếu cạnh ej không nối với đinh vi, i = 1,2, ,n, j = 1,2, ,m

Trang 18

e4

v4 e1

v5

e2 e3

e5 e8

e7 e6 v1

e1 e2 e3 e4 e5 e6

v1 1 1 0 0 0 0 v2 0 0 1 1 0 1 v3 0 0 0 0 1 1 v4 1 0 1 0 0 0 v5 0 1 0 1 1 0

Ma trận liên thuộc cũng có thể được dùng để biểu diễn đồ thị có cạnh bội và khuyên

Ví dụ 10:

Cho đồ thị G như sau

Khi đó ma trận liên thuộc đỉnh cạnh của G là

Ma trận liên thuôc đỉnh - cạnh còn rất hay được sử dụng trong các bài toán liên quan đến đồ thị

có hướng mà trong đó phải xử lý các cung của đồ thị

Cho G = (V,E) , V = {v1,v2, ,vn}, E = {e1,e2, ,em}, là đồ thị có hướng Khi đó ma trận liên thuộc đỉnh - cạnh A = aij , i = 1,2, ,n; j = 1,2, , m của G được xác định như sau:

aij = 1 nếu đỉnh vi là đỉnh đầu của cung ej

aij =-1 nếu đỉnh vi là đỉnh cuối của cung ej

aij = 0 nếu đỉnh vi không là đầu mút của cung ej

e1 e2 e3 e4 e5 e6 e7 e8

v1 1 1 1 0 0 0 0 0 v2 0 1 1 1 0 1 1 0 v3 0 0 0 1 1 0 0 0 v4 0 0 0 0 0 0 1 1 v5 0 0 0 0 1 1 0 0

Trang 19

Cho ma trận G như sau

Ma trận liên thuộc cạnh - đỉnh của G như sau

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

Xét đồ thị G = (V,E), với |V| = n, |E| = m Để biểu diễn đồ thị theo phương pháp danh sách cạnh (cung) chúng ta sẽ lưu trữ 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ị sẽ tương ứng với hai biến Dau[e] và Cuoi[e] Như vậy để lưu trữ đồ thị ta cần sử dụng 2m đơn vị ô nhớ Trong trường hợp đồ thị có trọng số ta phải cần thêm m đơn vị ô nhớ nữa để lưu trữ trọng số của các cạnh

Trang 20

v1

v3 v2

v3

v2

v4 v5 v1

Ví dụ 13:

Cho đồ thị có hướng G như sau

Khi đó danh sách cạnh của G là

Dau Cuoi v1 v2 v1 v3 v2 v3 v3 v2

2.5 Biểu diễn bằng danh sách kề

Trong rất nhiều vấn đề ứng dụng của lý thuyết đồ thị, cách biểu diễn đồ thị dưới dạng danh sách

kề là cách biểu diễn thích hợp được sử dụng Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị

chúng ta lưu trữ danh sách các đỉnh kề với nó Để làm được điều này chúng ta có thể sử dụng cấu

trúc mảng các mảng (mảng hai chiều) hoặc mảng các danh sách liên kết

Chúng ta có rất nhiều phương pháp khác nhau để biểu diễn đồ thị, mỗi phương pháp đều có

những ưu và nhược điểm riêng của nó Vì vậy việc lựa chọn phương pháp biểu diễn đồ thị sao cho

việc xử lý nó có hiệu quả nhất phải tuỳ thuộc vào từng bài toán và giải thuật cụ thể

Cài đặt thuật toán: (nhập và hiển thị DS kề của một đồ thị biểu diễn bằng danh sách lien kết:

// -

// Chuong trinh nhap va in ra danh sach ke

Trang 21

// -

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#define VMAX 100 //So dinh toi da cho mot do thi

typedef struct pp //Cau truc tu tro

Trang 22

printf("\n\n 1 Nhap do thi cho boi danh sach ke");

printf("\n\n 2 Hien thi danh sach ke cua do thi");

printf("\n\n 5 Ket thuc chuong trinh");

Trang 23

// Chuong trinh chinh

case '5': //Ket thuc chuong trinh

printf("\n\nXin cam on ban da su dung chuong trinh!");

Trang 24

sự quan tâm nghiên cứu của nhiều nhà khoa học Các thuật toán như vậy được gọi chung là thuật toán tìm kiếm trên đồ thị

Trong chương này chúng ta sẽ nghiên cứu hai thuật toán tìm kiếm cơ bản trên đồ thị là Thuật toán tìm kiếm theo chiều sâu (Depth First Search) và Thuật toán tìm kiếm theo chiều rộng (Breadth First Search) và một vài ứng dụng của hai thuật toán này

Để đơn giản cho việc trình bày, chúng ta sẽ xét đồ thị vô hướng G = (V,E), |V| = n, |E| = m; Đồ thị có hướng sẽ được suy ra một cách tương tự với một vài điểm đặc biệt cần chú ý

Để đánh giá hiệu quả của các thuật toán này, chúng ta chỉ chú trọng đến việc đánh giá độ phức tạp tính toán của thuật toán, tức số phép toán mà thuật toán cần thực hiện trên mọi bộ dữ liệu vào trong trường hợp xấu nhất Độ phức tạp tính toán này được biểu diễn bằng một hàm số của kích thước dữ liệu đầu vào Cụ thể ở đây kích thước của dữ liệu vào sẽ là số đỉnh n và số cạnh m của đồ thị Khi đó độ phức tạp tính toán của thuật toán sẽ được biểu diễn bằng hàm hai biến f(n,m) là số phép toán nhiều nhất mà thuật toán cần phải thực hiện đối với mọi đồ thị n đỉnh, m cạnh

Để so sánh tốc độ tăng của hai hàm nhận giá trị không âm f(n) và g(n) chúng ta sử dụng ký hiệu f(n) = O(g(n)) Điều này có nghĩa tương đương với việc tìm được các hằng số dương C và N sao

cho: f(n)≤Cg(n);∀nN

Trường hợp mở rộng, nếu f(n1 ,n 2 , ,n k ) và g(n 1 ,n 2 , ,n k ) là các hàm biểu diễn, ta viết:

f(n 1 ,n 2 , ,n k )=O(g(n 1 ,n 2 , ,n k )) ⇔Tìm được các hằng số dương C và N sao cho:

f(n 1 ,n 2 , ,n k )Cg(n 1 ,n 2 , ,n k ) với nN

Nếu độ phức tạp tính toán của thuật toán là O(g(n)) thì ta nói là thuật toán có thời gian tính toán

cỡ O(g(n))

3.1 Thuật toán tìm kiếm theo chiều sâu trên đồ thị (Depth First Search)

Ý tưởng chính của thuật toán tìm kiếm theo chiều sâu có thể được hiểu như sau:

Ban đầu tất cả các đỉnh của đồ thị đều chưa được duyệt đến, ta sẽ bắt đầu việc tìm kiếm từ một đỉnh nào đó, giả sử đỉnh đó là v1 Sau đó chọn u là một đỉnh (có thể chọn tuỳ ý) trong danh sách các đỉnh

kề với đỉnh v1 mà chưa được xét đến và lặp lại quá trình tìm kiếm đối với đỉnh u này Ở bước tổng quát, giả sử đang xét đỉnh vk, nếu trong các đỉnh kề với đỉnh vk ta tìm được đỉnh w là đỉnh chưa được duyệt đến thì ta sẽ lại bắt đầu quá trình tìm kiếm từ đó và w sẽ trở thành đỉnh đã được duyệt qua Nếu không còn đỉnh nào kề với đỉnh vk là chưa được duyệt đến thì ta nói rằng đỉnh này đã được duyệt xong và quay lại tiếp tục tìm kiếm từ đỉnh mà trước đó ta đến được đỉnh vk Quá trình cứ tiếp tục như vậy cho đến khi tất cả các đỉnh của đồ thị đã được duyệt hết Như vậy ta có thể hiểu một cách đơn giản là việc tìm kiếm theo chiều sâu trên đồ thị bắt đầu từ đỉnh v được thực hiện trên cơ sở tìm kiếm theo chiều sâu từ các đỉnh chưa được duyệt kề với v

Quá trình này được mô tả bằng thủ tục đệ quy sau:

Procedure DFS(v)

Trang 25

(* Tìm kiếm theo chiều sâu trên đồ thị bắt đầu từ đỉnh v *)

(* Các biến Chuaxet và Ke là biến toàn cuc *)

Dộ phức tạp tính toán của thuật toán được đánh giá như sau:

Trước hết ta thây rằng số phép toán cần thực hiện trong hai chu trình của thuật toán (Hai vòng For ở chương trình chinh) có cỡ là n Còn thủ tục DFS phải thực hiện không quá m lần Do đó tổng

số phép toán cần thực hiện trong các thủ tục này có cỡ là n+m Vậy độ phức tạp tính toán của thuật toán là O(n+m)

Trang 26

43

Ví dụ 2:

Xét đồ thị có hướng cho bởi hình dưới đây (Hình 3.2)

Giả sử danh sách các đỉnh kề của đồ thị được lưu như sau:

3.2 Thuật toán tìm kiếm theo chiều rộng trên đồ thị (Breadth First Search)

Tư tưởng chính của phương pháp tìm kiếm theo chiều rộng trên đồ thị có thể được hiểu như sau: Ban đầu tất cả các đỉnh của đồ thị là chưa được xét đến, ta sẽ bắt đầu việc tìm kiếm từ một đỉnh nào đó của đồ thị, giả sử đỉnh đó là v1 Khi duyệt đỉnh v1 ta sẽ để ý tới tất cả các đỉnh v11, v12, , v1k

Hình 3.2

Trang 27

kề với đỉnh v1 mà chưa được xét đến để ngay sau đó lần lượt xét tới các đỉnh này, khi duyệt đỉnh v1i

(i=1,2, k) ta lại để ý tới tất cả các đỉnh kề với nó mà chưa được xét đến để rồi lần lượt xét đến các đỉnh đó Qua trình sẽ cứ như vậy cho đến khi nào tất cả các đỉnh của đồ thị đều được xét hết Ta có thể hình dung phương pháp này như hình ảnh của vết dầu loang, từ một điểm trên mặt phẳng dầu sẽ loang sang ngay các điểm lân cận với điểm đó

Với phương pháp này ta thấy rằng các đỉnh kề với một đỉnh của đồ thị sẽ được xếp hàng theo thứ

tự để được lần lượt xét tới, do đó chúng ta có thể dùng cơ chế hàng đợi để thực hiện công việc này Thủ tục mô tả phương pháp này như sau

p ⇐ Queue; (* Lấy p ra khỏi Queue *) Xet_dinh(p);

For u ∈Ke(p) do

If Chuaxet[u] then Begin

If Chuaxet[v] then BFS(v);

END

Với thuật toán này ta cũng thấy rằng mỗi lệnh gọi BFS(v) sẽ thực hiện duyệt qua các đỉnh cùng thành phần liên thông với đỉnh v Thủ tục BFS sẽ được thực hiện lần lượt với các đỉnh chưa được duyệt của đồ thị, do đó nó sẽ duyệt hết tất cả các đỉnh của đồ thị Mặt khác, mỗi khi duyệt xong đỉnh

v, biến Chuaxet[v] cũng được gán giá trị False nên mỗi đỉnh sẽ được thăm đúng một lần

Lập luận tương tự thuật toán tìm kiếm theo chiều sâu ta cũng có được độ phức tạp tính toán của thuật toán này là O(n+m)

Ví dụ 3

Xét đồ thị vô hướng cho ở ví dụ 1 (hình 3.1)

Khi đó thứ tự các đỉnh được duyệt theo thuật toán tìm kiếm theo chiều rộng sẽ là:

1 2 3 4 5 8 9 10 6 7

Trang 28

// huong trinh cai dat cac thuat toan tim kiem tren do thi

// Depth First Search - Breadth First Search

// -

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#define VMAX 100 //So dinh toi da cho mot do thi

typedef struct pp //Cau truc tu tro

{

int v;

struct pp *next;

}Link;

Link *Ke[VMAX]; //Danh sach ke cua do thi

int chuaxet[VMAX]; //Bien mang dung de danh dau cac dinh da xet

Link *Queue; //Hang doi luu thu tu cac dinh se xet

int n; //So dinh cua do thi

Trang 31

printf("\n\n 1 Nhap do thi cho boi danh sach ke");

printf("\n\n 2 Hien thi danh sach ke cua do thi");

printf("\n\n 3 Tim kiem theo chieu sau tren do thi");

printf("\n\n 4 Tim kiem theo chieu rong tren do thi");

printf("\n\n 5 Ket thuc chuong trinh");

Ngày đăng: 04/11/2013, 17:15

HÌNH ẢNH LIÊN QUAN

Đồ thị G = (V,E) được gọi là đa đồ thị nếu có ít nhất một cặp đỉnh được nối với nhau bởi hai cạnh  (hai cung) trở lên - Giáo án môn lý thuyết đồ thị
th ị G = (V,E) được gọi là đa đồ thị nếu có ít nhất một cặp đỉnh được nối với nhau bởi hai cạnh (hai cung) trở lên (Trang 3)
Đồ thị G =(V,E) được gọi là đơn đồ thị nếu giữa hai đỉnh bất kỳ của đồ thị được nối với nhau bởi  không quá một cạnh (cung) - Giáo án môn lý thuyết đồ thị
th ị G =(V,E) được gọi là đơn đồ thị nếu giữa hai đỉnh bất kỳ của đồ thị được nối với nhau bởi không quá một cạnh (cung) (Trang 3)
Đồ thị G - Giáo án môn lý thuyết đồ thị
th ị G (Trang 7)
Đồ thị liên thông yếu - Giáo án môn lý thuyết đồ thị
th ị liên thông yếu (Trang 8)
Đồ thị liên thông mạnh - Giáo án môn lý thuyết đồ thị
th ị liên thông mạnh (Trang 8)
Đồ thị cho trong ví dụ 1 là đồ thị Euler còn đồ thị cho trong ví dụ 2 là đồ thị nữa Euler - Giáo án môn lý thuyết đồ thị
th ị cho trong ví dụ 1 là đồ thị Euler còn đồ thị cho trong ví dụ 2 là đồ thị nữa Euler (Trang 45)
Hình 4.4 đồ thị G - Giáo án môn lý thuyết đồ thị
Hình 4.4 đồ thị G (Trang 46)
Đồ thị G1 - Giáo án môn lý thuyết đồ thị
th ị G1 (Trang 47)
Đồ thị vô hướng liên thông G là đồ thị nữa Euler khi và chỉ khi nó có không quá hai đỉnh bậc lẻ - Giáo án môn lý thuyết đồ thị
th ị vô hướng liên thông G là đồ thị nữa Euler khi và chỉ khi nó có không quá hai đỉnh bậc lẻ (Trang 48)
Đồ thị vô hướng đầy đủ G = (V,E) với |V|&gt;2 luôn tồn tại chu trình Hamilton. - Giáo án môn lý thuyết đồ thị
th ị vô hướng đầy đủ G = (V,E) với |V|&gt;2 luôn tồn tại chu trình Hamilton (Trang 52)
Đồ thị không liên thông được gọi là rừng (các thành phần liên thông của đồ thị là các cây của  rừng) - Giáo án môn lý thuyết đồ thị
th ị không liên thông được gọi là rừng (các thành phần liên thông của đồ thị là các cây của rừng) (Trang 53)
Bảng dưới đây cho ta hình ảnh về các bước lặp của thuật toán Prim, đỉnh có dấu * là đỉnh được chọn  để bổ xung vào cây khung và khi đó nhãn của nó không còn bị biến đổi ở các bước tiếp theo nên ta  dùng dấu x để ghi nhận điều đó - Giáo án môn lý thuyết đồ thị
Bảng d ưới đây cho ta hình ảnh về các bước lặp của thuật toán Prim, đỉnh có dấu * là đỉnh được chọn để bổ xung vào cây khung và khi đó nhãn của nó không còn bị biến đổi ở các bước tiếp theo nên ta dùng dấu x để ghi nhận điều đó (Trang 59)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w