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 1TR ƯỜ 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 2TP.H Chí Minh 2015 ồ
Trang 3M Đ 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 4PH 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 5PH 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) = ….= 2k1T(2) + ∑i=1k12i
= ∑k
i=1 2i – 2k1 = 2k+1 – 2k1 – 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 8If (Min1 < Min2) Min = Min1 ; Else
Min = Min2 ;
If (Max1 > Max2) Max = Max1 ; Else
Max = Max2 ; }
}
Trang 9PH 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 12public 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 13B 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 14Cá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 ơ ồ ố :