You are on page 1of 71

TRÍ TUỆ NHÂN TẠO

Tìm kiếm Ref: http://www.cs.cmu.edu/~awm/tutorials


Nội dung trình bày
2

 Bài toán tìm kiếm


 Tìm kiếm Theo chiều Rộng
 Tính tối ưu, Tính ñầy ñủ, ðộ phức tạp thời
gian và không gian
 Cây Tìm kiếm
 Tìm kiếm Theo chiều Sâu
Một bài toán Tìm kiếm
3

a GOAL

b c

e
d
f

START h

p r
q

Làm sao ñể ñi từ S ñến G? Và số biến ñổi có thể


ít nhất là gì?
Hình thức hoá một bài toán tìm kiếm
4

Một bài toán tìm kiếm có năm thành phần:


Q , S , G , succs , cost
 Q là một tập hữu hạn các trạng thái.

 S ⊆ Q một tập khác rỗng các trạng thái ban ñầu.

 G ⊆ Q một tập khác rỗng các trạng thái ñích.

 succs : Q  P(Q) là một hàm nhận một trạng thái làm


ñầu vào và trả về kết quả là một tập trạng thái. succs(s)
nghĩa là “tập các trạng thái có thể ñến từ s trong một
bước”.
 cost : Q , Q  Số Dương là một hàm nhận hai trạng
thái, s và s’, làm ñầu vào. Nó trả về chi phí một bước
của việc di chuyển từ s ñến s’. Hàm chi phí chỉ ñược
ñịnh nghĩa khi s’ là trạng thái con của s.
Bài toán Tìm kiếm
5

GOAL
a
b c

e
d f
START
h
p r
q

Q = {START, a , b , c , d , e , f , h , p , q , r , GOAL}
S = { START }
G = { GOAL }
succs(b) = { a }
succs(e) = { h , r }
succs(a) = NULL … etc.
cost(s,s’) = 1 cho tất cả các biến ñổi
Bài toán Tìm kiếm
6

GOAL
a
b c

e
d f
START
h
p r
q

Q = {START, a , b , c , d , e , f , h , p , q , r , GOAL}
S = { START }
G = { GOAL }
succs(b) = { a }
succs(e) = { h , r }
succs(a) = NULL … etc.
cost(s,s’) = 1 cho tất cả các biến ñổi
Các Bài toán Tìm kiếm
7
Các Bài toán Tìm kiếm
8 Lập lịch

8-Hậu

Gì nữa?
Giải toán
Tìm kiếm Theo Chiều Rộng
9

GOAL
a
b c

e
d f
START
h
p r
q

Gán nhãn tất cả trạng thái có thể ñi ñến ñược từ S trong 1 bước nhưng
không thể ñi ñến ñược trong ít hơn 1 bước.
Sau ñó gán nhãn tất cả trạng thái có thể ñi ñến ñược từ S trong 2 bước
nhưng không thể ñi ñến ñược trong ít hơn 2 bước.
Sau ñó gán nhãn tất cả trạng thái có thể ñi ñến ñược từ S trong 3 bước
nhưng không thể ñi ñến ñược trong ít hơn 3 bước.
V.v… ñến khi trạng thái Goal ñược ñi ñến.
Tìm kiếm Theo Chiều Rộng
10

a GOAL

b c

0 bước từ e
start d
f

START h

p r
q
Tìm kiếm Theo Chiều Rộng
11

1 bước từ
start GOAL
a

b c

0 bước từ e
start d
f

START h

p r
q
Tìm kiếm Theo Chiều Rộng
12

1 bước từ
start GOAL
a

b c

0 bước từ e
start d
f

START h

p r
q

2 bước từ
start
Tìm kiếm Theo Chiều Rộng
13

1 bước từ
start GOAL
a

b c

0 bước từ e
start d
f

START h
3 bước từ
start
p r
q

2 bước từ
start
Tìm kiếm Theo Chiều Rộng
14

1 bước từ 4 bước từ
start start
a GOAL

b c

0 bước từ e
start d
f

START h
3 bước từ
start
p r
q

2 bước từ
start
Ghi nhớ ñường ñi!
15

GOAL
a
b c

e
d f
START
h
p r
q

Ngoài ra, khi gán nhãn một trạng thái, ghi nhận trạng thái
trước ñó. Ghi nhận này ñược gọi là con trỏ quay lui. Lịch
sử trước ñó ñược dùng ñể phát sinh con ñường lời giải, khi
ñã tìm ñược ñích:
“Tôi ñã ñến ñích. Tôi thấy mình ñã ở f trước ñó. Và tôi ñã
ở r trước khi tới f. Và…
…. do ñó con ñường lời giải là S  e  r  f  G”
Con trỏ quay lui
16

4 bước từ
1 bước từ start
start GOAL
a

b c

0 bước từ e
start d
f

START h
3 bước từ
start
p r
q

2 bước từ
start
Con trỏ quay lui
17

1 bước từ 4 bước từ
start start GOAL
a

b c

0 bước từ e
start d
f

START h
3 bước từ
start
p r
q

2 bước từ
start
Bắt ñầu Tìm kiếm Theo chiều Rộng
18

Với bất kỳ trạng thái s nào ñã gán nhãn, ghi nhớ:


previous(s) là trạng thái trước ñó trên ñường ñi ngắn nhất từ trạng thái
START ñến s.
Trong vòng lặp thứ k của thuật toán ta bắt ñầu với Vk ñược ñịnh nghĩa
là tập các trạng thái mà từ trạng thái start ñi ñến có ñúng k bước
Sau ñó, trong suốt vòng lặp, ta sẽ tính Vk+1, ñược ñịnh nghĩa là tập các
trạng thái mà từ trạng thái start ñi ñến có ñúng k+1 bước
Chúng ta bắt ñầu với k = 0, V0 = {START} và ñịnh nghĩa,
previous(START) = NULL
Sau ñó ta sẽ thêm vào những trạng thái một bước từ START vào V1.
Và tiếp tục.
BFS
19

a GOAL

b c

e
d
f

START h

V0 p
q
r
BFS
20

a GOAL

b c

e
d
f

START h

V0 p
q
r

V1
BFS
21

a GOAL

b c

e
d
f

START h

V0 p
q
r

V1
V2
Tìm kiếm Chi phí ðồng nhất (UCS)
33

 Một cách tiếp cận BFS ñơn giản về mặt khái


niệm khi có chi phí chuyển ñổi
 Dùng hàng ñợi ưu tiên
PQ = Tập trạng thái ñã ñược mở hay
ñang ñợi mở
ðộ ưu tiên của trạng thái s = g(s) = chi phí
ñến s dùng ñường ñi cho bởi con trỏ
quay lui.
BFS
V4
23

a GOAL

b c

e
d
f V3
START h

V0 p
q
r

V1
V2
Tìm kiếm Theo Chiều Rộng
24

V0 := S (tập các trạng thái ban ñầu)


previous(START) := NIL
k := 0
while (không có trạng thái ñích trong Vk và Vk khác rỗng) do
Vk+1 := tập rỗng
Với mỗi trạng thái s trong Vk
Với mỗi trạng thái s’ trong succs(s)
Nếu s’ chưa gán nhãn
ðặt previous(s’) := s
Thêm s’ vào Vk+1
k := k+1
If Vk rỗng thì FAILURE
Else xây dựng lời giải: ðặt Si là trạng thái thứ i trên ñường ñi ngắn
nhất. ðịnh nghĩa Sk = GOAL, và với mọi i <= k, ñịnh nghĩa Si-1 =
previous(Si).
BFS
V4
25

a GOAL

b c

e
d
f V3
START h

V0 p
q
r

V1
V2
Một cách khác: ði lui
26

GOAL
a
b c

e
d f
START
h
p r
q

Gán nhãn tất cả các trạng thái có thể ñến G trong 1 nhưng không thể ñi
ñến nó trong ít hơn 1 bước.
Gán nhãn tất cả các trạng thái có thể ñến G trong 2 nhưng không thể ñi
ñến nó trong ít hơn 2 bước.
V.v. … cho ñến khi ñến start.
Nhãn “số bước tới ñích” xác ñịnh ñường ñi ngắn nhất. Không cần
thêm thông tin lưu trữ.
Các chi tiết của Theo Chiều Rộng
27

 Vẫn tốt nếu có nhiều hơn một trạng thái ñích.


 Vẫn tốt nếu có nhiều hơn một trạng thái ñầu.
 Thuật toán này hoạt ñộng theo kiểu tiến từ ñầu.
Thuật toán nào hoạt ñộng theo kiểu tiến từ ñầu
ñược gọi là suy diễn tiến.
 Bạn cũng có thể hoạt ñộng quay lui từ ñích.
 Thuật toán này rất giống thuật toán Dijkstra.
 Bất kỳ thuật toán nào hoạt ñộng theo kiểu quay lui
từ ñích ñược gọi là suy diễn lùi.
 Lùi so với tiến. Cái nào tốt hơn?
Chi phí chuyển ñổi
28

a GOAL
2 2
b c
5
5
1 8
2 e
3 d f
9 1 9
START h
1 4 5
p 15 4 3 r
q

Lưu ý rằng BFS tìm ñường ñi ngắn nhất theo số biến ñổi. Nó không
tìm thấy ñường ñi có chi phí ít nhất.
Bây giờ chúng ta xem xét một thuật toán tìm ñường ñi chi phí thấp
nhất. Trong vòng lặp thứ k, với bất kỳ trạng thái S nào, ñặt g(s) là chi
phí ñường ñi có chi phí nhỏ nhất ñến S trong k bước hay ít hơn.
Lặp UCS
42

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (h,6),(c,11),(r,14),(q,16) } 2. Thêm các con
Tìm kiếm Chi phí ðồng nhất
30

 Một cách tiếp cận BFS ñơn giản về mặt khái


niệm khi có chi phí chuyển ñổi
 Dùng hàng ñợi ưu tiên
Hàng ñợi Ưu tiên
31

Một hàng ñợi ưu tiên là một cấu


trúc dữ liệu trong ñó ta có thể
thêm và lấy các cặp (thing, value)
với các toán tử sau:
Init-PriQueue(PQ) khởi tạo PQ rỗng.

Insert-PriQueue(PQ, thing, value) thêm (thing, value) vào hàng ñợi.

Pop-least(PQ) trả về cặp (thing, value) với giá trị thấp nhất, và
loại bỏ nó khỏi hàng ñợi.
Hàng ñợi Ưu tiên
32

Một hàng ñợi ưu tiên là một cấu


trúc dữ liệu trong ñó ta có thể
thêm và lấy các cặp (thing, value)
với các toán tử sau:
Init-PriQueue(PQ) khởi tạo PQ rỗng.

Insert-PriQueue(PQ, thing, value) thêm (thing, value) vào hàng ñợi.

Pop-least(PQ) trả về cặp (thing, value) với giá trị thấp nhất, và
loại bỏ nó khỏi hàng ñợi.

Hàng ñợi Ưu tiên có thể ñược Rất rẻ (dù không


tuyệt ñối, nhưng rẻ
cài ñặt theo một cách sao cho không tin ñược!)
chi phí của các toán tử thêm và
lấy là
O(log(số mục trong hàng ñợi ưu tiên))
Tìm kiếm Chi phí ðồng nhất (UCS)
33

 Một cách tiếp cận BFS ñơn giản về mặt khái


niệm khi có chi phí chuyển ñổi
 Dùng hàng ñợi ưu tiên
