Tiểu luận giữa kì đề tài phương pháp quay lui

26 84 0
Tiểu luận giữa kì đề tài  phương pháp quay lui

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC QUỐC GIA HÀ NỘI ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA : TOÁN – CƠ – TIN HỌC -  - TIỂU LUẬN GIỮA KÌ Mơn học : Thiết kế đánh giá thuật toán Đề Tài : Phương pháp quay lui Giáo viên hướng dẫn : Nguyễn Thị Hồng Minh Sinh viên thực hiên : Lê Thị Ngọc Ánh Nguyễn Hồng Chương Lê Thị Hiến Trần Thị Thu Hằng (4/9) Lớp : K54A2 Toán Tin Hà Nội : / 2012 LỜI NĨI ĐẦU Trong q trình nghiên cứu giải vấn đề – toán, người ta đưa nhận xét sau: Có nhiều tốn chưa tìm cách giải theo kiểu thuật tốn khơng biết có tồn thuật tốn hay khơng Có nhiều tốn có thuật tốn để giải khơng chấp nhận thời gian giải theo thuật tốn q lớn điều kiện cho thuật tốn khó đáp ứng Có tốn giải theo cách giải vi phạm thuật toán chấp nhận Từ nhận định trên, người ta thấy cần phải có đổi cho khái niệm thuật tốn Người ta mở rộng hai tiêu chuẩn thuật tốn: tính xác định tính đắn Việc mở rộng tính xác định thuật tốn thể qua giải thuật đệ quy ngẫu nhiên Tính thuật tốn khơng bắt buộc số cách giải toán, cách giải gần Trong thực tiễn có nhiều trường hợp người ta chấp nhận cách giải thường cho kết tốt (nhưng lúc tốt) phức tạp hiệu Chẳng hạn giải toán thuật toán tối ưu đòi hỏi máy tính thực hiên nhiều năm sẵn lòng chấp nhận giải pháp gần tối ưu mà cần máy tính chạy vài ngày vài Các cách giải chấp nhận khơng hồn tồn đáp ứng đầy đủ tiêu chuẩn thuật toán thường gọi thuật giải Khái niệm mở rộng thuật toán mở cửa cho việc tìm kiếm phương pháp để giải tốn đặt Vét cạn, quay lui ,nhánh cận số tên gọi không đồng nghĩa phương pháp đơn giản tin học : Tìm nghiệm tốn cách xem xét tất phương án Đối với người phương pháp thường không khả thi số phương án cần kiểm tra lớn Tuy nhiên máy tính, nhờ tốc độ xử lí nhanh, máy tính giải nhiều tốn phương pháp thử sai Bài tiểu luận sau , cho tìm hiểu rõ “ Thuật tốn quay lui“ Vì kiến thức chúng em nhiều hạn chế nên q trình làm tiểu luận có sai sót Mong bạn , góp ý Để tiểu luận chúng em hoàn chỉnh Chúng em xin cảm ơn ! MỤC LỤC I Tổng quan phương pháp quay lui Dấu hiệu nhận biết Ý tưởng Mơ hình Lược đồ Chứng minh tính Nhận xét So sánh với “ Vét cạn , Nhánh cận“ II Phân tích thiết kế số toán Liệt kê dãy nhị phân có độ dài n Phân tích số Liệt kê chỉnh hợp không lặp k phần tử Người bán hàng Bài toán Balo Bài tốn xếp Hậu Chu trình Hamilton III Một số lỗi mắc phải dùng phương pháp quay lui Lỗi hay mắc phải Chú ý ! IV Tổng kết Kết luận Phụ lục I Tổng quan phương pháp quay lui 1.Dấu hiệu nhận biết tốn sử dụng phương pháp Một toán liệt kê tổ hợp ln cần phải đảm bảo hai ngun tắc, là: khơng bỏ sót cấu hình khơng trùng lặp cấu hình Có thể nói phương pháp liệt kê cách cuối để giải số toán tổ hợp Một phương pháp liệt kê có tính phổ dụng cao phươngpháp quay lui Một số toàn liệt kê đơn giản :     Liệt kê nước Asean ( Đ ÁN : Việt Nam , Lào , Thài Lan … ) Liệt kê số nhị phân bit ( Đ ÁN : 000 , 001 , 010 , 100 , … ) Liệt kê số tự nhiên chia hết cho ( Đ ÁN : 5,10,15,20,25… ) Vv … Ý tưởng phương pháp “ Quay đầu bờ “ Nét đặc trưng phương pháp lui bước hướng tới lời giải cuối tốn hồn toàn làm thử Tại bước , có lựa chọn chấp nhận ghi nhận lại lựa chọn tiến hành bước thử Còn ngược lại khơng có lựa chọn thích hợp làm lại bước trước, xóa bỏ ghi nhận quay chu trình thử lựa chọn lại Hành động gọi quay lui, thuật toán thể phương pháp gọi quay lui Điểm quan trọng thuật toán phải nghi nhớ bước qua để tránh trùng lặp quay lui Dễ thấy thông tin cần lưu trữ vào ngăn xếp , nên thuật toán thể ý thiết kế cách đệ quy Mơ hình x Lời giải toán thường biểu diễn vec tơ gồm n phần tử x =( x ) Phải thỏa mãn điều kiện Để lời giải x, ta phải xây dựng dần thành n phần lời giải Tại bước i : x i - Đã xây dựng xong thành phần - Xây dựng thành phần thể chọn x i x ,… x i−1 cách thử khả mà x i có  Nếu khả j phủ hợp cho x i ta xác định x i theo khả j Thường phải có thêm thao tác ghi nhận trạng thái toán để hỗ trợ cho bước quay lui Nếu i = n ta có lời giải , ngược lại tiến hành bước i+1 để xác định x i+1  Nếu khơng có khả chấp nhận cho bước trước ( bước i -1 ) để xác định lại thành phần x x i ta lùi lại i−1 Để đơn giản , ta giả định khả lựa chọn cho x i bước , dó ta phải có thêm thao tác kiểm tra khả j chấp nhận cho x i Hình 1.1 : Mơ hình hóa ý tưởng Lược đồ phương pháp Mơ hình phương pháp quay lui viết thủ tục sau, với n số bước cần phải thực , k số khả mà x i lựa chọn Chứng minh tính phương pháp Chúng ta chứng minh tính phương pháp bất biến vòng lặp Bất biến vòng lặp : D = {x1 , x2 , … , xn } – Tập cầu hình Ta có điều bất biến vòng lặp này: Khởi tạo : j=1 có khả chấp nhận nghiệm x i Bài tốn ln có nghiệm Duy trì : Tại bước I thuật tốn tìm giá trị cho x i , ghi nhận trạng trạng thái gọi đệ quy , đê sinh thành phần x i+1 Khi sinh đủ n thành phần x dừng lại cập nhật phương án tối ưu Nếu khả x i+1 xét qua vòng for try(i+1) thực xong Sau chương trình quay đẻ gọi để quy try (i) Trạng thái cũ trước gọi xi phục hồi vòng for try (i) tiếp tục để chọn giá trị j phù hợp x i Kết thúc : Khi đến try (1) xét hết khả x1 chương trình đệ quy kết thúc.Ta duyệ tất phương án nghiệm Vậy với vòng lặp chương trình kết thúc Nhận xét Tim nghiệm phương pháp quay lui chuyển tìm kiếm không gian trạng thái , với xây dựng mức sau : - Các nút gốc ( thuộc mức ) khả chọn cho - Gỉa sử x i−1 khả mà … x i−1 nút mức thứ i-1 , nút x i x i−1 chọn , tìm thành phần x x , Như , nút x i biểu diễn lời gải phận , nút nằm đường từ gốc đến nút Ta nói việc tìm kiếm nghiệm phương pháp quay lui tìm kiếm theo chiều sâu khơng gian trạng thái Các tốn giải phương pháp quay lui:  Liệt kê dãy nhị phân độ dài n  Bài toán quân hậu , mã tuần  Bài tốn tìm đường mê cung  Tìm chu trình Hamilton đồ thị (Hamiltonian Path Problem)  Bài toán người đưa hàng (Traverling Salesman Problem)  Bài toán xếp balo (Knapsack Problem)  Bài tốn tơ màu đồ (Map Coloring Problem)  … Hình 1.2 : Giải thuật tổng quát So sánh Vét cạn – quay lui – nhánh cận Vét cạn Quay lui Nhánh cận Thời gian Rất lớn Ít vét cạn Ít quay lui Bộ nhớ Ít Nhiều vét cạn Nhiều Thường bậc mũ Tốt vét cạn( TH Giảm so với quay lui TH xấu nhât O(n!) xấu cấp số Độ phức tạp mũ) Khả có nghiệm II Phân tích thiết kế Có Có Có Khơng số tốn 1.Bài tốn Liệt kê dãy nhị phân có độ dài n a Đề  Liệt kê dãy nhị phận có dộ dài n b Phân tích  Liệt kê dãy có chiều dài n dạng { 0,1 } ko cần thỏa mãn điều kiện x x n x i ∈ c Thiết kế thuật tốn Ta sử dụng sơ đồ tìm tất lời giải bái toán Hàm Try(i) xác định x i , x i chi nhận hai giá trị 1.Các gái trị chấp nhận mà không cần phải thỏa mãn điều kiện Nên hàm try (i) viết sau : Trong : n số bước cần phải thực k số khả mà x i có Bài tốn khởi tạo với biến i =1 d Chương trình  LietKeDayNhiPhan.cpp  LietKeDayNhiPhan.exe e Ví dụ :  Input : n =  Output : 10          Thủ tục đệ quy Try(i) thử giá trị nhận xi (: xi-1 < =xi) Khi in kết quả, gọi đệ quy tiếp ??? Lưu ý ti-1 tổng tất phần tử xi đến xi-1 đó: Khi ti =n tức (xi = n- ti-1) in kết Khi tìm tiếp, xi+1 phải thỏa mãn điều kiện : xi+1 >= xi Mặt khác ti+1 tổng các số từ x1 đến xi+1 khơng vượt q n Khi đó, ta có: ti+1 ≤ n  ti-1 + x+xi+1 ≤ n  + xi +xi+1 ≤ n- ti-1 xi ≤( n- ti-1 n- ti-1)/2 o Ví dụ đơn giản n=10 việc chọn x1 = 6,7,8,9 việc làm vơ nghĩa, ta khơng chọn x2 Một cách dễ hiểu ta gọi đệ quy tìm tiếp giá trị xi chọn cho phép chọn phần tử khác lớn mà khơng vượt q tổng n Còn ta in kết xi mang giá trị số thiếu hụt tổng i-1 phần tử đầu so với n Vây thủ tục Try(i) thử giá trị cho xi mơ tả sau (để tổng qt cho i=1, đặt x0 =1,t0 =0) Xét giá trị xi từ xi-1 đến (n-ti-1)/2, cập nhật ti = ti-1 +xi gọi đệ quy tìm tiếp Cuối xét giá trị xi = n-ti-1 in kết từ x1 đến xi  Lược đồ : Lời gọi ban đầu Try(1) d Chương trình  BaiToanPhantichso.cpp e Ví dụ : 12  Input : Nhập n =  Output : 3.Bài tốn liệt kê chỉnh hợp khơng lặp chập k a Đề  Cho tập hợp từ đến n Liệt kê chỉnh hợp không lặp chập k n phần tử cho b Phân tích  Để liệt kê chỉnh hợp khơng lặp chập k S={1,2,….n } ta đưa liệt kê cấu hình (x1,x2,….).Ở xi ϵ S đôi khác  Như thủ tục Try(i)- xét tất khả chọn xi-sẽ thử hết giá trị từ đến n,mà giá trị chưa bị phần tử đứng trước chọn.Muốn xem giá trị chưa chọn ta dung mảng đán h dấu:  Khởi tạo mảng c1,c2,….,cn mang kiếu logic.ci cho biết giá trị I tự hay chọn rồi.Ban đầu khởi tạo phần tử mảng c la TRUE có nghĩa phần tử từ đến n tự  Tại bước chọn giá trị xi ta xét nững giá trị j có cj=TRUE nghĩa chọn giá trị tự  Truước gọi đệ quy tìm Xi+1 : ta đặt giá trị j vừa gan cho xi bị chọn có nghĩa đặt cj:= FALSE để thủ tục Try(i+1),Try(i+2) sau khơng chọn phải giá trị j  Sau gọi đệ quy tìm Xi+1 :có nghĩa tới ta thử gán giá trị khác cho xi ta thử đặt giá trị j vừa thử thành tự do.(cj=TRUE) xi nhận giá trị khác phần tử đứng sau nhận gía trị j 13 đó.Điều hồn tồn hợp lí chỉnh hợp khơng lặp: x1 có n cách chọn, x2 có n-1 cách chọn…………  Lưu ý thủ tục Try(i) có i=k ta khơng cần phải đánh dấu có in kết khơng cần phải chọn them phần tử c.Thiết kế thuật toán  Khác với chỉnh hợp lặp thành phần phép lặp lại, tức giống nhau, chỉnh hợp không lặp chập k tập n phần tử dãy k thành phần lấy từ tập n phần tử có xét thứ tự thành phần không phép giống  Nghiệm tốn tìm chỉnh hợp khơng lặp chập k tập n số nguyên từ đến n vector x thoả mãn điều kiện: o x có k thành phần: x = (x1,x2,…xk) o Các giá trị xi lấy tập {1,2, n} o Ràng buộc: giá trị xi đôi khác nhau, tức xi≠xj với i≠j  Ta sử dụng mảng c[ ] dùng để dánh dấu  Dùng thủ tục try(i) để tìm.Giả sử ta vị trí thứ i độ dài chuỗi số giá trị max giá trị max = giá trị  Nếu i=n in giá trị nghiệm ngược lại sinh phần tử x i+1 try(i+1)  Cập nhật lại giá trị trọng lượng ba lô  Kết thúc ba lô đạt trọng lượng tối đa c Thiết kế thuật tốn  Mơ tả liệu: o Trọng lượng tối đa W,giá trị vi, trọng lượng wi o Mảng: Daqua[1 n] đánh dấu vật i cho vào ba lô hay chưa? o Daqua[i] = true đỉnh i có ba lơ false ngược lại, đỉnh i chưa có ba lơ o Khởi tạo: Daqua[1 n] = fals  Lược đồ: 19 d Chương trình  File input: balo.txt  File chương trình: balo_quaylui.cpp e Ví dụ  Input ( file : balo.txt ) :  Output 20 o Phương án chọn vật : o 1, 2,4 có tổng trọng lượng = không vượt giới hạn trọng lượng ba lô tổng giá trị đạt tối đa 6 Bài tốn Xếp Hậu a Đề bàì  Xét bàn cờ tổng quát kích thước n*n Một quân hậu bàn cờ ăn quân khác ô hàng, cột cùngđường chéo  Hãy tìm cách xếp n quân hậu bàn cờ cho không quân hậu ăn quân hậu b Phân tích  n quân hậu đặt hàng hậu ăn hàng ngang, gọi quân hậu đặt hàng i quân hậu i ( i chạy từ đến n)  Một nghiệm tốnđược biết ta tìm vị trí cột quân hậu  Ta định hướng Đông (Phải),T ây (trái), Nam (dưới ), Bắc (trên): o Một đường chéo theo hướng Đông Bắc –Tây Nam (ĐB–TN) qua số ô, có tính chất: hàng + cột = C1(const) Với đường chéo xác định số : ≤ C1 ≤2n Do ta đánh số cho đường chéo ĐB–TN từ đến 2n o Một đường chéo hướng Đông Nam –Tây Bắc (ĐN-TB) qua số ơ, có tính chất: hàng–cột = C2 Tương tự đường chéo (ĐN –TB) xác định nhát số C2: 1-n≤C2≤n–1 Ta đánh số cho đường chéo ĐN–TB từ đến 2(n-1) +1 c Thiết kế thuật toán  Ta dùng mảng lôgic để đánh dấu: o Mảng agồm n phần tử , ai= TRUE cột i tự do, ai= FALSE cột i có quân hậu o Mảng bgồm 2n-1 phần tử: bi = TRUE đường chéo ĐB-TN thứ i tự do, ngược lại bi= FALSE o Mảng cgồm 2(n-1) +1 phần tử: ci= TRUE đường chéo ĐN - TB thứ i tự , ngược lại ci= FALSE o Banđầu mảng khởi tạo mang giá trị TRUE  Thuật toán quay lui: o Xét tất cột, thử đặt quân hậu vào cột, với cách đặt nhưvậy , xét tất cách đặt quân hậu không bị quân hậu ăn, thử 21 o o o o cách đặt quân hậu sauđó lại xét tiếp cách đặt quân hậu Mỗi cách đặt đến quân hậu n cho ta nghiệm Khi chọn vị trí cột j cho qn hậu i ta phải chọn (i,j) khơng bị quân hậu đặt trước ăn Tức chọn cột j tự do, đường chéo ĐB –TN ( i + j ) tự do, đường chéo ĐN –TB ( i–j + n) tự Tức ta kiểm tra điều kiện aj= bi+j= cij+n=TRUE Khiđặt quân hậu i vào cột j, i = n in nghiệm Nếu khơng: Trước gọi đệ quy tìm cách đặt quân hậu i + ta đánh dấu cột 2đường chéo bị quân hâu i khống chế ( aj=bi+j= ci-j+n= FALSE )để lần gọi đệ quy tiếp sau chọn quân hậu không chọn vào ô nằm cột j đường chéo Sau gọi đệ quy tìm cách đặt quân hậu i + 1, tức tới ta thử cách đặt khác cho quân hậu i , ta bỏ đánh dấu cột 2đường chéo vừa bị thử đăt khống chế ( ai= bj+j=cj-j+n= TRUE ) tức cột đường chéo đặt qn hậu i sang vị trí khác cột đường chéo đặt quân hậu khác Lược đồ : d.Chương trình  BaiToanXepHau.cpp e.Ví dụ 22  Input : Nhập kích thước bàn cờ n =  Output : Bài tốn Chu trình Hamilton a Đề  Tìm chu trình Hamilton  Chu trình Hamilton: Là chu trình qua tất đỉnh đồ thị đỉnh lần cạnh đồ thị nối đỉnh đầu dây chuyền với đỉnh cuối b Ý tượng :  Đưa đỉnh x vào đường  Kiểm tra chu trình đủ chiều dài chưa? (tức hết tất đỉnh chưa?) đồng thời kiểm tra đình đầu đỉnh cuối chu trình có cạnh nối hay ko? Nếu thoả mãn hết điều kiện kết luận có chu trình Hamilton  Duyệt hết tất đỉnh kề với x  Kiểm tra đỉnh kề qua chưa? Nếu true gọi lại hàm đệ qui tìm chu trình Hamilton  Xóa đỉnh kề khỏi chu trình c Thiết kế thuật tốn 23 d Chương trình  File input : dt.dat  File Chương Trình : ChutrinhHamilton.cpp e.Ví dụ  Input : dt.dat  Output: 24 III Một số lỗi mắc phải dùng phương pháp quay lui Lỗi mắc phải  Lỗi toán o Khi xác định toán dễ nhầm với toán khác phương pháp thử sai  Lỗi lặp trình o Khi lập trình tạo vòng lặp vơ hạn o Khơng biết lần gọi đệ quy tương ứng với nút Chú ý !  Khơng phải cấu hình sinh từ cấu hình trước cách dễ dàng  Phương pháp sinh giải tốn đơn giản  Khơng phải cấu hình ban đầu cấu hình nhận diện cách dễ dàng,nhiều phải chứng minh tồn chúng IV Tổng kết 1.Kết luận  Ư u điểm : o Việc quay lui thử tất tổ hợp để tìm lời giải Thế mạnh phương pháp nhiều cài đặt tránh viêc phải thử nhiều trường hợp chưa hoàn chỉnh, nhờ giảm thời gian chạy  Nhược điểm : o Trong trường hợp xấu độ phức tạp quay lui Vẫn cấp số mũ Vì mắc phải nhược điểm sau - Rơi vào tình trạng “ thrashing” : trình tìm kiếm gặp phải bế tắc với nguyên nhân - Thực công việc dư thừa : Mỗi lân quay lui.Chúng ta phải đánh giá lại lời giải đôi lúc điều cần thiết 25 - Không sớm phát khả bị bế tắc tương lai Quay lui chuẩn , khơng có chế nhìn tương lai.Để nhận biết nhánh tìm kiếm vào bế tắc 2.Phụ lục  Tài liệu tham khảo o Sile giảng thiết kế đánh giá thuật toán cô Nguyễn Thị Hồng Minh o Giải thuật lập trinh Lê Minh Hoàng o Bài giảng thiết kế đánh giá thuật toán Khoa CNTT trường ĐH Giao thông vận tải Hà Nội o Và kiến thức từ nguồn Internet  Phân công công việc Họ tên Lý Thuyết Bài Tập Nguyễn Hồng Chương Dấu hiệu ý tưởng In dãy nhị phân độ dài n Lê Thị Ngọc Ánh Mơ hình lược đồ Phân tích số tổ hợp chập k Lê Thị Hiến Chứng minh nhận xét Balo người bán Hàng Trần Thị Thu Hằng (4/9) So sánh Bài toán xếp hậu Hamilton Cả Nhóm Tìm tài liệu hỗ trợ cho thành Làm phần III IV viên khác nhóm 26 ... số lỗi mắc phải dùng phương pháp quay lui Lỗi hay mắc phải Chú ý ! IV Tổng kết Kết luận Phụ lục I Tổng quan phương pháp quay lui 1.Dấu hiệu nhận biết tốn sử dụng phương pháp Một tốn liệt kê... Lược đồ phương pháp Mơ hình phương pháp quay lui viết thủ tục sau, với n số bước cần phải thực , k số khả mà x i lựa chọn Chứng minh tính phương pháp Chúng ta chứng minh tính phương pháp bất... bỏ ghi nhận quay chu trình thử lựa chọn lại Hành động gọi quay lui, thuật toán thể phương pháp gọi quay lui Điểm quan trọng thuật toán phải nghi nhớ bước qua để tránh trùng lặp quay lui Dễ thấy

Ngày đăng: 19/11/2019, 07:18

Từ khóa liên quan

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

Tài liệu liên quan