Tải bản đầy đủ (.ppt) (42 trang)

Giải thuật tìm kiếm trong đồ thị (GIẢI THUẬT SLIDE) (chữ biến dạng do slide dùng font VNI times, tải về xem bình thường)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (273.93 KB, 42 trang )

Giải thuật tìm kiếm
trong đồ thị


Biểu diễn các đồ thị
ª

Hai cách biểu diễn một đồ thị G = (V, E):
– Biểu diễn danh sách kề (adjacency list)
° mảng Adj gồm V danh sách, 1 danh sách cho
mỗi đỉnh trong V.

u  V, Adj[u] chứa tất cả các đỉnh v (hoặc
các con trỏ đến chúng) sao cho (u, v)  E.
– Nhận xét
° Biểu diễn danh sách kề cần (V + E) memory.
(Để đơn giản, ký hiệu V và E thay vì V và
E.)

Ch. 8: Elementary Graph Algorithms

2


Biểu diễn các đồ thị
(tiếp)
– Biểu diễn ma trận kề (adjacency matrix)
° Đánh số đỉnh 1, 2,..., V
° Aa  ma trậnV  V
ij
aij = 1 nếu (i, j)  E


0
trong các trường hợp còn lại.
– Nhận xét
° Biểu diễn ma trận kề cần (V 2) memory.
° Đồ thị thưa (sparse), E  V2: nên dùng
danh sách kề .
° đồ thị đặc (dense), E  V: nên dùng ma
trận kề .

Ch. 8: Elementary Graph Algorithms

3


Biểu diễn một đồ thị vô hướng

Biểu diễn
Một đồ thị vô hướng Biểu diễn
bằng một danh sách
kề một ma trận kề
bằng

Ch. 8: Elementary Graph Algorithms

4


Biểu diễn một đồ thị có hướng

Biểu diễn bằngBiểu diễn bằng một

Một đồ thị có hướng
một danh sách kề
ma trận keà

Ch. 8: Elementary Graph Algorithms

5


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

ª

ª

Tìm kiếm theo chiều rộng (breadth-first-search, BFS)
Một đồ thị G = (V, E)
– một đỉnh nguồn s
– biểu diễn bằng danh sách kề
Mỗi đỉnh u  V
– color[u]: WHITE, GREY, BLACK
– [u]: con trỏ chỉ đến đỉnh cha mẹ (predecessor
hay parent) của u nếu có.
– d[u]: khoảng cách từ s đến u mà giải thuật
tính được.
first-in first-out queue Q
– head[Q]
– thao taùc ENQUEUE(Q, v)
– thao taùc DEQUEUE(Q).

Ch. 8: Elementary Graph Algorithms

6


Tìm kiếm theo chiều rộng
(tiếp)
BFS(G, s)
1 for each vertex u  V[G]  {s}
2
do color[u]  WHITE
3
d[u]  
4
[u]  NIL
5 color[s]  GRAY
6 d[s]  0
7 [s]  NIL

Ch. 8: Elementary Graph Algorithms

7


Tìm kiếm theo chiều rộng
(tiếp)

8 Q  {s}
9 while Q  
10

do u  head[Q]
11
for each v  Adj[u]
12
do if color[v] = WHITE
13
then color[v]  GRAY
14
d[v]  d[u] + 1
15
[v]  u
16
ENQUEUE(Q, v)
17
DEQUEUE(Q)
18
color[u]  BLACK

Ch. 8: Elementary Graph Algorithms

8


Thao tác của BFS lên một đồ thị vô
hướng -- Ví dụ
r

s

t


u



0





(a)

v


w


x


y

r

s

t


u

1

0





(b)

v

1
w


x


y

r

s

t

u


1

0

2



Q

s
0

Q

w r
1 1

Q

(c)

v

1
w

2
x



y

Ch. 8: Elementary Graph Algorithms

r t x
1 2 2
9


Thao tác của BFS lên một đồ thị vô
hướng -- Ví dụ (tiếp)
r

s

t

u

1

0

2



(d)

2
v

1
w

2
x


y

r

s

t

u

1

0

2

3

(e)
2

v

1
w

2
x


y

r

s

t

u

1

0

2

3

Q

t x v

2 2 2

Q

x v u
2 2 3

Q

(fø)
2
v

1
w

2
x

3
y

Ch. 8: Elementary Graph Algorithms

v u y
2 3 3
10


Thao tác của BFS lên một đồ thị vô

hướng -- Ví dụ (tiếp)
r

s

t

u

1

0

2

3

(g)
2
v

1
w

2
x

3
y


r

s

t

u

1

0

2

3

(h)

(i)

2
v

1
w

2
x

3

y

r

s

t

u

1

0

2

3

Q

u y
3 3

Q

y
3

Q
2

v

1
w

2
x



3
y

Ch. 8: Elementary Graph Algorithms

11


Phân tích BFS
ª

Thời gian chạy của BFS là O(V + E ) vì
– mỗi đỉnh của đồ thị được sơn trắng đúng một
lần, do đó
° mỗi đỉnh được enqueued nhiều lắm là một
lần (màu đỉnh  xám) và dequeued nhiều
lắm là một lần (màu đỉnh  đen). Mỗi thao
tác enqueue hay dequeue tốn O(1) thời gian
nên các thao tác lên queue tốn O(V) thời
gian.

