1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tiểu luận: Mô phỏng bài toán bằng thuật toán Minmax

16 90 0

Đ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

Nội dung

Với mục đích giúp các bạn nắm vững các khái niệm của phương pháp chia để trị, các bước giải một bài toán dùng phương pháp chia để trị, nắm vững thuật toán bài toán Minmax,... Mời các bạn cùng tham khảo nội dung bài tiểu luận Mô phỏng bài toán bằng thuật toán Minmax. Hy vọng đây là tài liệu phục vụ nhu cầu học tập và nghiên cứu cho các bạn.

TRƯỜNG ĐẠI HỌC TRẦN ĐẠI NGHĨA KHOA CƠNG NGHỆ THƠNG TIN MƠ PHỎNG  BÀI TỐN BẰNG THUẬT TỐN MINMIAX ­ Giáo viên hướng dẫn: Tiến sĩ – Phùng Thế Bảo ­ Người thực hiện:       Đinh Hữu Luận       Đỗ Hồng Cương Đồn Anh Khoa Nguyễn Mai Chí Trung TP.Hồ Chí Minh 2015 MỞ ĐẦU ­­­­­­­    ­­­­­­­ Trong mọi thời đại, việc tìm ra lời giải tối ưu cho một bài tốn nào đó là một  vấn đề rất khó để thực hiện. Đã có rất nhiều nghiên cứu để tìm ra các phương pháp  hữu hiệu giải quyết các bài tốn tối ưu này. Có lẽ thuật tốn được sử dụng nhiều  nhất, quan trọng nhất là kỹ thuật “ chia để trị”. Kỷ thuật này sẽ chia bài tốn thành N  bài tốn nhỏ hơn, thực hiện lời giải cho từng bài tốn nhỏ này và từ đó xây dựng thuật  tốn cho bài tốn tổng hợp.  Một trong những bài tốn trong thực tế ta thường gặp là: Sắp xếp trộn hoặc tìm  giá trị Min Max…… và những bài tốn trên có thể tìm ra lời giải dễ dàng bằng cách sử  dụng phương pháp chia để trị Hiểu rõ và cài đặt được các thuật tốn, cũng như tìm ra lời giải tối ưu cho một  bài tốn nào đó dựa trên những tài liệu đã học là một u cầu khơng thể thiếu đối với  sinh viên nghành Tin học. Tuy nhiên, trong giới hạn của đề tài, chúng em khơng thể  trình bày tất cả các thuật tốn có liên quan đến đồ thị mà ở đây húng em chỉ trình bày  “bài tốn Min Max”. Đây cũng là nội dung chính của đề tài  chúng em đã chọn MỤC LỤC • • • • Phần 1:Mục tiêu và hướng giải quyết Phần 2:Cở sở lý thuyết • Bài tốn • Ý tưởng • Giải thuật • Minh họa • Đánh giá độ phức tạp   Phần 3: Mơ phỏng chương trình • Giới thiệu về chương  trình • Mô tả bằng lời • Mô tả bằng sơ đồ khối • Kết quả Phần 4: Tài liệu tham khảo PHẦN 1  MỤC TIÊU VÀ HƯỚNG  GIẢI QUYẾT            1. Mục tiêu: • Nắm vững các khái niệm của phương pháp chia  để trị, các bước giải một bài tốn dùng phương  pháp chia để trị • Nắm vững thuật tốn  “bài tốn MinMax” 2.u cầu cần đạt: • Thiết kế đánh giá được bài tốn: ý tưởng, giải  thuật, minh họa và đánh giá độ phức tạp của  giải thuật • Mơ phong : mơ ph ̉ ỏng bằng lời và bằng sơ  đồ  khối “ bài tốn MinMax” 3.Hướng giải quyết: • Về lý thuyết: tìm hiểu các khái niệm phương  pháp chia để trị, giải thuật được u cầu trong  đề tài • Về chương trình: Sử dụng ngơn ngữ Visual  Basic .Net ( Visual Basic 2008) để viết chương  trình   PHẦN 2  CƠ SỞ LÝ THUYẾT • Giới thiệu phương pháp chia để trị  Chia để trị là một trong những phương pháp thiết kế giải thuật  cơ bản bao gồm các thao tác: Chia: chia bài tốn cần giải thành một loạt các bài tốn con độc lập Trị: đòi hỏi việc giải quyết các bài tốn con thu được Tổng hợp:thực hiện việc xây dựng lời giải của bài tốn đặt ra từ  các lời giải của bài tốn con SƠ ĐỒ CHUNG Sơ đồ chung của thuật tốn chia để trị( Divide and Conquer) gồm 3 thành phần  • Chia (Divide) : chia bài tốn cần giải S ra thành các bài tốn  con S1, S2, S3…… • Trị (conquer) : giải các bài tốn con một cách đẹ quy • Tổng hợp (Combie) : tổng hợp lời giải các bài tốn S1, S2,  S3…  thành lời giải của bài tốn S Để phân tích độ phức tạp của thuật tốn có thể sử dụng cơng  thức đệ quy Vấn đề đặt ra là cần giải các bài tốn con độc lập bằng cách  nào ? đó là vấn đề trung tâm của bài tốn • Bài tốn MinMax • Phát biểu bài tốn Tìm giá trị Min, Max trong đoạn a[1…r] của mảng a[1…n] Ý tưởng Tại mỗi bước, chia đơi đoạn cần tìm rồi tìm Min, Max của từng  đoạn, sau đó tổng hợp kết quả lại Nếu đoạn chia chỉ có 1 phần tử thì Min = Max và bằng phần tử đó Minh họa: 10 15 19 • I A[i]  Tìm giá trị Min, Max trong đoạn a[2….7] của mảng a[1… 7] Ký hiệu:       MinMax(a,1,r,Min,Max) cho Min và Max trong đoạn a[1….r]       MinMax(a,2,7,Min,Max) cho Min=0 và Max =15 trong đoạn  a[2 7] • Thuật toán Input : a[l r], ( l ≤ r ) Output: Min = Min (a[l], ,a[r]),    Max = Max (a[l], ,a[r])    MinMax(a,l, r, Min, Max) if (l == r) {     Min = a[l];     Max = a[l]; }      Else  {          MinMax(a,l, (l+r) / 2, Min1, Max1);         MinMax(a,(l+r) /2 + 1, r , Min2, Max2);      If (Min1  Max2)            Max = Max1;  Else •           Max = Max2; } Độ phức tạp thuật tốn Gọi t(n) là số phép tốn so sánh cần thực hiện. Khi đó ta có:                             T(n / 2) + T(n / 2) + 2;n > 2   T(n) =               1;n = 2                             0;n = 1 Với n = 2k , thì T(n)  =  2 + 2T(n/2) = 2 + 22 + 22T(n/22) = ….= 2k­1T(2) + ∑i=1k­12i          = ∑ki=1 2i – 2k­1 = 2k+1 – 2k­1 – 2 = (3n/2) – 2 Vậy T(n) € O (n).  • Cài đặt Void MinMax(int a[.], int l, int r, int &Min, int &Max) {      Int Min1,Min2,Max1,Max2 ;   If(l==r)   {     Min = a[l] ;     Max = a[l] ;   }    Else    {    MinMax( a,l,(l+r)/2, Min1, Max1) ;   MinMax(a,(l+r)/2 + 1,r,Min2,Max2) ;   If (Min1  Max2)      Max = Max1 ;     Else       Max = Max2 ;     } } PHẦN 3    MƠ PHỎNG CHƯƠNG TRÌNH Giới thiệu về chương  trình using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; namespace Chia_De_Tri _Min_Max { public partial class frmMain : Form { int[] manglamviec = null; int min, max, x, y, n; Button btnCreate = new Button(); public frmMain() { InitializeComponent(); } void tim(int[] manglamviec, int x, int y, ref int min, ref int max) { int min1 = 0, min2 = 0, max1 = 100, max2 = 100; if (x == y) { = manglamviec[x]; max = manglamviec[x]; if(btnCreate.Text==min.ToString() || btnCreate.Text == max.ToString()) { } else { } tim(manglamviec, (x + y) / + 1, y, ref min1, ref max1); tim(manglamviec, x, (x + y) / 2, ref min2, ref max2); if (min1 < min2) = min1; else = min2; } if (max1 < max2) max = max2; else max = max1; } private void btnExit_Click_1(object sender, EventArgs e) { DialogResult thongbao; thongbao = MessageBox.Show("Bạn có chắn muốn khỏi chương trình?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (thongbao == DialogResult.Yes) this.Close(); } private void btnReset_Click(object sender, EventArgs e) { txtPhanTu.Text = ""; txtMax.Text = ""; txtMin.Text = ""; txtXuatmang.Text = ""; txtPhanTu.Focus(); xoa(); } private void btnStart_Click(object sender, EventArgs e) { if (txtMin.Text != "".ToString()) { MessageBox.Show("Vui lòng Restart trước chạy lại chương trình!", "Thông báo"); txtPhanTu.Focus(); } else { int dem = 0; try { n = int.Parse(txtPhanTu.Text); } catch { MessageBox.Show("Nhập giá trị phần tử mảng kiểu integer.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); dem++; txtPhanTu.Focus(); } if (dem == 0) { int[] mangso = new int[n]; //khoi tao gia tri cho mang Random bien = new Random(); for (int i = 0; i < n; i++) { mangso[i] = bien.Next(-100, 100); } ///duyet mang de xuat man hinh manglamviec = mangso; txtXuatmang.Text = ""; int dodai = mangso.Length; for (int i = 0; i < dodai; i++) { txtXuatmang.Text += mangso[i].ToString() + " "; } x = 0; y = manglamviec.Length; = manglamviec[0]; max = manglamviec[y - 1]; tim(manglamviec, x, y - 1, ref min, ref max); txtMax.Text = max.ToString(); txtMin.Text = min.ToString(); khoiTao(); if(btnCreate.Text==min.ToString()|| btnCreate.Text==max.ToString()) { btnCreate.Location = new Point(100, 50); } } } } private void txtPhanTu_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsDigit(e.KeyChar)) e.Handled = true; } public void khoiTao() { int left = 30; int top = 240; int sizes = * (420 / n) / 10; int sizess = (420 / n); for (int i = 0; i < n; i++) { Button btnCreate = new Button(); btnCreate.Text = manglamviec[i].ToString(); btnCreate.ForeColor = Color.White; btnCreate.BackColor = Color.Black; btnCreate.Font = new Font(btnCreate.Font, FontStyle.Bold); btnCreate.Font = new Font("Time New Roman", 12); btnCreate.Size = new Size(sizes, 50); if (btnCreate.Text == txtMax.ToString() || btnCreate.Text == txtMin.ToString()) { btnCreate.Location = new Point(left, top + 300); } else { btnCreate.Location = new Point(left, top); } this.Controls.Add(btnCreate); } left = left + sizess; } public void xoa() { Application.Restart(); } private void btnAbout_Click(object sender, EventArgs e) { frmAbout frm = new frmAbout(); frm.Show(); } private void frmMain_Load(object sender, EventArgs e) { } } } Mơ phỏng bằng lời  • Nội dung phần mềm:  Phần mềm được thiết kế trên giao diện Microsoft Visual bằng ngơn ngữ  C# Sau đây chi tiết về giao diện khi khởi động: Bắt đầu chương trình ta nhập N phần hay chiều dài của mảng như hình  dưới: Sau đó ta bấm     để bắt đầu tiềm min max, giá trị trong dãy được  chọn ngẫu nhiên trong khoảng ­100 đến 100 Ví dụ ta nhập số phần tử là 5 thì giao diện xuất hiện Các số được chọn ngẫu nhiên  Hoặc có thể thấy các giá trị ngẫu nhiên bên trên góc phải giao diện Kết quả tìm được giá trị Min Max sẽ xuất hiên  Để thực hiện nhập lại giá trị mảng ta nhấn vào nút  giao diện ban đầu và có thể nhập lại số phần tử mảng  để trở lại  Để thốt giao diện ta có thể bấm vào            Có thể bấm vào  • Các cơng nghệ sử dụng:   hoặc     để biết thơng tin chi tiết Sử dụng phần mềm Microsoft Visual 2010 (MV) để tạo giao diện Trong MV ta thiết kế trên Windown Form sử dụng ngơn ngữ C# để viết  chương trình • Sau đây là sơ đồ khối: ... nhất, quan trọng nhất là kỹ thuật “ chia để trị”. Kỷ thuật này sẽ chia bài tốn thành N  bài tốn nhỏ hơn, thực hiện lời giải cho từng bài tốn nhỏ này và từ đó xây dựng thuật tốn cho bài tốn tổng hợp.  Một trong những bài tốn trong thực tế ta thường gặp là: Sắp xếp trộn hoặc tìm ... Để phân tích độ phức tạp của thuật tốn có thể sử dụng cơng  thức đệ quy Vấn đề đặt ra là cần giải các bài tốn con độc lập bằng cách  nào ? đó là vấn đề trung tâm của bài tốn • Bài tốn MinMax • Phát biểu bài tốn Tìm giá trị Min, Max trong đoạn a[1…r] của mảng a[1…n]... để trị, các bước giải một bài tốn dùng phương  pháp chia để trị • Nắm vững thuật tốn   bài tốn MinMax 2.u cầu cần đạt: • Thiết kế đánh giá được bài tốn: ý tưởng, giải  thuật,  minh họa và đánh giá độ phức tạp của 

Ngày đăng: 09/01/2020, 16:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w