TÌM KIẾM

Tô Hoài Việt Khoa Công nghệ Thông tin Đại học Khoa học Tự nhiên TPHCM thviet@fit.hcmuns.edu.vn

Ref: http://www.cs.cmu.edu/~awm/tutorials

1

Tổng quát

• 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

2

Một bài toán Tìm kiếm

GOAL a

c b

e

START

d f

h

p r

Làm sao để đi từ S đến G? Và số biến đổi có thể ít nhất là gì?

3

q

Hình thức hoá một bài toán tìm kiếm

Q một tập khác rỗng các trạng thái ban đầu. Q một tập khác rỗng các trạng thái đích.

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 (cid:0) • G (cid:0) • 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.

4

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

GOAL

a

c b

START

e d f

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

5

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

GOAL

a

c b

START

e d f

h

ư

h

u

n

n t â m ? g n a o g i ố

à

o t a q n n á

T

?

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

a ạ i s à i t o B y ậ

v

6

Các Bài toán Tìm kiếm

7

Các Bài toán Tìm kiếm

Lập lịch

8-Hậu

Giải toán

8

Gì nữa?

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

GOAL

a

c b

START

e d f

h

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.

9

p r q

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

GOAL a

c b

e

0 bước từ start

START

d f

h

p r

10

q

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

1 bước từ start

GOAL a

c b

e

0 bước từ start

START

d f

h

p r

11

q

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

1 bước từ start

GOAL a

c b

e

0 bước từ start

START

d f

h

p r

2 bước từ start

12

q

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

1 bước từ start

GOAL a

c b

e

0 bước từ start

START

d f

3 bước từ start

h

p r

2 bước từ start

13

q

4 bước từ start

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

1 bước từ start

GOAL a

c b

e

0 bước từ start

START

d f

3 bước từ start

h

p r

2 bước từ start

14

q

Ghi nhớ đường đi!

GOAL

a

c b

START

e d f

h

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”

15

p r q

4 bước từ start

Con trỏ quay lui

1 bước từ start

GOAL a

c b

e

0 bước từ start

START

d f

3 bước từ start

h

p r

2 bước từ start

16

q

4 bước từ start

Con trỏ quay lui

1 bước từ start

GOAL a

c b

e

0 bước từ start

START

d f

3 bước từ start

h

p r

2 bước từ start

17

q

Bắt đầu Tìm kiếm Theo chiều Rộng

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.

18

BFS

GOAL a

c b

e

START

d f

h

V0

p r

19

q

BFS

GOAL a

c b

e

START

d f

h

V0

p r

V1

20

q

BFS

GOAL a

c b

e

START

d f

h

V0

p r

V1

V2

21

q

BFS

GOAL a

c b

e

V3

START

d f

h

V0

p r

V1

V2

22

q

BFS

V4

GOAL a

c b

e

V3

START

d f

h

V0

p r

V1

V2

23

q

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

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).

24

BFS

V4

GOAL a

c b

e

V3

START

d f

h

V0

p r

G i ả s ử k h ô n g gi an t ì m k iế m c h o p h ép bạn lấ y đư ợ c t r ạn g t h á i t r ư ớ c mộ t c á c h th u ận t i ện • B ạn có th ể n gh ĩ a r a mộ t c á c h k h á c c h o B F S ? • Và b ạn c ó th ể k h ô n g c ần ph ả i lư u t rữ V1 n h ữ n g gì t r ư ớ c đó ph ả i lư u ? V2

25

q

Một cách khác: Đi lui

GOAL

a

c b

START

e d f

h

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ữ.

26

p r q

Các chi tiết của Theo Chiều Rộng

• 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?

27

Chi phí chuyển đổi

GOAL

a 2 2

c b 5 5 1 8

START

e 2 d 3 f 9 1 9

h 4 5 1

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.

28

4 3 p r 15 q

Theo Chiều Rộng Chi phí Thấp nhất Vk = tập các trạng thái có thể đến được trong đúng k bước, và với nó đường đi k-bước chi phí thấp nhất thì ít chi phí hơn bất kỳ đường đi nào có độ dài nhỏ hơn k. Nói cách khác, Vk = tập trạng thái mà giá trị của nó thay đổi so với vòng lặp trước. V0 := S (tập trạng thái đầu) previous(START) := NIL g(START) = 0 k := 0 while (Vk khác rỗng) do

Vk+1 := rỗng Với mỗi s trong Vk

Với mỗi s’ trong succs(s)

Nếu s’ chưa được gán nhãn HAY nếu g(s) + Cost(s,s’) < g(s’)

Đặt previous(s’) := s Đặt g(s’) := g(s) + Cost(s,s’) Thêm s’ vào Vk+1

29

k := k+1

Nếu GOAL chưa gán nhãn, thoát FAILURE Nglại xây dựng lời giải theo: Đặt Sk là trạng thái thứ k 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).

Tìm kiếm Chi phí Đồng nhất

• 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

30

Hàng đợi Ưu tiên

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:

khởi tạo PQ rỗng.

Init-PriQueue(PQ)

thêm (thing, value) vào hàng đợi.

Insert-PriQueue(PQ, thing, value)

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.

