Đệ quy và không đệ quy

3 707 8
Đệ quy và không đệ quy

Đang tải... (xem toàn văn)

Thông tin tài liệu

Đệ quy và không đệ quy

Duyệt đệ quy không đệ quyNguyễn Duy HàmPhương pháp duyệt là một trong những phương pháp cơ bản để giải các bài toán trong Tin học nhất là bài toán hữu hạn. Một khó khăn của pương pháp này là khi số cấu hình phải duyệt trở lên quá lớn, nếu chúng ta không có phương án duyệt tốt sẽ không đáp ứng tốt được yêu cầu của bài toán.Khi tính toán việc cài đặt phương pháp duyệt ta thường nghĩ ngay tới mô hình quay lui. Quay lui là mô hình có thể đảm bảo cho nguyên tắc không trùng lặp bỏ sót của phương pháp duyệt. Nội dung chính của phương pháp này là từng bước xây dựng dần các thành phần của phương án bằng cách thử các khả năng có thể, nếu tồn tại một phương án chấp nhận được thì tiến hành bước tiếp, nếu không thì lùi lại bước trước đó để xây dựng lại phương án đó với các khả năng chưa được thử. Giả sử một cấu hình là một véc tơ gồm n thành phần (x1, x2, x3, . xn) phải thỏa mãn một điều kiện nào đó. Cụ thể mô hình này như sau:Tại bước thứ i ta đã xây dựng xong i-1 thành phần (x1, x2, . xn-1), bây giờ ta phải xác định thành phần thứ i của phương án. Lần lượt xét tất cả các khả năng của xi, lúc này xảy ra các trường hợp sau:+ Có một khả năng j thoả mãn ->xi được xác định theo khả năng này. Nếu i=n thì ta được một nghiệm. Ngược lại i< tie^?p bu+o+?c ha`nh tie^?n> + Không có một khả năng nào chấp nhận được cho x1 -> lùi lại bước trước để xác định lại thành phần xi-1.Mô hình quay lui được tổ chức theo đệ quy dưới dạng giả mã như sau:Procedure Duyet(i:Type_var);Var j: Type_var;BeginFor j doIf ThenBegin[Ghi nhân trạng thái mới] if i=n then else Duyet(i+1);[Trả lại trạng thái cũ] End;End;Mô hình quay lui được cài đặt theo đệ quy rất hợp lí thuận lợi. Tuy nhiên sử dụng đệ quy dễ gây ra lỗi tràn Stack nhất là những bài toán đòi hỏi phải đệ quy khá sâu, cũng như sử dụng nhiều biến trong thủ tục dệ quy. Mặt khác cơ chế gọi đệ quy của máy tính rất phức tạp mất thời gian. Vì vậy việc tìm ra một cơ chế khác cho mô hình quay lui là cần thiết. Trên thực tế mọi bài toán đệ quy đều có thể đưa về lặp khử đệ quy. Mô hình chung của phương pháp này như sau:i:=1;repeatrepeatj:=<Miền khả năng cho xi>{nếu không tồm tại ->j=0}if j>0 thenbeginif i=n thenbeginj:=0;end;i:=i+1;end;until j=0;i:=i-1;if i>0 then until i=0;Trong thực tế, nhiều bài toán miền xác định của xi phụ thuộc vào các khả năng đã được xác định trước đó của x1, x2, . xi-1, vì vậy khi giải quyết các bài toán cụ thể cần có cách lưu trạng thái của bài toán tại mỗi bước khi xác định thêm được một thành phần, phục vụ cho việc xác định đúng đắn các thành phần tiếp theo, cũng như việc quay lui để xác định lại thành phần đó. . được cài đặt theo đệ quy rất hợp lí và thuận lợi. Tuy nhiên sử dụng đệ quy dễ gây ra lỗi tràn Stack nhất là những bài toán đòi hỏi phải đệ quy khá sâu, cũng. Duyệt đệ quy và không đệ quyNguyễn Duy HàmPhương pháp duyệt là một trong những phương pháp

Ngày đăng: 07/09/2012, 11:41

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan