Trường THPT Trực Ninh B
Chào mừng bạn đã đến với Diễn đàn chính thức trường THPT Trực Ninh B. Nếu chưa có tài khoản, đăng ký ngay! Đã có tài khoản? Vui lòng đăng nhập để tham gia cộng đồng mạng lớn nhất của trường.

Trường THPT Trực Ninh B

Trực Thái, Trực Ninh, Nam Định
 
Trang ChínhTrang Chính  CalendarCalendar  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng Nhập  
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Keywords
division phồng
Latest topics
January 2019
MonTueWedThuFriSatSun
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendarCalendar
Thống Kê
Hiện có 2 người đang truy cập Diễn Đàn, gồm: 0 Thành viên, 0 Thành viên ẩn danh và 2 Khách viếng thăm

Không

Số người truy cập cùng lúc nhiều nhất là 12 người, vào ngày Wed Aug 14, 2013 6:51 pm

Share | 
 

 Quay lui- Ưikipedia

Go down 
Tác giảThông điệp
Chocolate
Thành viên nhiệt tình
Thành viên nhiệt tình


Tổng số bài gửi : 156
Điểm : 3821
Danh vọng : 4
Ngày sinh : 02/10/1995
Ngày tham gia : 24/12/2011
Tuổi : 23
Đến từ : Tp. Trực Cường

Bài gửiTiêu đề: Quay lui- Ưikipedia   Mon Mar 12, 2012 2:20 pm

Giải thích

Các bài toán thỏa mãn ràng buộc là các bài toán có một lời giải đầy đủ, trong đó thứ tự của các phần tử không quan trọng. Các bài toán này bao gồm một tập các biến mà mỗi biến cần được gán một giá trị tùy theo các ràng buộc cụ thể của bài toán. Việc quay lui là để thử tất cả các tổ hợp để tìm được một lời giải. Thế mạnh của phương pháp này là nhiều cài đặt tránh được việc phải thử nhiều tổ hợp chưa hoàn chỉnh, và nhờ đó giảm thời gian chạy.

Phương pháp quay lui có quan hệ chặt chẽ với tìm kiếm tổ hợp
[sửa] Cài đặt

Về bản chất, tư tưởng của phương pháp là thử từng khả năng cho đến khi tìm thấy lời giải đúng. Đó là một quá trình tìm kiếm theo độ sâu trong một tập hợp các lời giải. Trong quá trình tìm kiếm, nếu ta gặp một hướng lựa chọn không thỏa mãn, ta quay lui về điểm lựa chọn nơi có các hướng khác và thử hướng lựa chọn tiếp theo. Khi đã thử hết các lựa chọn xuất phát từ điểm lựa chọn đó, ta quay lại điểm lựa chọn trước đó và thử hướng lựa chọn tiếp theo tại đó. Quá trình tìm kiếm thất bại khi không còn điểm lựa chọn nào nữa.

Quy trình đó thường được cài đặt bằng một hàm đệ quy mà trong đó mỗi thể hiện của hàm lấy thêm một biến và lần lượt gán tất cả các giá trị có thể cho biến đó, với mỗi lần gán trị lại gọi chuỗi đệ quy tiếp theo để thử các biến tiếp theo. Chiến lược quay lui tương tự với tìm kiếm theo độ sâu nhưng sử dụng ít không gian bộ nhớ hơn, nó chỉ lưu giữ trạng thái của một lời giải hiện tại và cập nhật nó.

Để tăng tốc quá trình tìm kiếm, khi một giá trị được chọn, trước khi thực hiện lời gọi đệ quy, thuật toán thường xóa bỏ giá trị đó khỏi miền xác định của các biến có mâu thuẫn chưa được gán (kiểm tra tiến - forward checking) và kiểm tra tất cả các hằng số để tìm các giá trị khác đã bị loại trừ bởi giá trị vừa được gán (lan truyền ràng buộc - constraint propagation).
[sửa] Heuristic

Người ta thường sử dụng một số phương pháp heuristic để tăng tốc cho quá trình quay lui. Do các biến có thể được xử lý theo thứ tự bất kỳ, việc thử các biến bị ràng buộc chặt nhất (nghĩa là các biến có ít lựa chọn về giá trị nhất) thường có hiệu quả do nó tỉa cây tìm kiếm từ sớm (cực đại hóa ảnh hưởng của lựa chọn sớm hiện hành).

Các cài đặt quay lui phức tạp thường sử dụng một hàm biên, hàm này kiểm tra xem từ lời giản chưa đầy đủ hiện tại có thể thu được một lời giải hay không, nghĩa là nếu đi tiếp theo hướng hiện tại thì liệu có ích hay không. Nhờ đó, một kiểm tra biên phát hiện ra các lời giải dở dang chắc chắn thất bại có thể nâng cao hiệu quả của tìm kiếm. Do hàm này hay được chạy, có thể tại mỗi bước, nên chi phí tính toán các biên cần tối hiểu, nếu không, hiệu quả toàn cục của thuật toán sẽ không được cải tiến. Các hàm kiểm tra biên được tạo theo kiểu gần như các hàm heuristic khác: nới lỏng một số điều kiện của bài toán.
[sửa] Ví dụ

Sử dụng chiến lược quay lui dùng để giải bài toán liệt kê các cấu hình. Mỗi cấu hình được xây dựng bằng cách xây dựng từng phần tử, mỗi phần tử được chọn bằng cách thử tất cả các khả năng.
[sửa] Phương pháp

Giả thiết cấu hình cần liệt kê có dạng (x_1, x_2,..., x_n). Khi đó thuật toán quay lui được thực hiện qua các bước sau:

1) Xét tất cả các giá trị x_1 có thể nhận, thử cho x_1 nhận lần lượt các giá trị đó. Với mỗi giá trị thử cho x_1 ta sẽ:

2) Xét tất cả các giá trị x_2 có thể nhận, lại thử cho x_2 nhận lần lượt các giá trị đó. Với mỗi giá trị thử gán cho x_2 lại xét tiếp các khả năng chọn x_3 ... cứ tiếp tục như vậy đến bước:

n) Xét tất cả các giá trị x_n có thể nhận, thử cho x_n nhận lần lượt các giá trị đó, thông báo cấu hình tìm được (x_1, x_2,..., x_n).

[sửa] Mô tả

Thuật toán quay lui có thể được mô tả bằng đoạn mã giả (pseudocode) sau:


{Thủ tục này thử cho x_i nhận lần lượt các giá trị mà nó có thể nhận}

procedure Try(i: Integer);

begin

for (mọi giá trị có thể gán cho x_i) do

begin

<Thử cho x_i := V>;

if (x_i là phần tử cuối cùng trong cấu hình) then

<Thông báo cấu hình tìm được>

else

begin

<Ghi nhận việc cho x_i nhận giá trị V (Nếu cần)>;

Try(i + 1); {Gọi đệ qui để chọn tiếp x_{i+1}}

<Nếu cần, bỏ ghi nhận việc thử x_i := V, để thử giá trị khác>;

end;

end;

end;


(Thuật toán quay lui sẽ bắt đầu bằng lời gọi Try(1)Wink drunken Sleep

_________________
Đi lang thang về miền đơn độc
Với vầng trăng chếnh choáng
Trên yên ngựa mỏi mòn
Về Đầu Trang Go down
Xem lý lịch thành viên http://trucninhb.forumvi.com
 
Quay lui- Ưikipedia
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Trường THPT Trực Ninh B :: Học hỏi :: Tin học-
Chuyển đến