So sánh thuật toán tìm kiếm chiều sâu, tìm kiếm chiều rộng

Một phần của tài liệu Tiểu luận môn học Lập trình trí tuệ nhân tạo LÝ THUYẾT LẬP TRÌNH HÀM (Trang 29 - 32)

Kiểu tìm kiếm Chiều sâu Chiều rộng

Tính hiệu quả Hiệu quả khi lời giải nằm sâu trong cây tìm kiếm và có một phương án chọn hướng đi chính xác. Hiệu quả của chiến lược phụ thuộc vào phương án chọn hướng đi. Phương án càng kém hiệu quả thì hiệu quả của chiến lược càng giảm. Thuận lợi khi muốn tìm chỉ một lời giải.

Hiệu quả khi lời giải nằm gần gốc của cây tìm kiếm. Hiệu quả của chiến lược phụ thuộc vào độ sâu của lời giải. Lời giải càng xa gốc thì hiệu quả của chiến lược càng giảm. Thuận lợi khi muốn tìm nhiều lời giải.

Lượng bộ nhớ sử dụng để lưu trữ các trạng thái

Chỉ lưu lại các trạng thái chưa xét đến.

Phải lưu toàn bộ các trạng thái.

Trường hợp xấu nhất Vét cạn toàn bộ. Vét cạn toàn bộ. Trường hợp tốt nhất Phương án chọn hướng

đi tuyệt đối chính xác. Lời giải được xác định một cách trực tiếp.

Vét cạn toàn bộ.

Tìm kiếm chiều sâu và tìm kiếm chiều rộng đều là các phương pháp tìm kiếm có hệ thống và chắc chắn tìm ra lời giải. Tuy nhiên, do bản chất là vét cạn nên với những bài toán có không gian lớn thì ta không thể dùng hai chiến lược này được. Hơn nữa, hai chiến lược này đều có tính chất "mù quáng" vì chúng không chú ý đến những thông tin (tri thức) ở trạng thái hiện thời và thông tin về đích cần đạt tới cùng mối quan hệ giữa chúng.

Tên đề tài: Hãy viết chương trình Scheme mô phỏng các hàm đệ quy thực hiện các phép chia (Division) và tìm giá trị căn bậc hai (Square Root)

Bài làm:

(define (sqrt-iter guess x) 02.(if (good-enough? guess x) 03.guess

05.x))) 06.

07.(define (improve guess x) 08.(average guess (/ x guess))) 09.

10.(define (average x y) 11.(/ (+ x y) 2))

12.

13.(define (good-enough? guess x) 14.(< (abs (- (square guess) x)) 15.0.001)) 16. 17.(define (sqrt x) 18.(sqrt-iter 1.0 x)) 19. 20.(sqrt 10) (define (sqrt x) (define (square x) (* x x)) (define (average x y) (/ (+ x y) 2) (define (good-enough? guess)

(< (abs (- (square guess) x)) 0.001)) (define (improve guess)

(average guess (/ x guess))) (define (sqrt-iter guess) (if (good-enough? guess) guess

(sqrt-iter (improve guess)))) (sqrt-iter 1.0))

1. ; divides two numbers until cutoff is reached2. (define (divide n d cutoff) 2. (define (divide n d cutoff)

3. (let ((step 10)) ; any value >1 will work 4. (define (loop i p sum)

5. (letrec ((sp (expt step p))

6. (dp (* d sp))

7. (q (quotient i dp))

8. (r (remainder i dp))

9. (new-sum (+ sum (* q sp))))

10.(cond 11.((= r 0)

12.new-sum)

13.((< (abs r) cutoff) (adsbygoogle = window.adsbygoogle || []).push({});

14.(exact->inexact new-sum))

15.(else

16.(loop r (- p 1) new-sum)))))

17.(loop n 0 0)))

18.

19.; divides two numbers until cutoff is reached -- without quotient/remainder20.(define (divide-2 n d cutoff) 20.(define (divide-2 n d cutoff)

22.(define (loop i ud p sum)

23.(cond24.((= i 0) 24.((= i 0)

25. sum)

26.((< (abs i) cutoff)

27.(exact->inexact sum))

28.(else

29.(letrec ((sp (expt step p))

30.(dp (* ud sp))

31.(new-sum (+ sum sp)))

32.(cond33.((< dp i) 33.((< dp i)

34.(loop (- i dp) ud p new-sum))

35.(else36.(loop i ud (- p 1) sum))))))) 36.(loop i ud (- p 1) sum))))))) 37.(if (< n 0) 38.(if (< d 0) 39.(loop (- 0 n) (- 0 d) 0 0) 40.(- 0 (loop (- 0 n) d 0 0))) 41.(if (< d 0) 42.(- 0 (loop n (- 0 d) 0 0)) 43.(loop n d 0 0)))))

[1] PGS. TS. Phan Huy Khánh – Lập trình hàm - Nhà xuất bản Khoa học kỹ thuật.

[2] PGS. TS. Phan Huy Khánh – Lập trình Logic trong Prolog - Nhà xuất bản Đại học Quốc gia Hà Nội, 2004.

[3] Đinh Mạnh Tường – Trí Tuệ nhân tạo - Nhà xuất bản Khoa học kỹ thuật.

Một phần của tài liệu Tiểu luận môn học Lập trình trí tuệ nhân tạo LÝ THUYẾT LẬP TRÌNH HÀM (Trang 29 - 32)