PQ = Tập trạng thái ñã ñược mở hay
ñang ñợi mở
ðộ ưu tiên của trạng thái s = g(s) = chi phí
ñến s dùng ñường ñi cho bởi con trỏ
quay lui.
Bắt ñầu UCS
34

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q

PQ = { (S,0) }
Lặp UCS
35

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (S,0) } 2. Thêm các con
ðánh giá một thuật toán
53

N số trạng thái trong bài toán


B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu tất cả
BFS
Search chuyển ñổi O(min(N,BL)) O(min(N,BL))
cùng chi
phí

Least Cost
LCBFS
BFS
C C O(min(N,BL)) O(min(N,BL))
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
DFS trên thực tế
55

a GOAL

b c
START e
START d d f
START d b START h
START d b a
START d c p r
q
START d c a
START d e
START d e r
START d e r f
START d e r f c
START d e r f c a
START d e r f GOAL
Duyệt cây tìm kiếm DFS
56

a GOAL

b c
e
d f
Bạn có thể vẽ thứ START
h
tự mà trong ñó p q r
các node của cây
tìm kiếm ñược
viếng?
Lặp UCS
39

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (b,4) , (e,5) , (c,11) , (q,16) } 2. Thêm các con
Lặp UCS
40

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (e,5) , (a,6) , (c,11) , (q,16) } 2. Thêm các con
Lặp UCS
41

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (a,6),(h,6),(c,11),(r,14),(q,16) } 2. Thêm các con
Lặp UCS
42

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (h,6),(c,11),(r,14),(q,16) } 2. Thêm các con
Lặp UCS
43

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (q,10), (c,11),(r,14) } 2. Thêm các con
Lặp UCS
44

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (q,10), (c,11),(r,14) } 2. Thêm các con
Lặp UCS
45

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (c,11),(r,13) } 2. Thêm các con
Lặp UCS
46

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (r,13) } 2. Thêm các con
Lặp UCS
47

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (f,18) } 2. Thêm các con
Lặp UCS
48

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (G,23) } 2. Thêm các con
Lặp UCS
49

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { (G,23) } 2. Thêm các con
Kết thúc UCS
50

a GOAL
2 2

b c
2
5
1 8
2 e
3 d
f
9 1 9
START
h
1 4 5
4 3
p 15 r
q
Lặp:
1. Lấy trạng thái chi phí
thấp nhất từ PQ
PQ = { } 2. Thêm các con
Biểu diễn cây tìm kiếm
51

a GOAL

b c
e
d f
START
h
p q r
ðánh giá một thuật toán tìm kiếm
52

 Tính ñầy ñủ: thuật toán có bảo ñảm tìm thấy lời giải nếu có
hay không?
 Có bảo ñảm tìm thấy tối ưu? (nó sẽ tìm thấy ñường ñi có chi
phí ít nhất?)
 ðộ phức tạp về thời gian
 ðộ phức tạp về không gian (sử dụng bộ nhớ)
Các biến:
N số trạng thái của bài toán
B nhân tố phân nhánh trung bình (số con trung
bình) (B>1)
L ñọ dài ñường ñi từ start ñến goal với số bước
ngắn nhất

Chúng ta ñánh giá thuật toán như thế nào?


ðánh giá một thuật toán
53

N số trạng thái trong bài toán


B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu tất cả
BFS
Search chuyển ñổi O(min(N,BL)) O(min(N,BL))
cùng chi
phí

Least Cost
LCBFS
BFS
C C O(min(N,BL)) O(min(N,BL))
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
Tìm kiếm Theo Chiều Sâu
54

a GOAL
2 2
b c
5
5
1 8
2 e
3 d
f
9 1 9
START h
1 4 5
p 4 3 r
15 q

Một thay thế cho BFS. Luôn mở từ node vừa mới mở


nhất, nếu nó có bất kỳ node con chưa thử nào. Ngược lại
quay lại node trước ñó trên ñường ñi.
DFS trên thực tế
55

