You are on page 1of 4

GIẢI BÀI TOÁN BẰNG

NG PHƯƠNG PHÁP T
TÌM KIẾM – TÌM KIẾM

Biu din bài toán
Một bài toán tìm kiếm
m có năm thành ph
phần: Q, S, G, succs, cost

• Q là một tập hữu hạn các trạng ng thái.


• S ⊆ Q một tập khác rỗngng các trtrạng thái ban ñầu.
• G ⊆ Q một tập khác rỗng ng các tr trạng thái ñích.
• succs : Q  P(Q) là mộtt hàm nh 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
“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 một hàm nhận hai trạng thái, s và s’, làm ñầuu vào. Nó trả
tr về chi
phí một bước của việcc di chuy
chuyển từ s ñến s’. Hàm chi phí chỉ ñược ñịnh nh nghĩa
ngh khi s’ là trạng
thái con của s.
Mục ñích của bài toán tìm kiếm:m: Tìm m một ñường ñi (chuỗi các trạng thái nối tiếếp nhau) từ trạng
thái bắt ñầu ñến trạng
ng thái thúc sao cho chi phí ñường ñi là nhỏ nhất.. Chi phí ñường
ñư ñi là tổng
chi phí của các bước chuyểnn (cost) trên ñư
ñường ñi.
Ví dụ cho ñồ thị sau:

Trong ñồ thị trên: các trạng


ng thái là các hình tròn có gán nhãn; ñường ñi giữaa hai trạng
tr thái ñược
ký hiệu bằng cạnh nối có hướng (ñi theo dấu mũi tên); chi phí là giá trị dương ñược
ñư ký hiệu trên
mỗi cạnh.
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 … v.v…


cost(d, b) = 1; cost(d,
d, c) = 8; cost(d,e) = 2; … v.v…

1
ðường ñi có chi phí thấp nhất từ Start ñến Goal:

có tổng chi phí = .

Nếu trong ñồ thị biểu diễnn ccủa bài toán, các ñường ñi ñược biểu diễn bằằng các cạnh vô
hướng (không có ký hiệu mũi ũi ttên) là các ñường ñi hai chiều.
Trong trường hợpp chi phí chuy
chuyển ñổi giữa tất cả các trạng thái ñều bằng
ng nhau
cost(s,s’) = 1 cho tất cả các bi
biến ñổi
Khi ñó ñồ thị ñược gọii là không có chi phí; ñư
ñường ñi có chi phí nhỏ nhất tương ứng
ứ với ñường ñi
có số bước ít nhất.

ðường ñi ngắn nhất là:

có số bước = .

Thut toán tìm kim chi phí ñ


ñng nhtt (Uniform Cost Search – UCS)
Thuật toán
ðịnh nghĩa: Hàng ñợii ưu tiên PQ là ccấu trúc dữ liệu lưu trữ các phần tử ử cùng với ñộ ưu
tiên của nó và khi lấy phầần tử ra khỏi hàng ñợi sẽ căn cứ vào ñộ ưu tiên nhỏ
nh nhất.
Ví dụ: Xét hàng ñợii ưu tiên ggồm 3 phần tử PQ = {(a, 8), (b, 16), (c, 3)}, xét các thao tác
o Lấy một phần tử:: PQ = {(a, 8), (b, 16)} → (c,3)
o Thêm (d, 7) vào PQ: PQ = {(a, 8), (b, 16), (d, 7)}
o Thêm (e, 12) vào PQ: PQ = {(a, 8), (b, 16), (d, 7), (e,12)}
o Lấy một phần tử:: PQ = {(a, 8), (b, 16), (e,12)} → (d, 7)
o Lấy một phần tử:: PQ = {(b, 16), (e,12)} → (a, 8)
o Lấy một phần tử:: PQ = {(b, 16)} → (a, 12)

Cho một trạng thái n, ký hiệu g(n) là tổng chi phí ñường ñi ngắn nhất (hiệnn có) từ
t trạng thái ban
ñầu S ñến trạng thái n. Thuậtt toán UCS ssử dụng một hàng ñợii ưu tiên (Priority Queue – PQ) ñể
lưu trữ và duyệt các trạng
ng thái trên ñư
ñường ñi. Thuật toán dùng thêm một danh sách CLOSE ñể
lưu trữ các trạng thái ñã ñược xétt.

2
Khởi tạo: PQ rỗng, CLOSE rỗng.
ðưa trạng thái ban ñầu START vào PQ, ñộ ưu tiên g(START) = 0
Lặp ñến khi PQ rỗng
Lấy một trạng thái n (có g thấp nhất) ra khỏi PQ. ðưa n vào CLOSE.
Nếu n là trạng thái ñích GOAL thì “ñã tìm thấy”. Dừng thuật toán.
Nếu không, với mỗi trạng thái con n’ chưa xét (n’ không thuộc CLOSE) của n:
Tính ñộ ưu tiên: g(n’) = g(n) + cost(n, n’)
ðưa (n’, g(n’)) vào PQ
Cuối lặp
Thông báo không có ñường ñi từ START ñến GOAL.

Ví dụ biểu diễn thuật toán


Xét bài toán tìm ñường ñi ngắn nhất từ Start ñến Goal ở trên, mô tả các bước thực hiện của thuật
toán UCS:
1. Biểu diễn theo Hàng ñợi ưu tiên: Biểu diễn hàng ñợi ưu tiên và các trạng thái ñược lấy ra
khỏi hàng ñợi ưu tiên theo từng bước cho ñến khi lấy ñược trạng thái ñích

3
2. Biểu diễn trên Cây tìm kiếm: xuất phát từ trạng thái ban ñầu, vẽ nút gốc của cây. Với mỗi
bước lặp của thuật toán, chọn nút ứng với trạng thái có chi phí thấp nhất trên cây bằng
cách ñánh số thứ tự, vẽ các nút con ứng với các trạng thái con của nút ñược chọn. Dừng
khi ñánh số thứ tự trạng thái ñích.

Tính chất
UCS bảo ñảm tìm ñược ñường ñi (nếu có) do ñây là thuật toán vét cạn không gian tìm
kiếm.
Theo tính chất của chi phí ñồ thị (cost > 0), một trạng thái ñược lấy ra khỏi PQ thì ñường
ñi hiện tại có chi phí thấp nhất so với các ñường ñi khác. Do ñó UCS ñảm bảo tìm ñược
ñường ñi ngắn nhất khi lấy trạng thái ñích ra khỏi PQ.
UCS không hiệu quả do phải xét nhiều trạng thái.
Nếu bài toán tìm kiếm không có chi phí (chi phí của các chuyển ñổi ñều bằng nhau), kết
quả của UCS tương tự tìm kiếm theo chiều rộng (Breadth First Search – BFS). (Tự biểu
diễn thuật toán với trường hợp ñồ thị không có chi phí)