1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo trình môn toán rời rạc

166 302 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 166
Dung lượng 4,73 MB

Nội dung

LỜI NÓI ĐẦU Được động viên mạnh mẽ đồng nghiệp Khoa Tốn-Cơ-Tin học, Cơng nghệ Thông tin Vật lý (Trường Đại học Khoa học-Đại học Huế), Khoa Toán Tin học (Trường Đại học Sư phạm-Đại học Huế) đặc biệt nhu cầu học tập sinh viên Đại học Huế Khoa nói học viên cao học ngành Phương pháp giảng dạy Tốn, chúng tơi mạnh dạn viết giáo trình Tốn rời rạc thị trường sách có nhiều tài liệu liên quan đến Tốn rời rạc Điều mà chúng tơi mong muốn kiến thức học phần phải đưa vào đầy đủ, đọng, xác, cập nhật, bám sát theo yêu cầu đào tạo sinh viên ngành Cơng nghệ Thơng tin, Tốn-Tin, Vật lý-Tin số ngành kỹ thuật khác trường đại học cao đẳng Với nổ lực thân, thiết nghĩ tài liệu tham khảo tốt cho giáo viên giảng dạy học phần toán rời rạc, học viên cao học ngành Phương pháp giảng dạy Tốn, thí sinh thi vào cao học ngành công nghệ thông tin, sinh viên thuộc ngành đề cập học sinh thuộc khối chuyên Toán, chuyên Tin Nội dung tài liệu bố trí phần, khơng kể lời nói đầu, mục lục, tài liệu tham khảo phần phụ lục: Phần dành cho Chương I đề cập đến Thuật toán; Phần dành cho Chương II nói đến tốn đếm; Phần 3, phần chiếm nhiều trang giáo trình, bàn Lý thuyết đồ thị ứng dụng gồm chương: Đồ thị, Đồ thị Euler đồ thị Hamilton, Một số toán tối ưu đồ thị, Cây, Đồ thị phẳng tô màu đồ thị; Phần dành cho Chương 8, chương cuối cùng, đề cập đến Đại số Boole Trong chương, chứng minh định lý, mệnh đề trình bày chi tiết, ngoại trừ số định lý có phần chứng minh q phức tạp chúng tơi bỏ qua Trong phần chương có nhiều ví dụ cụ thể minh hoạ cho khái niệm kết chúng Cuối chương tập chọn lọc từ dễ đến khó, bám theo nội dung chương Chúng xin chân thành cám ơn đồng nghiệp động viên góp ý cho cơng việc viết giáo trình Tốn rời rạc lời cám ơn đặc biệt xin dành cho Khoa Công nghệ Thông tin giúp đỡ quý báu tạo điều kiện thuận lợi cho việc xuất giáo trình Tác giả mong nhận giáo đồng nghiệp độc giả thiếu sót khó tránh khỏi sách Mùa Thu năm 2003 MỤC LỤC Lời nói đầu Mục lục Chương I: Thuật toán 1.1 Khái niệm thuật toán 1.2 Thuật tốn tìm kiếm 1.3 Độ phức tạp thuật toán 1.4 Số nguyên thuật toán 12 1.5 Thuật toán đệ quy 17 Bài tập Chương I 19 Chương II: Bài toán đếm 22 2.1 Cơ sở phép đếm 22 2.2 Nguyên lý Dirichlet 25 2.3 Chỉnh hợp tổ hợp suy rộng 28 2.4 Sinh hoán vị tổ hợp 30 2.5 Hệ thức truy hồi 32 2.6 Quan hệ chia để trị 34 Bài tập Chương II 35 Chương III: Đồ thị 37 3.1 Định nghĩa thí dụ 37 3.2 Bậc đỉnh 39 3.3 Những đơn đồ thị đặc biệt 41 3.4 Biểu diễn đồ thị ma trận đẳng cấu đồ thị 3.5 Các đồ thị từ đồ thị cũ 46 3.6 Tính liên thơng 47 Bài tập Chương III 51 Chương IV: Đồ thị Euler Đồ thị Hamilton 4.1 Đường Euler đồ thị Euler 54 4.2 Đường Hamilton đồ thị Hamilton Bài tập Chương IV 64 Chương V: Một số tốn tối ưu đồ thị 5.1 Đồ thị có trọng số toán đường ngắn 5.2 Bài toán luồng cực đại 72 5.3 Bài toán du lịch 79 Bài tập Chương V 84 44 54 58 67 67 Chương VI: Cây 87 6.1 Định nghĩa tính chất 87 6.2 Cây khung tốn tìm khung nhỏ 6.3 Cây có gốc 93 6.4 Duyệt nhị phân 94 Bài tập Chương VI 101 Chương VII: Đồ thị phẳng tô màu đồ thị 7.1 Đồ thị phẳng 104 7.2 Đồ thị không phẳng 106 7.3 Tô màu đồ thị 107 Bài tập Chương VII 112 Chương VIII: Đại số Boole 114 8.1 Khái niệm đại số Boole 114 8.2 Hàm Boole 117 8.3 Mạch lôgic 120 8.4 Cực tiểu hố mạch lơgic 125 Bài tập Chương VIII 132 Tài liệu tham khảo 134 Phần phụ lục 135 Phụ lục 135 Phụ lục 158 88 104 CHƯƠNG I: THUẬT TOÁN 1.1 KHÁI NIỆM THUẬT TOÁN 1.1.1 Mở đầu: Có nhiều lớp tốn tổng qt xuất toán học rời rạc Chẳng hạn, cho dãy số nguyên, tìm số lớn nhất; cho tập hợp, liệt kê tập nó; cho tập hợp số nguyên, xếp chúng theo thứ tự tăng dần; cho mạng, tìm đường ngắn hai đỉnh Khi giao cho tốn việc phải làm xây dựng mơ hình dịch tốn thành ngữ cảnh toán học Các cấu trúc rời rạc dùng mơ hình tập hợp, dãy, hàm, hoán vị, quan hệ, với cấu trúc khác đồ thị, cây, mạng - khái niệm nghiên cứu chương sau Lập mơ hình tốn học thích hợp phần q trình giải Để hồn tất q trình giải, cịn cần phải có phương pháp dùng mơ hình để giải tốn tổng qt Nói cách lý tưởng, đòi hỏi thủ tục, dãy bước dẫn tới đáp số mong muốn Một dãy bước vậy, gọi thuật toán Khi thiết kế cài đặt phần mềm tin học cho vấn đề đó, ta cần phải đưa phương pháp giải mà thực chất thuật tốn giải vấn đề Rõ ràng rằng, khơng tìm phương pháp giải khơng thể lập trình Chính thế, thuật tốn khái niệm tảng hầu hết lĩnh vực tin học 1.1.2 Định nghĩa: Thuật toán bảng liệt kê dẫn (hay quy tắc) cần thực theo bước xác định nhằm giải toán cho Thuật ngữ “Algorithm” (thuật toán) xuất phát từ tên nhà toán học Ả Rập AlKhowarizmi Ban đầu, từ algorism dùng để quy tắc thực phép tính số học số thập phân Sau đó, algorism chuyển thành algorithm vào kỷ 19 Với quan tâm ngày tăng máy tính, khái niệm thuật tốn cho ý nghĩa chung hơn, bao hàm thủ tục xác định để giải tốn, khơng phải thủ tục để thực phép tính số học Có nhiều cách trình bày thuật tốn: dùng ngơn ngữ tự nhiên, ngôn ngữ lưu đồ (sơ đồ khối), ngơn ngữ lập trình Tuy nhiên, dùng ngơn ngữ lập trình lệnh phép ngơn ngữ dùng điều thường làm cho mơ tả thuật tốn trở nên rối rắm khó hiểu Hơn nữa, nhiều ngơn ngữ lập trình dùng rộng rãi, nên chọn ngơn ngữ đặc biệt điều người ta khơng muốn Vì thuật tốn ngồi việc trình bày ngơn ngữ tự nhiên với ký hiệu toán học quen thuộc cịn dùng dạng giả mã để mơ tả thuật toán Giả mã tạo bước trung gian mơ tả thuật tốn ngơn ngữ thơng thường thực thuật tốn ngơn ngữ lập trình Các bước thuật tốn rõ cách dùng lệnh giống ngơn ngữ lập trình Thí dụ 1: Mơ tả thuật tốn tìm phần tử lớn dãy hữu hạn số nguyên a) Dùng ngôn ngữ tự nhiên để mô tả bước cần phải thực hiện: Đặt giá trị cực đại tạm thời số nguyên dãy (Cực đại tạm thời số nguyên lớn kiểm tra giai đoạn thủ tục.) So sánh số nguyên tiếp sau với giá trị cực đại tạm thời, lớn giá trị cực đại tạm thời đặt cực đại tạm thời số ngun Lặp lại bước trước cịn số ngun dãy Dừng khơng cịn số nguyên dãy Cực đại tạm thời điểm số nguyên lớn dãy b) Dùng đoạn giả mã: procedure max (a1, a2, , an: integers) max:= a1 for i:= to n if max 0 Định nghĩa 1:Ta nói hàm f(n) có cấp thấp hay hàm g(n) tồn số C>0 số tự nhiên n0 cho |f(n)| ≤ C|g(n)| với n≥n0 Ta viết f(n)=O(g(n)) cịn nói f(n) thoả mãn quan hệ big-O g(n) Theo định nghĩa này, hàm g(n) hàm đơn giản được, đại diện cho “sự biến thiên” f(n) Khái niệm big-O dùng toán học gần kỷ Trong tin học, sử dụng rộng rãi để phân tích thuật tốn Nhà toán học người Đức Paul Bachmann người đưa khái niệm big-O vào năm 1892 Thí dụ 5: Hàm f(n)= hàm bậc hai n(n + 3) hàm bậc hai đơn giản n2 Ta có: 2 f(n)==O(n ) ≤ n với n≥3 (C=1, n(n + 3) n0=3) Một cách tổng quát, f(n)=aknk+ak-1nk-1+ +a1n+a0 f(n)=O(nk) Thật vậy, với n>1, |f(n)|| ≤ |ak|nk+|ak-1|nk-1+ +|a1|n+|a0| = nk(|ak|+|ak-1|/n+ +|a1|/nk-1+a0/nk) ≤ nk(|ak|+|ak-1|+ +|a1|+a0) Điều chứng tỏ |f(n)| ≤ Cnk với n>1 Cho g(n)=3n+5nlog2n, ta có g(n)=O(nlog2n) Thật vậy, 3n+5nlog2n = n(3+5log2n) ≤ n(log2n+5log2n) = 6nlog2n với n≥8 (C=6, n0=8) Mệnh đề: Cho f1(n)=O(g1(n)) f2(n) O(g2(n)) Khi (f1 + f2)(n) = O(max(|g1(n)|,|g2(n)|), (f1f2)(n) = O(g1(n)g2(n)) Chứng minh Theo giả thiết, tồn C1, C2, n1, n2 cho |f1(n)| ≤ C1|g1(n)| |f2(n)| ≤ C2|g2(n)| với n > n1 n > n2 Do |(f1 + f2)(n)| = |f1(n) + f2(n)| ≤ |f1(n)| + |f2(n)| ≤ C1|g1(n)| + C2|g2(n)| ≤ (C1+C2)g(n) với n > n0=max(n1,n2), đâyC=C1+C2 g(n)=max(|g1(n)| , |g2(n)|) |(f1f2)(n)| = |f1(n)||f2(n)| ≤ C1|g1(n)|C2|g2(n)| ≤ C1C2|(g1g2)(n)| với n > n0=max(n1,n2) Định nghĩa 2: Nếu thuật tốn có độ phức tạp f(n) với f(n)=O(g(n)) ta 10 TÀI LIỆU THAM KHẢO [1] Nguyễn Cam-Chu Đức Khánh, Lý thuyết đồ thị, NXB Thành phố Hồ Chí Minh, 1999 [2] Hồng Chúng, Đại cương toán học hữu hạn, NXB Giáo dục, 1997 [3] Phan Đình Diệu, Lý thuyết Ơ-tơ-mat thuật tốn, NXB Đại học THCN, 1977 [4] Đỗ Đức Giáo, Toán rời rạc, NXB Đại học Quốc Gia Hà Nội, 2000 [5] Nguyễn Xuân Quỳnh, Cơ sở toán rời rạc ứng dụng, NXB Giáo dục, 1995 [6] Đặng Huy Ruận, Lý thuyết đồ thị ứng dụng, NXB Khoa học Kỹ thuật, 2000 [7] Nguyễn Tơ Thành-Nguyễn Đức Nghĩa, Tốn rời rạc, NXB Giáo dục, 1997 [8] Claude Berge, Théorie des graphes et ses applications, Dunod, Paris 1963 [9] Richard Johnsonbaugh, Discrete Mathematics, Macmillan Publishing Company, New york 1992 152 PHẦN PHỤ LỤC Phụ lục Unit chứa khai báo cấu trúc liệu cho đồ thị cài đặt thủ tục tìm đường ngắn theo thuật toán unit Func_DoThi; interface type TypeToaDo=record x,y:integer; end; TypeChiPhi=record VoCung:boolean;//Neu VoCung=True thi co nghia la chi phi bang Vo Cung, nguoc lai thi chi phi bang Gia Gia:real; end; TypeDinh=record Ten:String; ToaDo:TypeToaDo; MucKichHoat:Byte; end; TypeDanhSachDinh=array of TypeDinh; TypeCanh=record DinhDau,DinhCuoi:Integer;//Tham chieu danh sach Dinh TrongSo:TypeChiphi; end; TypeDanhSachCanh=Array of TypeCanh; TypeDoThi=Record SoDinh:Integer; DSDinh:TypeDanhSachDinh; SoCanh:Integer; DSCanh:TypeDanhSachCanh; end; TypeCost=Array of Array of TypeChiPhi; TypeDist=Array of TypeChiPhi; TypeDuongDi=Array of Integer; Function DuongDiNganNhat(G:TypeDoThi;X,Y:Integer;Var DuongDiTuXdenY:TypeDuongDi;Var ChiPhi:real):Boolean; Procedure DeleteGraph(VAR G:TypeDoThi); var G:TypeDoThi; implementation 153 Function DuongDiNganNhat(G:TypeDoThi;X,Y:Integer;Var DuongDiTuXdenY:TypeDuongDi;var ChiPhi:real):Boolean; Var s:Array of byte;{S[i]=0 hoac S[i]=1} Cost:TypeCost;Dist:TypeDist;MocXich:Array of Integer; M,i,j,K,u,w:Integer; Min:TypeChiPhi; begin M:=G.SoDinh; {Thuc M=N, ma tran vuong kich thuoc MxM} Setlength(Cost,M,M); Setlength(Dist,M); Setlength(MocXich,M); Setlength(S,M); for i:=0 to M-1 for j:=0 to M-1 Cost[i,j].VoCung:=True; for k:=0 to G.SoCanh-1 begin i:=G.DSCanh[K].DinhDau;j:=G.DSCanh[K].DinhCuoi; Cost[i,j]:=G.DSCanh[K].TrongSo; end; for i:=0 to M-1 begin S[i]:=0;Dist[i]:=Cost[X,i];MocXich[i]:=X;end; S[X]:=1;Dist[X].VoCung:=False;Dist[X].Gia:=0;K:=2; {Dua X vao S} while k(Dist[u].Gia+Cost[u,w].Gia))) then begin Dist[w].VoCung:=false; 154 Dist[w].Gia:=Dist[u].Gia+Cost[u,w].Gia; MocXich[w]:=u;{Duong di ngan nhat den W thi phai di qua U} end; end; end; {Tim duong di tu X den Y} Setlength(DuongDiTuXdenY,M); If not Dist[Y].VoCung then begin DuongDiNganNhat:=true; ChiPhi:=Dist[Y].gia; {Xac dinh cac dinh phai di qua (theo day chuyen nguoc)} {k:=0;DuongDiTuXdenY[k]:=Y;k:=k+1; i:=MocXich[Y];DuongDiTuXdenY[k]:=i;} K:=0;i:=Y;DuongDiTuXdenY[k]:=i; while iX begin i:=MocXich[i];k:=k+1;DuongDiTuXdenY[k]:=i; end; {Vi chuoi chua DuongDiTuXdenY la mot chuoi nguoc nen ta se dao lai} for i:=0 to (k div 2) begin j:=DuongDiTuXdenY[i]; DuongDiTuXdenY[i]:=DuongDiTuXdenY[K-i]; DuongDiTuXdenY[K-i]:=j; end; {Dat lai kich thuoc cua mang DuongDiTuXdenY bang so dinh phai di qua} Setlength(DuongDiTuXdenY,K+1); end else DuongDiNganNhat:=false; Setlength(Cost,0,0); Setlength(Dist,0); Setlength(MocXich,0); Setlength(S,0); end; Procedure DeleteGraph(VAR G:TypeDoThi); begin G.SoDinh:=0; G.SoCanh:=0; Setlength(G.DSDinh,0); Setlength(G.DSCanh,0); end; BEGIN G.SoDinh :=0;G.SoCanh:=0; END Thiết kế giao diện cho chương trình (Form 2) 155 Với đối tượng gồm: Các khai báo cài đặt cho chương form2: unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, Buttons, ExtCtrls,Func_Dothi,Func_Graph, Menus,IdGlobal, ImgList,Jpeg; const BanKinh=20; RMuiTen=10; 156 type TForm2 = class(TForm) Panel1: TPanel; MaskEdit1: TMaskEdit; MaskEdit2: TMaskEdit; StaticText1: TStaticText; StaticText2: TStaticText; MainMenu1: TMainMenu; imduongdingannhat1: TMenuItem; imduongdingannhat2: TMenuItem; Caykhungbenhat1: TMenuItem; Image1: TImage; PopupMenu1: TPopupMenu; Rename1: TMenuItem; Delete1: TMenuItem; N1: TMenuItem; N2: TMenuItem; ImageList1: TImageList; File1: TMenuItem; New1: TMenuItem; Open1: TMenuItem; Save1: TMenuItem; N3: TMenuItem; Exit1: TMenuItem; ScrollBox1: TScrollBox; PaintBox1: TPaintBox; Save2: TMenuItem; N6: TMenuItem; ExportPicturefile1: TMenuItem; DeleteAll1: TMenuItem; SaveDialog1: TSaveDialog; OpenDialog1: TOpenDialog; ImageList2: TImageList; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; ExportPicturefile2: TMenuItem; N4: TMenuItem; procedure PaintBox1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure PaintBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); Procedure DrawPaint(PaintBox:TPaintBox;Bitmap:TBitmap); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject); function DownDinh(x,y:integer;G:TypeDothi):integer; procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); 157 procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure HienThamSoCung(G:TypeDoThi); procedure MaskEdit1Change(Sender: TObject); procedure MaskEdit2Change(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); procedure imduongdingannhat2Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); procedure Rename1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Delete1Click(Sender: TObject); procedure DeleteAll1Click(Sender: TObject); procedure Save1Click(Sender: TObject); procedure Open1Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure New1Click(Sender: TObject); procedure ExportPicturefile2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; Pic:Tbitmap; Mouse_Down:Boolean; Dx,Dy,DinhDown:Integer; TextSizeTrongSo:Integer=10; Filename:String; FileChanged:Boolean; procedure Vecung(Pic:Tbitmap;T1,T2:TypeToaDo;Gia:Real;Line:Boolean;LineColor,TextColor:Tcolor); Procedure VeDoThi(G:TypeDothi;Pic:Tbitmap;Imagelist:Timagelist); Function Delen(x,y,Width,Height:integer;DinhDown:integer):boolean; Procedure Veline(T1,T2:TypeToaDo;Gia:real;Pic:Tbitmap;LineColor:Tcolor;TimeDelay:TdateTime); implementation {$R *.dfm} Function MidPoint(T1,T2:TypeToaDo;PhanTram:Integer):TypeToaDo; Var Dx,Dy:integer; begin Dx:=T2.x -T1.x ;Dy:=T2.y -T1.y ; MidPoint.x:=T1.x +Round(Dx*PhanTram/100); 158 MidPoint.y:=T1.y +Round(Dy*PhanTram/100); end; Procedure Veline(T1,T2:TypeToaDo;Gia:real;Pic:Tbitmap;LineColor:Tcolor;TimeDelay:TdateTime); var i:integer;T3:TypeToaDo;TimeNow:TDateTime; TempPic:Tbitmap; begin TempPic:=Tbitmap.Create; For i:=1 to 100 begin TempPic.Assign(Pic); TimeNow:=Time; T3:=MidPoint(T1,T2,i); Vecung(TempPic,T1,T3,Gia,True,RGB(255,0,0),RGB(0,0,255)); Form2.DrawPaint(Form2.PaintBox1,TempPic); repeat Application.ProcessMessages; until (TimeNow+TimeDelay)>Time; end; TempPic.Free; end; Procedure TForm2.DrawPaint(PaintBox:TPaintBox;Bitmap:TBitmap); begin Paintbox.Canvas.Draw(0,0,Bitmap); end; procedure CatZeroThua(var St:string); var i,P,L:integer; begin L:=length(st); If St[L]=' ' then begin delete(st,1,L);L:=length(st);end; P:=pos('.',st);i:=L; If P=0 then exit; while (i>P)and(st[i]='0') i:=i-1; If st[i]='.' then i:=i-1; delete(St,i+1,L-i); end; Function Quay(P,Tam:TypeToaDo;Goc:Real):TypeToaDo; Var Q:TypeToaDo; begin Goc:=Goc*Pi/180; P.x:=P.x-Tam.x; P.y:=P.y-Tam.y; Q.x:=Round(P.x*Cos(goc)-P.y*Sin(goc)); Q.y:=Round(P.x*Sin(goc)+P.y*Cos(goc)); Q.x:=Q.x+Tam.x; Q.y:=Q.y+Tam.y; Quay:=Q; 159 end; procedure Vecung(Pic:Tbitmap;T1,T2:TypeToaDo;Gia:Real;Line:Boolean;LineColor,TextColor:Tcolor); var DX,DY,X,Y:Integer;P,Q1,Q2:TypeToaDo;L,TL:real;St:String; begin DX:=T2.x-T1.x;DY:=T2.y-T1.y; L:=sqrt(DX*DX+DY*DY); if L

Ngày đăng: 05/10/2014, 22:19

TỪ KHÓA LIÊN QUAN

w