a GOAL

b c
START e
START d d f
START d b START h
START d b a
START d c p r
q
START d c a
START d e
START d e r
START d e r f
START d e r f c
START d e r f c a
START d e r f GOAL
Duyệt cây tìm kiếm DFS
56

a GOAL

b c
e
d f
Bạn có thể vẽ thứ START
h
tự mà trong ñó p q r
các node của cây
tìm kiếm ñược
viếng?
Thuật toán DFS
57

Ta dùng một cấu trúc dữ liệu gọi là Path ñể biểu diễn ñường ñi từ START ñến
trạng thái hiện tại.
VD. Path P = <START, d, e, r >
Cùng với mỗi node trên ñường ñi, chúng ta phải nhớ những con nào ta vẫn
có thể mở. VD. tại ñiểm sau, ta có

P = <START (expand=e , p) ,
d (expand = NULL) ,
e (expand = h) ,
r (expand = f) >
Thuật toán DFS
58

ðặt P = <START (expand = succs(START))>


While (P khác rỗng và top(P) không là ñích)
if mở rộng của top(P) rỗng
then
loại bỏ top(P) (“pop ngăn xếp”)
else
gọi s một thành viên của mở rộng của top(P)
loại s khỏi mở rộng của top(P)
tạo một mục mới trên ñỉnh ñường ñi P:
s (expand = succs(s)) Thuật toán này có thể
ñược viết gọn dưới
If P rỗng dạng ñệ qui, dùng ngăn
xếp của chương trình
trả về FAILURE ñể cài ñặt P.
Else
trả về ñường ñi chứa trạng thái của P
ðánh giá một thuật toán
59

N số trạng thái trong bài toán


B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu chi
BFS
Search phí chuyển O(min(N,BL)) O(min(N,BL))
ñổi như
nhau
Least Cost
LCBFS
BFS
C C O(BL) O(min(N,BL))
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
DFS Depth First
Search
ðánh giá một thuật toán
60

N số trạng thái trong bài toán


B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu chi
BFS
Search phí chuyển O(min(N,BL)) O(min(N,BL))
ñổi như
nhau
Least Cost
LCBFS
BFS
C C O(min(N,BL)) O(min(N,BL))
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
DFS Depth First K K
Search N/A N/A
ðánh giá một thuật toán
61

N số trạng thái trong bài toán


B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
LMAX ðộ dài ñường ñi dài nhất từ start ñến bất cứ ñâu
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu chi
BFS
Search phí chuyển O(min(N,BL)) O(min(N,BL))
ñổi như
nhau

LCBFS Giả sửCKhông


Least Cost C gianO(min(N,B
Tìm L)) O(min(N,BL))
BFS
kiếm không chu trình
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
DFS** Depth First
Search
ðánh giá một thuật toán
62

N số trạng thái trong bài toán


B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
LMAX ðộ dài ñường ñi dài nhất từ start ñến bất cứ ñâu
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu chi
BFS
Search O(min(N,BL))
phí chuyển O(min(N,BL))
ñổi như
Giả sử Không gian Tìm nhau
kiếm
LCBFS Least Cost không
C chu
C trình
O(min(N,BL)) O(min(N,BL))
BFS
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
Depth First
DFS**
Search
C K O(BLMAX) O(LMAX)
Câu hỏi suy nghĩ
63

 Làm sao ñể ngăn A

ngừa lặp vô tận


trong DFS ? B

 Làm sao bắt buộc A


nó ñưa ra một lời
giải tối ưu? B

C
Câu hỏi suy nghĩ
Trả lời 1:
64
PC-DFS (Path Checking DFS):
 Làm sao ñể ngăn Don’t
A
recurse on a state
ngừa lặp vô tận if that state is already in
trong DFS ? B
the current path

 Làm sao bắt buộc Trả lời 2:


A
nó ñưa ra một lời MEMDFS (Memorizing DFS):
giải tối ưu?
Remember
B all states
expanded soC far. Never
expand anything twice.
Câu hỏi suy nghĩ
Trả lời 1:
65
PC-DFS (Path Checking DFS):
 Làm sao ñể ngăn Không
A
gọi lại một trạng
ngừa lặp vô tận thái nếu nó ñã có trên
trong DFS ? ñường ñi
B

 Làm sao bắt buộc Trả lời 2:


A
nó ñưa ra một lời MEMDFS (Memorizing DFS):
giải tối ưu?
Nhớ
B tất cả trạng thái ñã
mở. Không bao C
giờ mở
hai lần.
Câu hỏi suy nghĩ
Trả lời 1:
66
PC-DFS (Path Checking DFS):
 Làm sao ñể ngăn Không
A
gọi lại một trạng
ngừa lặp vô tận thái nếu nó ñã có trên
trong DFS ? ñường ñi
B

 Làm sao bắt buộc Trả lời 2:


A
nó ñưa ra một lời MEMDFS (Memoizing DFS):
giải tối ưu?
Nhớ
B tất cả trạng thái ñã
mở. Không bao C
giờ mở
hai lần.
N số trạng thái trong bài toán
B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
LMAX ðộ dài ñường ñi không chu trình dài nhất từ start ñến bất cứ ñâu
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu chi
BFS
Search phí chuyển O(min(N,BL)) O(min(N,BL))
ñổi như
nhau (1)
Least Cost
LCBFS
BFS
C C O(BL) O(min(N,BL))
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
PCDFS Path Check C K O(BLMAX) O(LMAX)
DFS
MEMDFS Memoizing C K O(min(N,BLMAX)) O(min(N,BLMAX))
DFS
Lặp Sâu dần
68

Lặp sâu dần là một thuật toán ñơn giản


dùng DFS làm một thủ tục con:
1. Thực hiện DFS chỉ tìm các ñường ñi có
ñộ dài 1 hay ít hơn. (DFS bỏ các
ñường ñi nào dài hơn hay bằng 2)
2. Nếu “1” thất bại, thực hiện DFS chỉ tìm
các ñường ñi có ñộ dài 2 hay ít hơn.
3. Nếu “2” thất bại, thực hiện DFS chỉ tìm
các ñường ñi có ñộ dài 3 hay ít hơn.
….và tiếp tục cho ñến khi thành
công.
Chi phí là
O(b1 + b2 + b3 + b4 … + bL) = O(bL)
ðánh giá một thuật toán
N số trạng thái trong bài toán
B thừa số phân nhánh trung bình (số con trung bình) (B>1)
L ñộ dài ñường ñi từ start ñến goal với số bước (chi phí) ít nhất
LMAX ðộ dài ñường ñi không chu trình dài nhất từ start ñến bất cứ ñâu
Q kích cỡ hàng ñợi ưu tiên trung bình

Thuật toán ðủ Tối ưu Thời gian Không gian


Breadth First C Nếu chi
BFS
Search phí chuyển O(min(N,BL)) O(min(N,BL))
ñổi như
nhau (1)
Least Cost
LCBFS
BFS
C C O(BL) O(min(N,BL))
Uniform
UCS
Cost Search
C C O(log(Q) * min(N,BL)) O(min(N,BL))
PCDFS Path Check C K O(BLMAX) O(LMAX)
DFS
MEMDFS Memoizing C K O(min(N,BLMAX)) O(min(N,BLMAX))
DFS
Iterative (1)
ID Deepening
C O(BL) O(L)
ðiều cần nắm
70

 Hiểu thấu ñáo về BFS, LCBFS, UCS, DFS.


 Hiểu các khái niệm về việc liệu một tìm kiếm là
ñầy ñủ, tối ưu hay không, ñộ phức tạp về thời
gian và không gian của nó
 Hiểu ý tưởng ñằng sau lặp sâu dần.
Thắc mắc
71