31

Hàng đợi Ưu tiên

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:

khởi tạo PQ rỗng.

Init-PriQueue(PQ)

thêm (thing, value) vào hàng đợi.

Insert-PriQueue(PQ, thing, value)

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.

Rất rẻ (dù không tuyệt đối, nhưng rẻ không tin được!)

Hàng đợi Ưu tiên có thể được cài đặt theo một cách sao cho 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))

32

Tìm kiếm Chi phí Đồng nhất (UCS) • 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.

33

Bắt đầu UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

PQ = { (S,0) }

34

4 3 p r 15 q

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (S,0) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

35

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (p,1), (d,3) , (e,9) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

36

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (d,3) , (e,9) , (q,16) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

37

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (b,4) , (e,5) , (c,11) , (q,16) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

38

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

r ư ớ c đ ó .

h ơ n 5 t

h 4 1

t ố t đ ã b i ế t t h a y đ ổ i

r a ở đ â y : đ ế n e q u a d n h ấ t t ố t i ê n e

t

3 4 p r 15 q

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

L ư u ý đ i ề u x ả y t h ấ y đ i d n h ậ n đ ế n e đ ư ờ n g đ i v à d o đ ó đ ộ ư u

PQ = { (b,4) , (e,5) , (c,11) , (q,16) }

39

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (e,5) , (a,6) , (c,11) , (q,16) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

40

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (a,6),(h,6),(c,11),(r,14),(q,16) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

41

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (h,6),(c,11),(r,14),(q,16) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

42

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (q,10), (c,11),(r,14) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

43

2. Thêm các con

GOAL

a 2 2

c b 2 5

Lặp UCS Lưu ý điều xảy ra ở đây: • h tìm thấy đường đi mới tới p • nhưng tốn nhiều chi phí hơn đường đi đã biết • và do đó độ ưu tiên của p không đổi

1 8

2 e

START

d 3 f 1 9 9

h 5 4 1

4 3 p r 15 q

PQ = { (q,10), (c,11),(r,14) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

44

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (c,11),(r,13) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

45

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (r,13) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

46

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (f,18) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

47

2. Thêm các con

Lặp UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (G,23) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

48

2. Thêm các con

Câu hỏi: “Dừng ngay khi thấy đích” có là một điều Lặp UCS kiện kết thúc đúng đắn?

GOAL

a 2 2

c b 2 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

4 3 p r 15 q

PQ = { (G,23) }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

49

2. Thêm các con

Kết thúc UCS

GOAL

a 2 2

c b 2 5 1 8

2 e

Chỉ dừng khi đích được lấy ra khỏi hàng đợi ưu tiên. Ngược lại ta có thể bỏ qua đường đi ngắn nhất.

START

d 3 f 1 9 9

h 4 5 1

4 3 p r 15 q

PQ = { }

Lặp: 1. Lấy trạng thái chi phí thấp nhất từ PQ

50

2. Thêm các con

Biểu diễn cây tìm kiếm

GOAL

a

c b

START

e d f

h

ì m k i ế m t t ự n à o ?

c â y t h ứ

t a d u y ệ t t h e o

B F S

C h ú n g v ớ i

51

p r q

Đánh giá một thuật toán tìm kiếm • 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?

52

Đá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

Q kích cỡ hàng đợi ưu tiên trung bình

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu tất cả chuyển đổi cùng chi phí

LCBFS Least Cost

C

C

O(BL)

O(min(N,BL))

BFS

UCS

C

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

53

Tìm kiếm Theo Chiều Sâu

GOAL

a 2 2

c b 5 5 1 8

2 e

START

d 3 f 9 1 9

h 4 5 1

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.

54

4 3 p r 15 q

DFS trên thực tế

GOAL

a

c b

START

e d f

h

p r q

55

START START d START d b START d b a START d c 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

GOAL

a

c b

START

e d f

h

Bạn có thể vẽ thứ tự mà trong đó các node của cây tìm kiếm được viếng?

56

p r q

Thuật toán DFS

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 =

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 =

d (expand = NULL) ,

e (expand = h) ,

57

r (expand = f) >

Thuật toán DFS

Đặt P = 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))

If P rỗng

trả về FAILURE

Else

Thuật toán này có thể được viết gọn dưới dạng đệ qui, dùng ngăn xếp của chương trình để cài đặt P.

trả về đường đi chứa trạng thái của P

58

Đá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

Q kích cỡ hàng đợi ưu tiên trung bình

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu chi phí chuyển đổi như nhau

C

LCBFS Least Cost

C

O(BL)

O(min(N,BL))

BFS

C

UCS

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

DFS

Depth First Search

59

Đá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

Q kích cỡ hàng đợi ưu tiên trung bình

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu chi phí chuyển đổi như nhau

LCBFS Least Cost

C

C

O(BL)

O(min(N,BL))

BFS

UCS

C

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

DFS

K

K

N/A

N/A

Depth First Search

60

Đánh giá một thuật toán

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

N

thừa số phân nhánh trung bình (số con trung bình) (B>1)

B

độ dài đường đi từ start đến goal với số bước (chi phí) ít nhất

