Thuật toán tìm kiếm theo chiều sâu

Một phần của tài liệu (LUẬN văn THẠC sĩ) sinh câu miêu tả cho hình ảnh sử dụng mô hình ngôn ngữ (Trang 29 - 30)

Chương 2 PHƯƠNG PHÁP

2.3. Thuật toán tìm kiếm

2.3.2. Thuật toán tìm kiếm theo chiều sâu

Tư tưởng chính của thuật toán: Giả sử chúng ta đang xét trên đồ thị G(V,E). Từ một đỉnh u_V hiện thời nào đó ta sẽ thăm tới đỉnh kề v của u và quá trình được lặp lại đối với đỉnh v. ở bước tổng quát, giả sử hiện tại đang xét đỉnh u0, chúng ta sẽ có hai khả năng sẽ xảy ra:

-Nếu như tồn tại một đỉnh v0 kề với u0 mà chưa được thăm thì đỉnh v0 đó sẽ trở thành đỉnh đã thăm và quá trình tìm kiếm lại bắt đầu từ đỉnh v0 đó.

-Ngược lại, nếu mọi đỉnh kề với u0 đều đã thăm thì ta sẽ quay trở lại đỉnh mà trước đó ta đến đỉnh u0 để tiếp tục quá trình tìm kiếm.

Như vậy, trong quá trình thăm đỉnh bằng thuật toán tìm kiếm theo chiều sâu,

đỉnh được thăm càng muộn càng sớm được duyệt xong ( Cơ chế Last In First Out - Vào sau ra trước ). Do đó, ta có thể tổ chức quá trình này bằng một thủ tục đệ

quy như sau: Procedure DFS(u); Begin Visit(u); Daxet[u]:=True; For v∈ Kề(u do

if not Daxet[v] then DFS(v); End; Và thủ tục duyệt hệ thống toàn bộ đỉnh của đồ thị sẽ là: Procedure Find; Begin Fillchar(Daxet,SizeOf(Daxet),False); For u∈ V do

If not Daxet[u] then DFS(u);

End;

Dễ nhận thấy rằng, mỗi lần gọi DFS(u) thì toàn bộ các đỉnh cùng thành phần liên thông với u sẽđược viếng thăm. Thủ tục Visit(u) là thao tác trên đỉnh u trong từng bài toán đặt ra cụ thể.

Như ta đã biết, tư tưởng của chiến lược tìm kiếm theo độ sâu là, tại mỗi bước, trạng thái được chọn để phát triển là trạng thái được sinh ra sau cùng trong số các trạng thái chờ phát triển. Do đó thuật toán tìm kiếm theo độ sâu là hoàn toàn tương tự như thuật toán tìm kiếm theo bề rộng, chỉ có một điều khác là, ta xử lý danh sách L các trạng thái chờ phát triển không phải như hàng đợi mà như ngăn xếp. Cụ thể là trong bước 2.4 của thuật toán tìm kiếm theo bề rộng, ta cần sửa lại là “Đặt v vào đầu danh sách L”.

Sau đây chúng ta sẽđưa ra các nhận xét so sánh hai chiến lược tìm kiếm mù: • Thuật toán tìm kiếm theo chiều rộng luôn luôn tìm ra nghiệm nếu bài toán có nghiệm. Song không phải với bất kỳ bài toán có nghiệm nào thuật toán tìm kiếm theo độ sâu cũng tìm ra nghiệm! Nếu bài toán có nghiệm và không gian trạng thái hữu hạn, thì thuật toán tìm kiếm theo độ sâu sẽ

tìm ra nghiệm. Tuy nhiên, trong trường hợp không gian trạng thái vô hạn, thì có thể nó không tìm ra nghiệm, lý do là ta luôn luôn đi xuống theo độ

sâu, nếu ta đi theo một nhánh vô hạn mà nghiệm không nằm trên nhánh

đó thì thuật toán sẽ không dừng. Do đó người ta khuyên rằng, không nên áp dụng tìm kiếm theo dộ sâu cho các bài toán có cây tìm kiếm chứa các nhánh vô hạn.

• Độ phức tạp của thuật toán tìm kiếm theo độ sâu[1,2].

Một phần của tài liệu (LUẬN văn THẠC sĩ) sinh câu miêu tả cho hình ảnh sử dụng mô hình ngôn ngữ (Trang 29 - 30)

Tải bản đầy đủ (PDF)

(64 trang)