1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng lý thuyết đồ thị chương 3 các thuật toán duyệt đồ thị

100 55 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

Tiêu đề Các Thuật Toán Duyệt Đồ Thị
Trường học Đại Học Bách Khoa Hà Nội
Chuyên ngành Lý Thuyết Đồ Thị
Thể loại Bài giảng
Thành phố Hà Nội
Định dạng
Số trang 100
Dung lượng 1,33 MB

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

Nội dung

Các thuật toán duyệt đồ thị• Duyệt đồ thị: Graph Searching hoặc Graph Traversal • Duyệt qua mỗi đỉnh và mỗi cạnh của đồ thị • Ứng dụng: • Cần để khảo sát các tính chất của đồ thị • Là th

Trang 1

Chương 3

Các Thuật Toán Duyệt Đồ Thị

(Graph Searching, Graph Traversal)

Trang 2

Các thuật toán duyệt đồ thị

• Duyệt đồ thị: Graph Searching hoặc Graph Traversal

• Duyệt qua mỗi đỉnh và mỗi cạnh của đồ thị

• Ứng dụng:

• Cần để khảo sát các tính chất của đồ thị

• Là thành phần cơ bản của nhiều thuật toán trên đồ thị

• Hai thuật toán duyệt cơ bản:

• Tìm kiếm theo chiều rộng (Breadth First Search – BFS)

• Tìm kiếm theo chiều sâu (Depth First Search – DFS)

Trang 3

Ý tưởng chung của các thuật toán duyệt

Ý tưởng chung:

• Trong quá trình thực hiện thuật toán, mỗi đỉnh ở một trong ba trạng thái:

• Chưa thăm, thể hiện bởi màu trắng

• Đã thăm (nhưng chưa duyệt xong), thể hiện bởi màu xám

• Đã duyệt xong, thể hiện bởi màu đen

• Trạng thái của đỉnh sẽ biến đổi theo qui tắc sau:

• Thoạt đầu mỗi đỉnh đều có màu trắng (chưa thăm - not visited).

• Đỉnh đã được thăm sẽ chuyển thành màu xám (trở thành đã thăm nhưng chưa duyệt xong - visited).

Khi tất cả các đỉnh kề của một đỉnh v là đã được thăm, đỉnh v sẽ có màu đen (đã

duyệt xong – discovered).

Trang 4

Tìm kiếm theo chiều rộng

Breadth-first Search (BFS)

Trang 5

Tìm kiếm theo chiều rộng

Breadth-first Search

Input: Đồ thị G = (V, E), vô hướng hoặc có hướng

Output:

d[v] = khoảng cách (độ dài của đường đi ngắn nhất) từ s (là

đỉnh xuất phát tìm kiếm) đến v, với mọi v  V d[v] =  nếu v không đạt tới được từ s.

• [v] = u đỉnh đi trước v trong đường đi từ s (là đỉnh xuất phát tìm kiếm) đến v có độ dài d[v].

Xây dựng cây BFS với gốc tại s chứa tất cả các đỉnh đạt tới được

từ s.

Trang 6

BEGIN (* Main Program*)

for v  V do (* Khởi tạo *)

Q: hàng đợi các đỉnh được

thăm

color[v]: màu của đỉnh v d[v]: khoảng cách từ s đến v

[u]: đỉnh đi trước v

Ví dụ: xem minh hoạ

Trang 17

Phân tích BFS

Việc khởi tạo đòi hỏi O(|V|).

• Vòng lặp duyệt

• Mỗi đỉnh được nạp vào và loại ra khỏi hàng đợi một lần,

mỗi thao tác đòi hỏi thời gian O(1) Như vậy tổng thời gian làm việc với hàng đợi là O(V).

• Danh sách kề của mỗi đỉnh được duyệt qua đúng mộtlần Tổng độ dài của tất cả các danh sách kề là (|E|).

O(|V|+|E|),là tuyến tính theo kích thước của danh

sách kề biểu diễn đồ thị.