L

LMAX

Độ dài đường đi dài nhất từ start đến bất cứ đâu

kích cỡ hàng đợi ưu tiên trung bình

Q

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu chi phí chuyển đổi như nhau

C

LCBFS Least Cost

C

O(BL)

O(min(N,BL))

BFS

C

UCS

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

DFS** Depth First

Search

61

Giả sử Không gian Tìm kiếm không chu trình

Đánh giá một thuật toán

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

N

thừa số phân nhánh trung bình (số con trung bình) (B>1)

B

độ dài đường đi từ start đến goal với số bước (chi phí) ít nhất

L

LMAX

Độ dài đường đi dài nhất từ start đến bất cứ đâu

kích cỡ hàng đợi ưu tiên trung bình

Q

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu chi phí chuyển đổi như nhau

LCBFS Least Cost

C

C

O(BL)

O(min(N,BL))

BFS

UCS

C

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

DFS** Depth First

C

K

O(BLMAX)

O(LMAX)

Search

62

Giả sử Không gian Tìm kiếm không chu trình

Câu hỏi suy nghĩ

A

B

• Làm sao để ngăn ngừa lặp vô tận trong DFS ?

A

B

• Làm sao bắt buộc nó đưa ra một lời giải tối ưu?

C

63

Trả lời 1:

Câu hỏi suy nghĩ

PC-DFS (Path Checking DFS):

A

Don’t recurse on a state if that state is already in B the current path

• Làm sao để ngăn ngừa lặp vô tận trong DFS ?

Trả lời 2:

A

MEMDFS (Memorizing DFS):

• Làm sao bắt buộc nó đưa ra một lời giải tối ưu?

Remember all states B expanded so far. Never C expand anything twice.

64

Trả lời 1:

Câu hỏi suy nghĩ

PC-DFS (Path Checking DFS):

A

B

Không gọi lại một trạng thái nếu nó đã có trên đường đi

• Làm sao để ngăn ngừa lặp vô tận trong DFS ?

Trả lời 2:

A

MEMDFS (Memorizing DFS):

• Làm sao bắt buộc nó đưa ra một lời giải tối ưu?

Nhớ tất cả trạng thái đã B mở. Không bao giờ mở C hai lần.

65

Trả lời 1:

Câu hỏi suy nghĩ

PC-DFS (Path Checking DFS):

A

F

E

B

Không gọi lại một trạng thái nếu nó đã có trên đường đi

S

F

h

D

o P

à

C

n P

S • Làm sao để ngăn D M n M ngừa lặp vô tận ơ S t ố t h trong DFS ? F ? g D n C ô k h i n

ơ

Trả lời 2:

A

D

?

M

MEMDFS (Memoizing DFS):

E

k

o M

à

ó k

ó k S t ố t h C • Làm sao bắt buộc F g n ô h nó đưa ra một lời h i n giải tối ưu?

C

Nhớ tất cả trạng thái đã B mở. Không bao giờ mở C hai lần.

66

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

N

thừa số phân nhánh trung bình (số con trung bình) (B>1)

B

độ dài đường đi từ start đến goal với số bước (chi phí) ít nhất

L

LMAX

Độ dài đường đi không chu trình dài nhất từ start đến bất cứ đâu

kích cỡ hàng đợi ưu tiên trung bình

Q

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu chi phí chuyển đổi như nhau (1)

LCBFS Least Cost

C

C

O(BL)

O(min(N,BL))

BFS

UCS

C

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

PCDFS Path Check

C

K

O(BLMAX)

O(LMAX)

DFS

MEMDFS Memoizing

C

K

O(min(N,BLMAX))

O(min(N,BLMAX))

DFS

(1)

Y

ID

O(BL)

O(L)

Iterative Deepening

67

Lặp Sâu dần

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.

Có thể tốt hơn nhiều so với DFS thông thường. Nhưng chi phí có thể lớn hơn nhiều so với số trạng

thái.

Chi phí là O(b1 + b2 + b3 + b4 … + bL) = O(bL)

68

Đánh giá một thuật toán

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

N

thừa số phân nhánh trung bình (số con trung bình) (B>1)

B

độ dài đường đi từ start đến goal với số bước (chi phí) ít nhất

L

LMAX

Độ dài đường đi không chu trình dài nhất từ start đến bất cứ đâu

kích cỡ hàng đợi ưu tiên trung bình

Q

Thuật toán

Đủ

Tối ưu Thời gian

BFS

C

O(min(N,BL))

Không gian O(min(N,BL))

Breadth First Search

Nếu chi phí chuyển đổi như nhau

LCBFS Least Cost

C

C

O(BL)

O(min(N,BL))

BFS

UCS

C

C

O(log(Q) * min(N,BL)) O(min(N,BL))

Uniform Cost Search

PCDFS Path Check

C

K

O(BLMAX)

O(LMAX)

DFS

MEMDFS Memoizing

C

K

O(min(N,BLMAX))

O(min(N,BLMAX))

DFS

69

Điều cần nắm

• Hiểu thấu đáo về BFS, LCBFS, UCS,

DFS, PCDFS, MEMDFS

• 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.

70