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 92 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

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 717,17 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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.

Trang 1

TR ƯỜ NG Đ I H C TR N Đ I NGHĨA Ạ Ọ Ầ Ạ

KHOA CÔNG NGH  THÔNG TIN

­ 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 ữ ậ

      Đ  Hoàng C ỗ ươ ng Đoàn Anh Khoa Nguy n Mai Chí Trung ễ

Trang 2

TP.H  Chí Minh 2015 ồ

Trang 3

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 toá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 toán t i  u này. Có l  thu t toá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 toán thành N  ấ ọ ấ ỹ ậ ể ị ỷ ậ ẽ bài toán nh  h n, th c hi n l i gi i cho t ng bài toán nh  này và t  đó xây d ng thu t  ỏ ơ ự ệ ờ ả ừ ỏ ừ ự ậ toán cho bài toán t ng h p.  ổ ợ

M t trong nh ng bài toá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 toá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 toán, cũng nh  tìm ra l i gi i t i  u cho m t  ậ ư ờ ả ố ư ộ bài toán nào đó d a trên nh ng tài li u đã h c là m t yê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 toán có liên quan đ n đ  th  mà   đây húng em ch  trình bày  ấ ả ậ ế ồ ị ở ỉ

“bài toá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 toá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 ầ ệ ả

Trang 4

PH N 1

 M C TIÊU VÀ H Ụ ƯỚ NG  

       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 toán dùng ph ả ộ ươ ng  pháp chia đ  tr ể ị

• N m v ng thu t toán  “bài toán MinMax” ắ ữ ậ 2.Yêu c u c n đ t: ầ ầ ạ

• Thi t k  đánh giá đ ế ế ượ c bài toá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 toá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 yê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  

Trang 5

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  ế ế ả ậ

T ng h p:th c hi n vi c xây d ng l i gi i c a bài toán đ t ra t   ổ ợ ự ệ ệ ự ờ ả ủ ặ ừ

các l i gi i c a bài toán con ờ ả ủ

S  Đ  CHUNG Ơ Ồ

S  đ  chung c a thu t toán chia đ  tr ( Divide and Conquer) g m 3 thành ph n  ơ ồ ủ ậ ể ị ồ ầ

Chia (Divide) : chia bài toán c n gi i S ra thành các bài toán  ầ ả con S1, S2, S3……

Tr  (conquer) : gi i các bài toán con m t cách đ  quy ị ả ộ ẹ

T ng h p (Combie) : t ng h p l i gi i các bài toán S1, S2,  ổ ợ ổ ợ ờ ả S3…  thành l i gi i c a bài toán S ờ ả ủ

Đ  phân tích đ  ph c t p c a thu t toán có th  s  d ng công  ể ộ ứ ạ ủ ậ ể ử ụ

th c đ  quy ứ ệ

V n đ  đ t ra là c n gi i các bài toán con đ c l p b ng cách  ấ ề ặ ầ ả ộ ậ ằ nào ? đó là v n đ  trung tâm c a bài toán ấ ề ủ

• Phát bi u bài toán

Tìm giá tr  Min, Max trong đo n a[1…r] c a m ng a[1…n] ị ạ ủ ả

Trang 6

• Ý 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: ọ

 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 < Min2)        Min = Min1;

   Else       Min = Min2;

     If (Max1 > Max2)        Max = Max1;

 Else

Trang 7

}

• Đ  ph c t p thu t toán ộ ứ ạ ậ

G i t(n) là s  phép toá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 = 2 ớ k , thì

T(n)  =  2 + 2T(n/2) = 2 + 22 + 22T(n/22) = ….= 2k­1T(2) + ∑i=1k­12i

         = ∑k

i=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) ;

Trang 8

  If (Min1 < Min2)       Min = Min1 ;   Else 

         Min = Min2 ;

  If (Max1 > Max2)      Max = Max1 ;     Else 

     Max = Max2 ;     }

}

Trang 9

PH N 3

    MÔ PH NG CH Ỏ ƯƠ NG TRÌNH

Gi i thi u v  ch ớ ệ ề ươ ng  trình

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Chia_De_Tri _Min_Max

{

public partial class frmMain : Form

{

int[] manglamviec = null;

int min, max, x, y, n;

Trang 10

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) {

min = manglamviec[x]; max = manglamviec[x]; if(btnCreate.Text==min.ToString() || btnCreate.Text == max.ToString()) {

}

}

else {

tim(manglamviec, (x + y) / 2 + 1, y, ref min1, ref max1); tim(manglamviec, x, (x + y) / 2, ref min2, ref max2); if (min1 < min2) min = min1; else min = 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 c ch n mu n thoát 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 khi chạy lại chương trình!", "Thông báo");

txtPhanTu.Focus();

Trang 11

}

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 ra 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;

min = 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;

}

Trang 12

public void khoiTao()

{

int left = 30;

int top = 240;

int sizes = 9 * (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: ế ề ệ ở ộ

Trang 13

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 ụ ậ ố ầ ử ệ ấ ệ

Trang 14

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  ể ự ệ ậ ạ ị ả ấ  đ  tr  l i  ể ở ạ giao di n ban đ u và có th  nh p l i s  ph n t  m ng ệ ầ ể ậ ạ ố ầ ử ả

Trang 15

Đ  thoát giao di n ta có th  b m vào  ể ệ ể ấ  ho c  ặ  

      Có th  b m vào  ể ấ  đ  bi t thông tin chi ti t ể ế ế

• Các công ngh  s  d ng:  ệ ử ụ

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 ơ ồ ố :

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

🧩 Sản phẩm bạn có thể quan tâm

w