Trang 18

G= (V, E) là cây và được gọi là cây BFS(s)

Các cạnh trong Eđược gọi là cạnh của cây |E| = |V| - 1.

BFS(s) cho phép đến thăm tất cả các đỉnh đạt tới được từ s.

• Trình tự thăm các đỉnh khi thực hiện BFS(s): Đầu tiên đến thăm

các đỉnh đạt được từ s bởi đường đi qua 1 cạnh, sau đó là thăm các đỉnh đạt được từ s bởi đường đi qua 2 cạnh, …Do đó nếu

đỉnh t được thăm trong BFS(s) thì nó sẽ được thăm theo đường

đi ngắn nhất theo số cạnh

Trang 19

BFS – Loang trên đồ thị

• Thứ tự thăm đỉnh nhờ thực hiện BFS(A)

C B

A

E

D F

C B

Trang 21

Tìm kiếm theo chiều sâu

Depth-first Search (DFS)

Trang 22

Ý tưởng của tìm kiếm theo chiều sâu

Ta sẽ bắt đầu tìm kiếm từ một đỉnh s nào đó của đồ thị Sau đó chọn u là một đỉnh tuỳ ý kề với s và lặp lại quá trình đối với u

Ở bước tổng quát, giả sử ta đang xét đỉnh v:

Nếu như trong số các đỉnh kề với v tìm được đỉnh w là chưa

được thăm thì ta sẽ thăm đỉnh này (nó sẽ trở thành đã thămnhưng chưa duyệt xong) và bắt đầu từ nó ta sẽ tiếp tục quá trìnhtìm kiếm

Nếu như không còn đỉnh nào kề với v là chưa thăm thì ta sẽ nói

rằng đỉ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 (nếu v = s, thì kết thúc

tìm kiếm)

Có thể nói nôm na là tìm kiếm theo chiều sâu bắt đầu từ đỉnh s

được thực hiện trên cơ sở tìm kiếm theo chiều sâu từ tất cả các

đỉnh chưa thăm kề với s.

Trang 23

f [v] = thời điểm kết thúc thăm (v chuyển từ xám sang đen)

• [v] : đỉnh đi trước v – tức là đỉnh mà từ đó ta đến thăm v.

• Sử dụng biến color để ghi nhận trạng thái của các đỉnh như đã mô tả

Trang 24

Depth-First Search: Code

DFS(G)

BEGIN

for v V do

begin color[v] = WHITE;

time = time+1;

d[u] = time;

for v  Ke(u)do

if (color[v]= WHITE)then begin

Trang 25

Phân tích thuật toán DFS

• Mỗi đỉnh được thăm đúng 1 lần, việc thăm mỗi đỉnh đòi hỏi chi

phí thời gian O(1), suy ra thao tác thăm đỉnh đòi hỏi thời gian

O(|V|).

• Vòng lặp trong DFS(u) thực hiện việc duyệt cạnh của đồ thị

• Mỗi cạnh được duyệt qua đúng một lần nếu đồ thị là có hướng và 2 lần nếu đồ thị là vô hướng

Như vậy tổng số lần lặp là O(|E|).

Vậy, thuật toán có thời gian O(|V|+|E|)

Đối với đồ thị, thuật toán có đánh giá như vậy gọi là thuật toán

thời gian tuyến tính

Trang 26

Để hoạt động của thuật toán là xác định, giả thiết rằng ta duyệt các đỉnh trong danh sách kề của một đỉnh theo thứ tự từ điển

Trang 28

h d

c b

Trang 30

d c

b

Trang 31

d c

b

Trang 32

h d

c b

Trang 33

d b

c

Trang 34

h d

c b

Trang 35

h

f

d e

Trang 36

h

Trang 37

f

g

Trang 41

g f

h

Trang 42

f

h

Trang 43

DFS: Các loại cạnh

• DFS(G) sinh ra một cách phân loại các cạnh của đồ thị đã cho:

