1. Trang chủ
  2. » Công Nghệ Thông Tin

đề tài bài toán tám hậu docx

10 575 4

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 75 KB

Nội dung

Phần 1: Đặt vấn đề Toán rời rạc là một lĩnh vực nghiên cứu và xử lý các đối tượng rời rạc dùng để đếm các đối tượng, và nghiên cứu mối quan hệ giữa các tập rời rạc. Một trong những yếu tố làm toán rời rạc trở nên quan trọng là việc lưu trữ xử lý thông tin trong các hệ thống máy tính về bản chất là rời rạc Nhiều tác giả nổi tiếng trên thế giới cũng như ở việt nam đã viết ra các giáo trình hay các bài luận rất hay và bổ ích phục vụ nhu cầu hiểu biết không ngừng tăng mọi người. trong đó có rất nhiều vấn đề được đề cập đến và đã có sự nghiên cứu khác nhau từ nhiều người. Một trong những vấn đề được biết đến đó là “bài toán tám quân hậu”. Tôi đã chọn vấn đề này để làm một bài tập lớn với mong muốn thể hiện được một phần trong nhiều ý tưởng của các tác giả đã đưa ra trước đây Tôi xin bày tỏ lòng biết ơn sâu sắc đến các thầy cô và nhà nghiên cứu bộ môn này mà nhờ họ tôi đã có rất nhiều tài liệu tham khảo để làm hoàn chỉnh đề tài của mình: “Bài toán tám quân hậu” Phần 2: Các kiến thức đã tìm hiểu 1, Giới thiệu - Lịch sử: 1 Câu đố ban đầu được đề xuất năm 1848 của cờ vua máy nghe nhạc Max Bezzel, và trong những năm qua, nhiều nhà toán học, bao gồm cả Gauss, đã làm việc này câu đố và vấn đề tổng quát n-nữ hoàng của nó. Các giải pháp đầu tiên được cung cấp bởi Franz Nauck vào năm 1850. Nauck cũng mở rộng các câu đố n-nữ hoàng vấn đề (một n × n hội đồng quản trị-một bàn cờ kích thước tùy ý). Trong năm 1874, S. Günther đã đề xuất một phương pháp tìm kiếm giải pháp bằng cách sử dụng yếu tố quyết định, và JWL Glaisher tinh chế cách tiếp cận này. Edsger Dijkstra đã sử dụng vấn đề này trong năm 1972 để minh họa cho sức mạnh của những gì ông gọi là lập trình cấu trúc. Ông đã xuất bản một mô tả rất chi tiết của sự phát triển của một thụt lùi sâu đầu tiên algorithm.2 2, Phân tích bài toán: Bài toán tám quân hậu : Đặt 8 quân hậu trên bàn cờ vua 8 x 8 sao cho không có quân hậu nào có thể tấn công được con khác (theo luật chơi cờ vua), nghĩa là phải đặt các quân hậu sao cho không có hàng, cột hoặc đường chéo nào trên bàn cờ có hơn 1 quân hậu. - Ví dụ 3, Giải pháp tập trung Xây dựng một giải pháp Vấn đề có thể được khá tính toán đắt tiền như có 4426165368 (tức là, 64 chọn 8) sắp xếp có thể tám nữ hoàng trên 8 × 8 hội đồng quản trị, nhưng chỉ có 92 giải pháp. Có thể sử dụng phím tắt làm giảm các yêu cầu tính toán hoặc các quy định của ngón tay cái, có thể tránh brute-lực lượng kỹ thuật tính toán. Ví dụ, chỉ bằng cách áp dụng một quy tắc đơn giản rằng buộc mỗi nữ hoàng vào một cột (hoặc hàng), mặc dù vẫn được coi là bạo lực, nó có thể để giảm số lượng các 2 khả năng để chỉ 16.777.216 (có nghĩa là, 88) có thể kết hợp. Tạo ra các hoán vị là những giải pháp của câu đố tám rooks [2] và sau đó kiểm tra chéo các cuộc tấn công tiếp tục làm giảm khả năng chỉ 40.320 (đó là, 8). Các Python mã sau sử dụng kỹ thuật này để tính toán 92 giải pháp: [3] Hoán vị nhập khẩu intertools n = 8 cols = range(n);// cols=phạm vi(n) for vec in permutations(cols): if (n == len(set(vec[i]+i for i in cols)) == len(set(vec[i]-i for i in cols))): print vec Những thuật toán brute-force tính toán quản lý cho n = 8, nhưng sẽ là khó cho vấn đề của n ≥ 20, 20! = 2,433 năm 1018. Tiến bộ cho vấn đề này và đồ chơi khác là sự phát triển và ứng dụng chẩn đoán (quy tắc của ngón tay cái) mang lại giải pháp cho các câu đố n nữ hoàng tại một phần nhỏ của các yêu cầu tính toán. Heuristic này giải quyết N hoàng hậu cho bất kỳ N ≥ 4. Nó tạo danh sách số lượng cho vị trí thẳng đứng (hàng) của các nữ hoàng với vị trí nằm ngang (cột) chỉ đơn giản là tăng. N là 8 cho câu đố tám nữ hoàng. Nếu phần còn lại chia N bởi 6 không phải là 2 hoặc 3 sau đó danh sách chỉ đơn giản là tất cả các số thậm chí đã theo tất cả các số lẻ ≤ N Nếu không, hãy viết danh sách riêng biệt của các số chẵn và lẻ (tức là 2,4,6,8 - 1,3,5,7) Nếu phần còn lại là 2, trao đổi 1 và 3 trong danh sách lẻ và di chuyển 5 đến cuối cùng (tức là 3,1,7,5) Nếu phần còn lại là 3, di chuyển 2 kết thúc ngay cả danh sách và 1,3 cuối của danh sách lẻ (tức là 4,6,8,2 - 5,7,9,1,3) Nối danh sách lẻ vào danh sách, ngay cả và hoàng hậu diễn ra trong các hàng được đưa ra bởi những con số này, từ trái sang phải (ví dụ như a2, b4, c6, d8, e3, f1, G7, h5) N = 8 kết quả này trong dung dịch được hiển thị ở trên. Một vài ví dụ theo. 14 nữ hoàng (còn lại 2): 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5. 15 nữ hoàng (còn lại 3): 4, 6, 8, 10, 12, 14, 2, 5, 7, 9, 11, 13, 15, 1, 3. 20 nữ hoàng (còn lại 2): 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 1, 7, 9, 11, 13, 15, 17, 19, 5. [Sửa] Giải pháp cho các câu đố tám quân hậu câu đố tám quân hậu có 92 giải pháp riêng biệt. Nếu các giải pháp chỉ khác nhau bởi các hoạt động đối xứng (phép quay và phản xạ) của hội đồng quản trị được tính là một câu đố có 12 giải pháp duy nhất (hoặc cơ bản). Một giải pháp cơ bản thường có 8 biến thể (bao gồm cả hình thức ban đầu của 3 nó) thu được bằng cách xoay 90, 180, hoặc 270 độ và sau đó phản ánh trong bốn biến thể quay trong một tấm gương ở một vị trí cố định. Tuy nhiên, một giải pháp nên được tương đương với mức độ của vòng quay của nó 90 (như xảy ra một giải pháp với 5 nữ hoàng trên một bảng 5x5) cơ bản giải pháp sẽ chỉ có 2 biến thể. Nếu một giải pháp được tương đương với mức độ của vòng quay của nó 180, nó sẽ có 4 biến thể. Trong số 12 giải pháp cơ bản cho vấn đề với 8 quân hậu trên một bảng 8x8, đúng 1 là tương đương với mức độ của vòng quay của nó 180, và không có bằng chuyển động quay 90 độ. Như vậy số lượng các giải pháp khác biệt là 11 * 8 + 1 * 4 = 92. Các giải pháp duy nhất được trình bày dưới đây: Đếm các giải pháp Bảng dưới đây cho các giải pháp cho việc đặt n nữ hoàng trên một n × n hội đồng quản trị, cả hai độc đáo (trình tự A002562 OEIS) và khác biệt (chuỗi A000170 OEIS), cho n = 1-14, 24-26. n: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 24 25 26 duy nhất: 1 0 0 1 2 1 6 12 46 92 341 1787 9233 45752 28.439.272.956.934 275.986.683.743.434 2.789.712.466.510.289 riêng biệt: 1 0 0 2 10 4 40 92 352 724 2.680 14.200 73.712 365.596 227.514.171.973.736 2.207.893.435.808.352 22.317.699.616.364.044 Lưu ý rằng các câu đố sáu hoàng hậu có những giải pháp ít hơn so với các câu đố hoàng hậu năm. Hiện tại không có công thức được biết đến với các con số chính xác các giải pháp. 4, Vấn đề liên quan Sử dụng các phần khác hơn so với nữ hoàng Trên một 8 × 8 hội đồng quản trị một trong có thể đặt 32 hiệp sĩ, 14 giám mục, 16 vị vua hay tám rooks, do đó không có hai miếng tấn công lẫn nhau. Miếng cổ tích cờ vua cũng đã được thay thế cho nữ hoàng. Trong trường hợp các hiệp sĩ, một giải pháp dễ dàng là để đặt trên mỗi hình vuông của một màu nhất định, kể từ khi họ di chuyển duy nhất để màu sắc đối diện. Chuẩn bảng Polya nghiên cứu n nữ hoàng vấn đề trên một bảng hình xuyến (hình bánh rán ") và cho thấy rằng có một giải pháp trên một n × n hội đồng quản trị nếu và chỉ nếu n không chia hết cho 2 hoặc 3 [4] Trong năm 2009. Pearson và Pearson thuật toán dân cư bảng ba chiều (n × n × n) với n2 nữ hoàng, và đề nghị bội số này có thể mang lại giải pháp cho một phiên bản bốn chiều của câu đố. Domination 4 Với một × n n hội đồng quản trị, số lượng thống trị là số lượng tối thiểu của các nữ hoàng (hoặc miếng) cần thiết để tấn công hoặc chiếm mỗi vuông. Đối với n = 8 số thống trị của nữ hoàng là 5. Nine nữ hoàng vấn đề Nơi chín hoàng hậu và cầm đồ một ngày một 8 × 8 hội đồng quản trị theo cách như vậy mà nữ hoàng không tấn công lẫn nhau. Hơn nữa khái quát của vấn đề (hoàn thành giải pháp hiện vẫn chưa biết): × n n cờ hội đồng quản trị và m> n hoàng hậu, tìm ra số lượng tối thiểu của con tốt, để nữ hoàng m và con tốt có thể được thiết lập ở trên diễn đàn như vậy một cách mà không có hai hoàng hậu tấn công nhau. Queens và vấn đề hiệp sĩ Đặt m hoàng hậu và hiệp sĩ m trên một n × n hội đồng quản trị để mảnh không có cuộc tấn công khác. Ma thuật hình vuông Năm 1992, Demirörs, Rafraf, và Tanik công bố một phương pháp để chuyển đổi một số hình vuông ma thuật vào các giải pháp n hoàng hậu, và ngược lại. [5] Latin hình vuông Trong một ma trận n × n, nơi mỗi chữ số từ 1 đến n tại các địa điểm n trong ma trận để không có hai trường hợp của cùng một chữ số trong cùng hàng hoặc cột. Chính xác bao gồm Hãy xem xét một ma trận với một cột chính cho từng cấp bậc n của hội đồng quản trị, một cột chính cho mỗi của các tập tin n, một cột thứ cấp cho mỗi đường chéo không tầm thường 4N-6 của hội đồng quản trị. Ma trận có n2 hàng: một cho mỗi vị trí nữ hoàng có thể, và mỗi hàng có 1 trong các cột tương ứng với thứ hạng đó là hình vuông, tập tin, và đường chéo và 0 trong tất cả các cột khác. Sau đó, nữ hoàng vấn đề n là tương đương với việc lựa chọn một tập hợp con của các hàng của ma trận này rằng tất cả các cột chính có 1 chính xác một trong các hàng được chọn và mỗi cột thứ 1 tại một của hàng được lựa chọn, điều này là một ví dụ về một vấn đề bao gồm tổng quát chính xác, trong đó sudoku là một ví dụ. [Sửa] tám nữ hoàng câu đố như một bài tập trong thiết kế thuật toán Tìm tất cả các giải pháp cho các câu đố nữ hoàng tám là một ví dụ tốt của một vấn đề đơn giản nhưng không tầm thường. Vì lý do này, nó thường được sử dụng như một vấn đề ví dụ cho các kỹ thuật lập trình khác nhau, bao gồm các phương pháp tiếp cận phi truyền thống chẳng hạn như lập trình logic, lập trình hạn chế hoặc các thuật toán di truyền. Thông thường, nó được sử dụng như một ví dụ về một vấn đề mà có thể được giải quyết với một thuật toán đệ quy, bằng cách phân nhịp n nữ hoàng vấn đề quy nạp về thêm một nữ hoàng duy nhất để giải pháp nào cho vấn đề đặt n-1 nữ hoàng trên một n -by-n bàn cờ. Cảm ứng đáy với các giải pháp của vấn đề đặt 0 nữ hoàng trên 0-0-bàn cờ, đó là bàn cờ trống. 5 Kỹ thuật này được nhiều hơn nữa hiệu quả hơn so với các thuật toán tìm kiếm brute-force ngây thơ, trong đó xem xét tất cả 648 = 248 = 281,474,976,710,656 vị trí có thể mù quáng của tám nữ hoàng, và sau đó bộ lọc này để loại bỏ tất cả các vị trí ra hai hoàng hậu hoặc trên cùng một hình vuông (để chỉ 64 / 56! = 178.462.987.637.760 vị trí có thể) hoặc trong tấn công lẫn nhau các vị trí. Thuật toán này rất nghèo, trong số những thứ khác, sản xuất các kết quả tương tự hơn và hơn nữa trong tất cả các hoán vị khác nhau trong các bài tập trong tám nữ hoàng, cũng như lặp đi lặp lại các tính toán tương tự hơn và hơn nữa cho các bộ khác nhau của mỗi giải pháp. Brute-lực lượng thuật toán tốt hơn nơi một nữ hoàng duy nhất trên mỗi hàng, dẫn đến chỉ có 88 = 224 = 16.777.216 vị trí mù. Nó có thể để làm tốt hơn nhiều so. Một thuật toán giải quyết tám rooks câu đố bằng cách tạo ra các hoán vị của các số từ 1 đến 8 (trong đó có 8 = 40.320), và sử dụng các yếu tố của mỗi hoán vị là chỉ số để đặt một nữ hoàng trên mỗi hàng.Sau đó, nó từ chối những bảng với vị trí tấn công đường chéo. Thụt lùi sâu đầu tiên tìm kiếm chương trình, một sự cải thiện nhẹ vào phương pháp hoán vị, xây dựng cây tìm kiếm bằng cách xem xét một hàng của hội đồng quản trị tại một thời điểm, loại bỏ vị trí nonsolution hội đồng quản trị nhất ở giai đoạn rất sớm trong xây dựng của họ. Bởi vì nó từ chối các cuộc tấn công rook và đường chéo trên bảng không đầy đủ, nó kiểm tra chỉ có 15.720 vị trí nữ hoàng có thể. Một cải tiến hơn nữa kiểm tra chỉ có 5.508 vị trí nữ hoàng có thể là kết hợp các phương pháp dựa trên hoán vị với phương pháp cắt tỉa sớm các hoán vị được tạo ra độ sâu-đầu tiên, và không gian tìm kiếm là cắt tỉa nếu hoán vị một phần tạo ra một cuộc tấn công đường chéo. Hạn chế chương trình cũng có thể rất hiệu quả về vấn đề này. Một thay thế để tìm kiếm đầy đủ là một "lặp đi lặp lại sửa chữa, thuật toán, mà thường bắt đầu với tất cả các nữ hoàng trên hội đồng quản trị, ví dụ như với một nữ hoàng cho mỗi cột. Nó sau đó đếm số cuộc xung đột (tấn công), và sử dụng một heuristic để xác định làm thế nào để cải thiện vị trí của các nữ hoàng. 'Tối thiểu xung đột "để phát - di chuyển các mảnh với số lượng lớn nhất của các cuộc xung đột với hình vuông trong cùng một cột số lượng các cuộc xung đột là nhỏ nhất - đặc biệt hiệu quả mà nó tìm thấy một giải pháp cho vấn đề nữ hoàng 1.000.000 trong ít hơn 50 bước trên trung bình. Này giả định rằng cấu hình ban đầu là hợp lý tốt - nếu một triệu hoàng hậu bắt đầu trong cùng một hàng, rõ ràng là sẽ phải mất ít nhất 999.999 bước để sửa chữa nó. A 'hợp lý tốt điểm bắt đầu ví dụ có thể được tìm thấy bằng cách đặt mỗi nữ hoàng trong một hàng cột riêng và để nó xung đột với số lượng nhỏ nhất của các nữ hoàng đã được hội đồng quản trị. Lưu ý rằng "lặp đi lặp lại sửa chữa", không giống như tìm kiếm 'thụt lùi nêu trên, không bảo đảm một giải pháp: giống như tất cả các thủ tục hillclimbing (tức là, tham lam), nó có thể bị mắc kẹt trên một tối ưu địa phương (trong 6 trường hợp thuật toán có thể được khởi động lại một cấu hình ban đầu khác nhau). Mặt khác, nó có thể giải quyết kích thước vấn đề mà một số đơn đặt hàng của cường độ vượt quá phạm vi của một tìm kiếm chuyên sâu đầu tiên. ông sau đây là một chương trình Pascal bởi Niklaus Wirth [6]. Nó tìm thấy một trong những giải pháp cho vấn đề nữ hoàng tám. 5, Giải pháp tối ưu Về lý thuyết : - Nắm vững lý thuyết cơ bản về cấu trúc dữ liệu và giải thuật - Giải thuật tìm kiếm sâu kết hợp quay lui (Backtracking) Về lập trình: - Cài đặt cấu trúc dữ liệu tổ chức bàn cờ. - Cài đặt thuật toán tìm kiếm sâu kết hợp quay lui theo nguyên tắc: Trước tiên, đặt quân hậu vào ô tùy chọn của cột 1, rõ ràng tất cả các ô của cột đó đã bị khống chế nên không thể đặt quân hậu khác. Đặt tiếp một quân hậu vào cột thứ hai, hai ô đầu của cột đó đã bị cấm bởi quân hậu thứ nhất, do vậy ta đặt quân hậu vào ô thứ ba. Tiếp tục với cột thứ ba, ô đầu tiên có thể đặt quân hậu của cột này là ô thứ năm … Tiếp tục với các cột còn lại trên bàn cờ cho đến khi tìm được một lời giải đúng. - Hiển thị bàn cờ sau mỗi nước đi (Nếu thể hiện dưới dạng đồ hoạ càng tốt) - Dịch chương trình sang file thực thi. -Giải thuật đệ quy và quay lui tìm kiếm tất cả các lời giải Trong giải thuật này, mỗi lời giải được ký hiệu bằng một mảng solution[1 n], trong đó solution= j là cột mà quân hậu ở hàng thứ i đứng. Theo tính chất số học của các ô trên bàn cờ n x n, các ô trên các đường chéo cộng chứa ô (i, j) đều có tổng chỉ số hàng với chỉ số cột bằng i+j. Tổng này nhận các giá trị từ 2 đến 2n nên ta đánh số các đường chéo này từ 1 đến 2n-1. Như vậy các ô trên đường chéo cộng thứ nhất có tổng chỉ số dòng và cột là 2, các ô trên đường chéo thứ k có tổng ấy là k+1. Ta dùng một mảng Boolean Ok_plus[1 2n-1] để kí hiệu trạng thái đã có quân hậu nào trên đường chéo cộng thứ k chưa, nghĩa là Ok_plus[k]=True nếu đã có một quân hậu đứng chiếm giữ đường chéo cộng thứ k. Tương tự, các ô trên một đường chéo trừ có hiệu như nhau. Hiệu này nhận giá trị từ 1-n đến n- 1. Đánh số từ 1 đến 2n-1 từ đường chéo có hiệu chỉ số dòng trừ chỉ số cột là 1-n đến đường chéo có hiệu ấy bằng n-1. Khi đó đường chéo trừ thứ k có hiệu chỉ số dòng trừ chỉ số cột là k-n. Ta cũng dùng mảng ok_minus[1 2n-1] để chỉ trạng thái của các đường chéo này. Giải thuật này cố gắng đặt quân hậu ở dòng thứ i vào cột nào đó, bắt đầu từ dòng thứ nhất (luôn có thể đặt được). Nếu ở dòng thứ i ta đặt quân hậu vào cột thứ j, thì nó khống chế tất cả các ô trong cột thứ j, đường chéo cộng thứ i+j-1, đường chéo trừ thứ i-j+n. Nếu có thể đặt được quân hậu ở dòng i và i = n ta có 7 một lời giải. Nếu đặt được và i < n ta tiếp tục cố gắng đặt quân hậu tiếp theo vào dòng thứ i+1. Nếu không đặt được, ta quay lại nhấc quân hậu ở dòng thứ i- 1 và tìm phương án tiếp theo của dòng thứ i-1. 6, Hiệu quả của thuật toán đề xuất 7, công việc liên quan 8, Kết luận Phần 3: KQ đạt được Phần 4: Cài đặt thử nghiệm thuật toán #include<conio.h> #include<stdio.h> int dong[8],cot[8],cheoxuoi[15],cheonguoc[15]; void printf() { int i; 8 printf("\n"); for (i=0;i<8;i++) printf("%3d",dong[i]); } void thu(int i) { int j; for (j=0;j<8;j++) { if (cot[j]==1&&cheoxuoi[i+j]==1&&cheonguoc[i-j+7]==1) { dong[i]=j; cot[j]=0; cheoxuoi[i+j]=0; cheonguoc[i-j+7]=0; if (i<7) thu (i+1); else printf(); cot[j]=1; cheoxuoi[i+j]=1; cheonguoc[i-j+7]=1; } } } void tim() { int i; for (i=0;i<8;i++) { cot[i]=1; dong[i]=-1; } for (i=0;i<15;i++) { cheoxuoi[i]=1; cheonguoc[i]=1; } thu(0); } void main() { tim(); 9 getch(); } 10 . tích bài toán: Bài toán tám quân hậu : Đặt 8 quân hậu trên bàn cờ vua 8 x 8 sao cho không có quân hậu nào có thể tấn công được con khác (theo luật chơi cờ vua), nghĩa là phải đặt các quân hậu. đã có rất nhiều tài liệu tham khảo để làm hoàn chỉnh đề tài của mình: Bài toán tám quân hậu Phần 2: Các kiến thức đã tìm hiểu 1, Giới thiệu - Lịch sử: 1 Câu đố ban đầu được đề xuất năm 1848. nghiên cứu khác nhau từ nhiều người. Một trong những vấn đề được biết đến đó là bài toán tám quân hậu . Tôi đã chọn vấn đề này để làm một bài tập lớn với mong muốn thể hiện được một phần trong

Ngày đăng: 10/08/2014, 17:22

TỪ KHÓA LIÊN QUAN

w