° Danh sách kề của mỗi đỉnh được duyệt chỉ
khi đỉnh được dequeued nên nó được duyệt
nhiều lắm là một lần. Vì chiều dài tổng
cộng của các danh sách kề là (E) nên
thời gian để duyệt các danh sách kề là
O(E).

Ch. 8: Elementary Graph Algorithms

12


Đường đi ngắn nhất
ª

ª

Định nghóa
Khoảng cách đường đi ngắn nhất (s, v) (shortest
path distance) từ s đến v
– là số cạnh tối thiểu lấy trong mọi đường đi từ
s đến v, nếu có đường đi từ s đến v.
– là  nếu không có đường đi từ s đến v.
Một đường đi ngắn nhất (shortest path) từ s đến v
là một đường đi từ s đến v có chiều dài laø (s,
v).

Ch. 8: Elementary Graph Algorithms

13



Đường đi ngắn nhất



Lemma 23.1
° G = (V, E) là một đồ thị hữu hướng hay vô hướng,
° một đỉnh s  V bất kỳ
 đối với một cạnh bất kỳ (u, v)  E, ta có (s, v)  (s,
u) + 1.
Chứng minh

u
s

khi u đến được từ s
v

– Nếu u đến được từ s thì v cũng đến được từ s.
Đường đi từ s đến v gồm một đường đi ngắn nhất
từ s đến u và cạnh (u,v) có chiều dài là (s, u) + 1.
Dó nhiên là (s, v)  (s, u) + 1.
– Nếu u không đến được từ s thì (s, u) = , vậy bất
đẳng thức cũng đúng trong trường hợp này.
Ch. 8: Elementary Graph Algorithms

14



Đường đi ngắn nhất



Lemma 23.2
° G = (V, E) là một đồ thị hữu hướng hay vô hướng.
° Chạy BFS lên G từ một đỉnh nguồn s.
 khi BFS xong, có d[v]  (s, v) tại mọi đỉnh v.
Chứng minh
  “Inductive hypothesis”: với mọi v  V, sau mỗi lần một
đỉnh nào đó được đưa vào queue thì d[v]  (s, v).
– “Basis”: sau khi s được đưa vào Q. Kiểm tra  là đúng.
– “Inductive step”: xét một đỉnh trắng v được tìm thấy
khi thăm dò từ một đỉnh u. Từ  có d[u]  (s, u).
• d[v] = d[u] + 1, dòng 14

 (s, u) + 1

 (s, v), Lemma 23.1
• Sau đó v được đưa vào Q và d[v] không thay đổi
nữa. Vậy  được duy trì.

Ch. 8: Elementary Graph Algorithms

15


Đường đi ngắn nhất
Lemma 23.3
° chạy BFS lên một đồ thị G = (V, E)

° trong khi thực thi BFS, queue Q chứa các đỉnh v ,
1
v2 ,…, vr, với v1 là đầu và vr là đuôi của Q.


ª

°

d[vr ]  d[v1] + 1,

°

d[vi ]  d[vi +1 ], với i = 1, 2,…, r  1.

Ví dụ
1

0

2

v1 ... vr

3
Q

2
v


1
w

2
x


y

x v u
2 2 3

Ch. 8: Elementary Graph Algorithms

16


Đường đi ngắn nhất

Chứng minh
° “Induction lên số các thao tác lên queue”
  “Inductive hypothesis”: (xem Lemma) sau mỗi thao
tác lên queue.
– “Basis”: queue chỉ chứa s. Kiểm tra Lemma là
đúng.

Ch. 8: Elementary Graph Algorithms

17



Đường đi ngắn nhất
Chứng minh (tiếp theo)
– “Inductive step”
° Sau khi dequeue một đỉnh bất kỳ. Kiểm tra Lemma
là đúng dùng inductive hypothesis:
– dequeue v1 , đầu mới của queue laø v2
– d[vr]  d[v1] + 1  d[v2] + 1
– các bất đẳng thức còn lại không bị ảnh hưởng
tới.
° Sau khi enqueue một đỉnh bất kỳ. Kiểm tra Lemma
là đúng dùng inductive hypothesis
– enqueue v, nó thành vr + 1 trong queue
– xem code thấy: cạnh (u, v) đang được thăm dò với
u = v1, v1 là đầu của queue, từ đó


d[vr + 1] = d[v] = d[u] + 1 = d[v1] + 1,



d[vr ]  d[v1] + 1 = d[u] + 1 = d[v] = d[vr + 1]



các bất đẳng thức còn lại không bị ảnh hưởng
tới.
Ch. 8: Elementary Graph Algorithms

18



Đường đi ngắn nhất



Định lý 23.4
Tính đúng đắn (correctness) của BFS
° G = (V, E) là một đồ thị hữu hướng hay vô hướng
° chạy BFS lên G từ một đỉnh nguồn s
 trong khi BFS chạy
° BFS tìm ra mọi đỉnh của G tới được từ s
° khi BFS xong, d[v] = (s, v) cho moïi v  V
° đối với mọi đỉnh v  s tới được từ s, một trong các
đường đi ngắn nhất từ s đến v là đường đi ngắn
nhất từ s đến [v] theo sau là cạnh ([v], v).
Chứng minh
° Trường hợp đỉnh v không đến được từ s:
(a) d[v]  (s, v) =  (Lemma 23.2)
(b) Dòng 14 chỉ được thực thi khi v có d[v] < , do đó
nếu không đến được v từ s thì d[v] =  và v sẽ không
được tìm thấy.

Ch. 8: Elementary Graph Algorithms

19


Đường đi ngắn nhất
ª


Chứng minh (tiếp)
Trường hợp đỉnh v đến được từ s: định nghóa Vk = {v  V :
(s, v) = k}
– “Induction on k”.
° “Inductive hypothesis”: với mọi v  V , trong khi thực thi
k
BFS thì có đúng một thời điểm mà
– v được sơn xám
– d[v] được gán trị k
– Nếu v  s thì [v] được gán trị u với u  Vk 1
– v được đưa vào queue Q.
“Basis”: k = 0, kiểm tra là đúng
° “Inductive step”
– Xét v  Vk bất kỳ, k  1.
– Có u  Vk  1 sao cho: u là head của queue và (u, v)
được thăm dò.
Phần còn lại: ...
°

ª

Ch. 8: Elementary Graph Algorithms

20


Cây theo chiều rộng
ª
ª


ª

Cho một đồ thị G = (V, E) và một đỉnh nguồn s.
Sau khi thực thi BFS lên G , dùng trường  trong mỗi đỉnh
để định nghóa một “cây theo chiều rộng”:
– Đồ thị các đỉnh cha mẹ (predecessor subgraph) của G
là đồ thị G= (V , E ) với
°

V = {v  V : [v]  NIL}  {s}

°

E = {([v], v) : v  V {s}}

Định nghóa: Glà một cây theo chiều rộng nếu
– Vgồm các đỉnh trong V đến được từ s , và
– có một đường đi đơn duy nhất từ s đến v cho mọi v 
V , đây cũng là đường đi ngắn nhất từ s đến v
trong G.
Nhận xét:
– Một cây theo chiều rộng là một cây.
– Các cạnh trong E được gọi là các cạnh cây (tree
edges).
Ch. 8: Elementary Graph Algorithms

21



Cây tìm kiếm theo chiều rộng
Lemma 23.5
Khi BFS chạy trên đồ thị vô hướng hay hữu hướng
G = (V, E) thì nó sẽ xây dựng  sao cho G là cây
theo chiều rộng.
Chứng minh
° V gồm các đỉnh trong V đến được từ s: đó là vì

trong dòng 15 của BFS, gán v = u nếu (u, v)  E
và (s, v) < , tức là v đến được từ s.
° Có đường đơn duy nhất từ s đến v cho mọi v  V ,
,
đây cũng là đường đi ngắn nhất từ s đến v
trong G: đó là vì G là một cây nên tồn tại
đường đi đơn duy nhất trong G từ s đến mỗi đỉnh
v trong V. Theo định lý 23.4 đường đi đơn duy
nhất này là đường đi ngắn nhất từ s đến v.

Ch. 8: Elementary Graph Algorithms

22


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

Tìm kiếm theo chiều sâu (depth-first-search, DFS)
Cho một đồ thị G = (V, E)
Sau khi thực thi DFS lên G , dùng trường  trong mỗi

đỉnh để định nghóa một “cây theo chiều sâu”:
– Đồ thị các đỉnh cha mẹ (predecessor subgraph)
do tìm kiếm theo chiều sâu là G= (V, E ) với
°

E = {([v], v) : v  V vaø [v] 

NIL}

– Predecessor subgraph do tìm kiếm theo chiều sâu
tạo nên một rừng theo chiều sâu, gồm nhiều
cây theo chiều sâu.
– Các cạnh trong E được gọi là các cạnh cây.

Ch. 8: Elementary Graph Algorithms

23


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

Trong khi tìm kiếm, các đỉnh được tô màu để
chỉ ra trạng thái của nó
– khởi đầu: màu trắng
– được tìm ra (discovered): màu xám
– hoàn tất, xong (finished): màu đen
– Mỗi đỉnh v được ghi giờ (timestamp), có hai
timestamps
°

d[v]: (discovered) đỉnh v được tìm ra, sơn v xám
°
f [v]: (finished) hoàn tất việc thăm dò từ
đỉnh v, sơn v đen.

Ch. 8: Elementary Graph Algorithms

24


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

ª

Một đồ thị G = (V, E) vô hướng hay có hướng
– biểu diễn dùng danh sách kề
– biến toàn cục time: dùng cho timestamp
Mỗi u  V
– color[u]: WHITE, GREY, BLACK
– d[u]: thời điểm đỉnh u được tìm ra
– f[u]: thời điểm hoàn tất thăm dò từ đỉnh u
 [u]: con trỏ chỉ đến cha mẹ của u.

Ch. 8: Elementary Graph Algorithms

25



×