Cạnh của cây (Tree edge) : là cạnh mà theo đó từ một đỉnh ta đến thăm một đỉnh mới (cạnh đi vào đỉnh trắng)

Các cạnh này tạo thành một rừng gọi là rừng tìm kiếm DFS.

• Các đỉnh được thăm khi thực hiện DFS(v) và các cạnh của cây tạo thành

cây được gọi là cây DFS(v)

Trang 44

Cây DFS(g)

d c

g f

h b

Trang 45

DFS: Cạnh ngược

• DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:

Cạnh của cây (Tree edge): là cạnh mà theo đó từ một đỉnh ta đến thăm mộtđỉnh mới (cạnh đi vào đỉnh trắng)

Cạnh ngược (Back edge): đi từ con cháu (descendent) đến tổ tiên (ancestor)

• Đi vào đỉnh xám (đi từ đỉnh xám đến đỉnh xám)

Trang 46

h b

Trang 47

DFS: Cạnh tới

• DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:

Cạnh của cây (Tree edge): là cạnh mà theo đó từ một đỉnh ta đến thăm mộtđỉnh mới (cạnh đi vào đỉnh trắng)

Cạnh ngược (Back edge): đi từ con cháu (descendent) đến tổ tiên (ancestor)

Cạnh tới (Forward edge): đi từ tổ tiên đến con cháu

• Không là cạnh của cây

• Đi từ đỉnh xám đến đỉnh đen

Trang 48

g f

h e

b

Trang 49

DFS: Cạnh vòng

• DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:

Cạnh của cây (Tree edge): là cạnh mà theo đó từ một đỉnh ta đến thăm mộtđỉnh mới (cạnh đi vào đỉnh trắng)

Cạnh ngược (Back edge): đi từ con cháu (descendent) đến tổ tiên (ancestor)

Cạnh tới (Forward edge): đi từ tổ tiên đến con cháu

Cạnh vòng (Cross edge): cạnh nối hai đỉnh không có quan hệ họ hàng

• Không là cạnh của cây, và giống như cạnh vòng cũng

• Đi từ đỉnh xám đến đỉnh đen

Trang 51

DFS: Các loại cạnh

• DFS tạo ra một cách phân loại các cạnh của đồ thị đã cho:

Tree edge: cạnh theo đó từ một đỉnh đến thăm đỉnh mới (trắng)

Back edge: đi từ con cháu đến tổ tiên

Forward edge: đi từ tổ tiên đến con cháu

Cross edge: giữa hai đỉnh không có họ hàng

không đòi hỏi phân biệt cạnh tới và cạnh vòng

Trang 52

DFS: Các loại cạnh

Định lý: Nếu G là đồ thị vô hướng, thì DFS

chỉ sản sinh ra cạnh của cây và cạnh ngược.

• Chứng minh bằng phản chứng:

• Giả sử có cạnh tới (forward edge)

Nhưng khi đó F phải là cạnh ngược (back

edge)?!

sourc e

F?

Trang 53

DFS: Các loại cạnh

• Giả sử có cạnh vòng (cross edge)

Khi đó C không thể là cạnh vòng bởi vì:

• Nó phải được khảo sát từ một trong hai đỉnhđầu mút và trở thành cạnh của cây trước khiđỉnh kia được khảo sát

• Do đó bức tranh bên là không đúng…cả haicạnh bên không thể là cạnh của cây

source

C?

Trang 54

DFS: Phõn biệt cỏc loại cạnh

của các đỉnh và/hoặc xét các giá trị của các

mốc thời gian d và f.

Khi ta duyệt cạnh e=(u, v) từ đỉnh u, căn cứ vào màu của v ta

cú thể biết cạnh này thuộc loại cạnh nào:

1 WHITE cho biết e là cạnh của cõy

2 GRAY cho biết e là cạnh ngược

3 BLACK cho biết e là cạnh tới hoặc vũng

Trang 56

• Do đó thời gian của DFS là (|V|+|E|)

• Thuật toán trên đồ thị có đánh giá thời gian như trên gọi là thuậttoán thời gian tuyến tính

Trang 58

Bài toán về tính liên thông

Bài toán: Cho đồ thị vô hướng G = (V,E) Hỏi đồ thị gồm

bao nhiêu thành phần liên thông, và từng thành phần liên thông gồm các đỉnh nào?

• Giải: Sử dụng DFS (BFS) :

• Mỗi lần gọi đến DFS (BFS) ở trong chương trình chính sẽ sinh

ra một thành phần liên thông

Trang 59

DFS giải bài toán liên thông

Trang 60

Tìm đường đi

• Bài toán tìm đường đi

Input: Đồ thị G = (V,E) xác định bởi danh sách kề và hai đỉnh s,

t.

Đầu ra: Đường đi từ đỉnh s đến đỉnh t, hoặc khẳng định không tồn tại đường đi từ s đến t.

• Thuật toán: Thực hiện DFS(s) (hoặc BFS(s)).

• Nếu [t] = NIL thì không có đường đi, trái lại ta có đường đi

t  [t]  [[ t]]   s

Trang 61

DFS giải bài toán đường đi

1 color[u]  GRAY (* Thăm đỉnh u *)

2. for each v  Adj[u] do

3. if color[v] = WHITE

5. DFS-Visit(v)

Trang 62

DFS và Chu trình

Định lý: Đồ thị G là không chứa chu trình khi và chỉ khi trong quá

trình thực hiện DFS ta không phát hiện ra cạnh ngược.

• Chứng minh:

Nếu G không chứa chu trình thì rõ ràng không có cạnh ngược (bởi vì sự tồn

tại cạnh ngược dẫn đến phát hiện chu trình)

Nếu không có cạnh ngược thì G là không chứa chu trình (acyclic) Thực vậy

• Không có cạnh ngược tức là chỉ có cạnh của cây

Nếu chỉ có cạnh của cây thì G chỉ là cây hoặc rừng

Vậy G không chứa chu trinh

• Như vậy DFS có thể áp dụng để giải bài toán đặt ra

Trang 63

9. f[u]  time  time + 1

• Cần phải điều chỉnh như thế nào để phát hiện chu trình?

Trang 64

DFS và chu trình

sát hơn nữa được không?

Trong một rừng (đồ thị không chứa chu trình) |E|  |V| - 1

Vì vậy nếu đồ thị có |V| cạnh thì chắc chắn nó chứa chu trình, và thuật toán

kết thúc

Trang 65

Kiểm tra tính liên thông mạnh

Mệnh đề: Đồ thị có hướng G=(V,E) là liên thông mạnh khi và chỉ khi

luôn tìm được đường đi từ một đỉnh v đến tất cả các đỉnh còn lại và luôn tìm được đường đi từ tất cả các đỉnh thuộc V \ {v} đến v.

Trang 66

Thuật toán kiểm tra tính liên thông mạnh

Trang 67

e b

e b

f

Trang 68

Định hướng đồ thị

• Bài toán: Cho đồ thị vô hướng liên thông G= (V, E) Hãy tìm

cách định hướng các cạnh của nó để thu được đồ thị có

hướng liên thông mạnh hoặc trả lời G là không định hướng được.

• Thuật toán định hướng : Trong quá trình thực hiện DFS(G)

định hướng các cạnh của cây DFS theo chiều từ tổ tiên

đến con cháu, các cạnh ngược theo hướng từ con cháu

• Bổ đề G là định hướng được khi và chỉ khi G() là liên

thông mạnh.

Trang 69

e b

f

a

Trang 70

Bài tập chương 1

Đồ thị

Trang 71

Hai đồ thị sau có đẳng cấu với nhau hay không?

71

A

B

C D

Trang 72

Ví dụ:

72

Hai đơn đồ thị G1 và G2 sau là đẳng cấu qua phép đẳng cấu f: a x, bu, cz, dv, ey:

Trang 73

Ví dụ:

• Hai đồ thị G1 và G2 sau đều có 5 đỉnh và 6 cạnh nhưng không đẳng cấu vì trong G1 có một đỉnh bậc 4 mà trong G2 không có đỉnh bậc 4 nào

73

Trang 74

Ví dụ:

• Hai đồ thị G1 và G2 đều có 7 đỉnh, 10 cạnh, cùng có một đỉnh bậc 4, bốn đỉnh bậc 3 và hai đỉnh bậc 2 Tuy nhiên G1 và G2 là không đẳng cấu vì hai

đỉnh bậc 2 của G1 (a và d) là không kề nhau, trong khi hai đỉnh bậc 2 của G2 (y và z) là kề nhau.

74

Trang 75

Ví dụ:

• Hãy xác định xem hai đồ thị sau có đẳng cấu hay không?

75

Trang 76

Ví dụ:

• Tìm đỉnh cắt (đỉnh khớp), cạnh cắt (cạnh cầu)

76

Trang 77

Bài tập

• Hãy vẽ các đồ thị vô hướng được biểu diễn bởi ma trận liền kề sau

77

Trang 78

Bài tập

1 Nêu ý nghĩa của tổng các phần tử trên một hàng (t.ư cột) của một ma trận liền kề đối với một đồ thị vô hướng ? Đối với đồ thị có hướng ?

78

Trang 79

Các đồ thị G và G’ sau có đẳng cấu với nhau không?

79

Trang 80

• Đồ thị nào có kích thước ma trận liên kề bằng ma trận liên

thuộc (vẽ hình minh họa)

80

Trang 81

Bài tập

• Đồ thị vòng có phải là đồ thị phân đôi không? Giải thích, vẽ hình minh họa?

81

Trang 82

Cho biết tên gọi của đồ thị?

82

Trang 83

Vẽ đồ thị với ma trận liền kề dưới đây.

83

Trang 84

Vẽ đồ thị bù của đồ thị sau:

84

Trang 85

Bài tập

• Đồ thị nào là đồ thị Hamilton?

Trang 86

Bài tập

• Đồ thị có chu trình (đường đi) Hamilton?

Trang 87

Bài tập

• Với giá trị nào của m và n các đồ thị phân đôi đầy đủ Km,n có chu trình Hamilton ?

• Vẽ chu trình Hamilton của đồ thị lập phương Q3?

• Tìm đường đi Hamilton trong hình vẽ?

Trang 88

Bài tập

• Trong các đồ thị liên thông sau, đồ thị nào chứa chu trình Hamilton

Trang 89

Cho các đồ thị có hướng như hình vẽ, đồ thị nào có đường đi Euler :

Trang 90

Cho các đồ thị vô hướng như hình vẽ, đồ thị nào

là đồ thị Euler :

Trang 91

Có bao nhiêu đỉnh có bậc chẳn?

Trang 92

Có bao nhiêu đỉnh có bậc lẻ?

Trang 93

• Đồ thị đầy đủ Kn cũng chính là chu trình vòng Cn khi nào?

• Một chu trình vòng Cn là đồ thị phân đôi khi n =?

• Đồ thị nào không có tất cả các đỉnh cùng bậc ?

• Điều kiện nào để đồ thị đầy đủ Kn có đường đi Euler nhưng không có chu trình Euler ?

Trang 94

Trong các cặp đồ thị sau đây, các cặp đồ thị nào đẳng cấu ?

Trang 95

Trong các cặp đồ thị sau đây, các cặp đồ thị nào đẳng cấu ?

Trang 96

Đồ thị nào là đồ thị Euler ?

Trang 97

Tìm chu trình Euler

Trang 98

Bài tập: Xác định tên các đồ thị sau:

Trang 100

Tìm chu trình Euler cho đồ thị sau:

• A, B, C, D, E, F, K, G, K, E, C, J, K, H, J, I, H, I, B, I, A

Ngày đăng: 30/08/2023, 14:43

🧩 Sản phẩm bạn có thể quan tâm