TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN TRUYỀN THÔNG BÀI TẬP THẢO LUẬN MÔN HỌC TOÁN HỌC RỜI RẠC Số tín chỉ : 03 Hệ: Đại học chính qui Ngành: Nhóm ngành Công nghệ thông tin Khoa : Công nghệ thông tin Nhóm giảng viên biên soạn : 1. ThS Nguyễn Hiền Trinh 2. ThS Ngô Thúy Ngân 3. ThS Nguyễn Thu Huyền 4. ThS Đào Thị Thu 5. KS Nguyễn Thị Thanh Tâm Đơn vị : Bộ môn Khoa học máy tính Năm : 2012 MỤC LỤC STT Nội dung Trang 1 Thảo luận 1: Cấu trúc tập hợp, Đại số mệnh đề 3 2 Thảo luận 2: Qui tắc suy luận, các phương pháp chứng minh toán học 6 3 Thảo luận 3: Thuật toán, cách biểu diễn, thuật toán đệ qui, thuật toán quay lui 9 4 Thảo luận 4: Kỹ thuật đếm cơ bản cao cấp 16 5 Thảo luận 5:Khái niệm cơ bản về đồ thị, các đồ thị đặc biệt 20 6 Thảo luận 6: Thuật toán tìm đường đi ngắn nhất, xây dựng cây khung ngắn nhất trên đồ thị, bài toán luồng cực đại trên mạng 22 7 Tài liệu tham khảo 26 Thảo luận 1 Cấu trúc tập hợp, Đại số mệnh đề 1.1 Tổng hợp kiến thức về cấu trúc tập hợp, đại số mệnh đề 1.2 Bài tập về tập hợp, các phép toán trên tập hợp, quan hệ Bài 1 : Cho P(x) và Q(x) là các đa thức. Gọi A là tập các nghiệm của phương trình P(x)=0, B là tập các nghiệm của phương trình Q(x)=0. Hãy biểu diễn mối quan hệ qua tập A, B tập nghiệm của các phương trình sau: a P(x).Q(x)=0 b P(x)+ Q(x) =0 c Bài 2: Cho A=2. 1, 0, 1, 4 ; B= 0, 1, 2. Hãy xác định các tập sau đây: a (x, y) A x B x3 a2. 5x2– 4x1 0 a3. 3x2 + 5x + 10 >0 a4. x2 +3x +4 0 a5. (x) (x>2) b (x) P(x) là kí hiệu cho mệnh đề:’ Tồn tại duy nhất một x sao cho P(x) là đúng. Hãy xác định giá trị chân lý cho mệnh đề sau trên R: b1 (x) x3 =1 b2 (x) (x23x+2=0) Bài 14: Cho biểu thức: E= Hãy biến đổi tương đương để đưa biểu thức trên về dạng: Không có các dấu tương đương; không có các dấu kéo theo; không kể các dấu lượng từ thì nó là tuyển của các thành phần mà mỗi thành phần này lại là hội của các biểu thức không chứa các dấu tuyển và hội. Bài 15: Cho biểu thức E= Thực hiện các phép biến đổi tương đương sau đối với E: 1. Khử phép kéo theo
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG BÀI TẬP THẢO LUẬN MƠN HỌC TỐN HỌC RỜI RẠC Số tín : 03 Hệ: Đại học qui Ngành: Nhóm ngành Cơng nghệ thơng tin Khoa : Cơng nghệ thơng tin Nhóm giảng viên biên soạn : ThS Nguyễn Hiền Trinh ThS Ngô Thúy Ngân ThS Nguyễn Thu Huyền ThS Đào Thị Thu KS Nguyễn Thị Thanh Tâm Đơn vị : Bộ môn Khoa học máy tính Năm : 2012 MỤC LỤC STT Nội dung Trang Thảo luận 1: Cấu trúc tập hợp, Đại số mệnh đề Thảo luận 2: Qui tắc suy luận, phương pháp chứng minh toán học Thảo luận 3: Thuật toán, cách biểu diễn, thuật toán đệ qui, thuật toán quay lui Thảo luận 4: Kỹ thuật đếm & cao cấp Thảo luận 5:Khái niệm đồ thị, đồ thị đặc biệt Thảo luận 6: Thuật tốn tìm đường ngắn nhất, xây dựng 16 20 22 khung ngắn đồ thị, toán luồng cực đại mạng Tài liệu tham khảo 26 Thảo luận Cấu trúc tập hợp, Đại số mệnh đề 1.1 Tổng hợp kiến thức cấu trúc tập hợp, đại số mệnh đề 1.2 Bài tập tập hợp, phép toán tập hợp, quan hệ Bài : Cho P(x) Q(x) đa thức Gọi A tập nghiệm phương trình P(x)=0, B tập nghiệm phương trình Q(x)=0 Hãy biểu diễn mối quan hệ qua tập A, B tập nghiệm phương trình sau: b/ P(x)+ Q(x) =0 a/ P(x).Q(x)=0 c/ P( x) =0 Q( x) Bài 2: Cho A={-2 -1, 0, 1, 4} ; B={ 0, 1, 2} Hãy xác định tập sau đây: a/ {(x, y) ∈ A x B x3 a2 5x2– 4x-1 ≤ a3 3x2 + 5x + 10 >0 a4 x2 +3x +4 ≤ a5 (∃x!) (x>2) b/ (∃x!) P(x) kí hiệu cho mệnh đề:’ Tồn x cho P(x) Hãy xác định giá trị chân lý cho mệnh đề sau R: b1/ (∃x!) x3 =1 b2/ (∃x!) (x2-3x+2=0) Bài 14: Cho biểu thức: E= ∀x(¬P( x, y ) → ∃yQ( x, y ) Hãy biến đổi tương đương để đưa biểu thức dạng: Khơng có dấu tương đương; khơng có dấu kéo theo; không kể dấu lượng từ tuyển thành phần mà thành phần lại hội biểu thức không chứa dấu tuyển hội Bài 15: Cho biểu thức E= (∀xP( x) ∧ ∀xQ( x)) → ¬(∃xR( x) ∨ ∃xF ( x)) Thực phép biến đổi tương đương sau E: Khử phép kéo theo Đưa phép phủ định trực tiếp liên quan tới vị từ P, Q, R, F Đưa lượng từ lên trước biểu thức Thảo luận Qui tắc suy luận, phương pháp chứng minh toán học 2.1 Tổng hợp kiến thức qui tắc lập luận, phương pháp chứng minh toán học, vấn đề liên quan đại số Bool 2.2 Bài tập quy tắc suy diễn, chứng minh toán học Bài 1: Chứng minh qui tắc suy luận p → q, q → r p→r Cách 1: Lập bảng giá trị chân lý p 0 0 1 1 q 0 1 0 1 r 1 1 p→q 1 1 0 1 q→r 1 1 1 p→r 1 1 1 Nhìn vào bảng giá trị chân lý ta thấy có giá trị p,q, r làm cho p→q q→r đồng thời nhận giá trị p → r nhận giá trị 1, theo định nghĩa ta có qui tắc suy luận Cách 2: Để chứng minh qui tắc suy luận p → q, q → r p→r p → q, q → r ta cần chứng minh p→r (( p → q) ∧ (q → r )) → ( p → r ) ≡ ( đúng) Thực vậy: (( p → q) ∧ (q → r )) → ( p → r ) ⇔ ( p ∨ q ) ∨ (q ∨ r ) ∨ p ∨ r ⇔ ( p ∧ q ) ∨ p ∨ (q ∧ r ) ∨ r ⇔ q ∨ q ∨ p ∨ r ⇔ ∨ p ∨ r ⇔ (ĐPCM) Bài 2: Chứng minh qui tắc suy luận sau: 1/ p → q, q → r p→r 2/ p → q, q → p p↔q 3/ p → r, q → r p∨q →r 4/ p → q, p → r p→q∧r 5/ p∨q→r p→r 6/ p → q, p → q q Bài 3: Chứng minh Sn= + + + + (2n-1) = n2 với số tự nhiên n ≥1 Chứng minh: Khi n=1, ta có S1=1=12 hay S1 Giả sử khẳng định với n=k>1, ∀k∈Z+ Nghĩa ta có: Sk= + + +(2k-1)=k2 Xét Sk+1=1 + + +(2k-1) + (2k+1) = k2+2k+1=(k+1)2 tức khẳng định với n=k+1 Kết luận: Sn= + + + + (2n-1) = n2 với số tự nhiên n ≥1 Bài 4: Hãy chứng minh rằng: a/ 7n –1 chia hết cho với ∀n=1,2, b/ 12 –22 +32 - + (-1)n+1 n2 = (-1) n+1 n(n+1)/2 với ∀n≥1, n ∈ N c/ n +1 ≥ 1.3.5 (2n − 1) với ∀n=1,2, 2.4.6 (2n) n(n + 1) * d/ + + + n = (1+2+ +n) = với ∀n ∈ N 3 e/ Chứng minh luật Demorgan dạng tổng quát với n=2,3 2.3 Bài tập phép toán đại số Bool, cực tiểu hóa hàm Bool Bài 5: Dùng bảng Karnaugh cực tiểu hóa hàm Bool sau (Thiết kế mạch tối thiểu biểu diễn hàm Bool vừa tìm được) 1/ f =x y 2/ f =x y+ x y 3/ f = x y + x y 4/ f = xy + x y + x y + x y 5/ f = xy z + x y z + x yz + x y z 6/ f = x yz + x y z + x yz + x yz + x y z 7/ f = xyz + xy z + x yz + x y z + x yz + x yz + x y z 8/ f = wxyz + wxy z + wx y z + w x yz + w x yz + w x y z + wx yz + w x yz + w x y z Bài 6: Dùng thủ tục Quine-Cluskey cực tiểu hóa hàm Bool sau (Thiết kế mạch tối thiểu biểu diễn hàm Bool vừa tìm được) 1/ f = xy z + x y z + x yz + x y z 2/ f = x yz + x yz + xyz + x y z + x yz 3/ f = xyz + xy z + x yz + x y z 4/ f = xy z + x yz + x y z + x yz + x yz 5/ f = w x yzt + wxy zt + w x yzt + w x yzt + w x yzt + w x yz t + w x y zt + w x y z t Thảo luận Thuật toán, cách biểu diễn, thuật toán đệ qui, thuật toán quay lui 3.1 Tổng hợp kiến thức khái niệm thuật toán, phương pháp biểu diễn thuật toán Các thuật toán đệ qui, quay lui 3.2 Bài tập thuật toán, thuật toán đệ qui, quay lui Bài 1: Cho số tự nhiên a, b Tìm ước số chung lớn chúng Xác định tốn: A Xác định thơng tin vào: số tự nhiên a, b B Xác định thông tin ra: Số tự nhiên d thõa mãn: d ước a d ước b; d lớn tập ước chung a b Xác định thao tác xử lý thông tin: Xây dựng dãy hữu hạn thao tác cho phép tính d từ a b Ví dụ a=16 b=24 d=8 Bài 2: Cho dãy số nguyên dương a 1, a2, , an Hãy tìm từ dãy phần tử có giá trị lớn Xác định tốn: A Xác định thơng tin vào: +Một dãy số nguyên dương a1, a2, , an + Mỗi số xác định yếu tố giá trị số vị trí (số thứ tự) số dãy B Xác định thơng tin ra: + Một phần tử lấy từ dãy số cho: ak Phần tử phải tính chất: Có giá trị lớn dãy Xác định thao tác xử lý thông tin: Gán giá trị max tạm thời 2.Lần lượt duyệt phần tử dãy cho so sánh giá trị max tạm thời với các phần tử xét Phải định xem bước duyệt so sánh giá trị lớn để chọn Bài 3: Tìm USCLN số tự nhiên a, b Input : Hai số tự nhiên a, b Outputt: Số tự nhiên d ước a d ước b; d lớn tập ước chung a b Thuật toán giả mã: Begin Read(a,b) While ab Do if a>b then a:=a-b Else b:=b-a 3.d:=a Write(d) End; Hoặc xây dựng thành thủ tục sau: Function USCLN1(a,b:word):word; Begin While ab Do If a> b then a:= a-b Else b:=b-a; USCLN:=a; End; Function USCLN2(a,b:word):word; Var r: word; Begin While b0 Do Begin r:= a mod b; a:= b; b:= r; End; USCLN:=a; End; 10 d:=d+1; write('day nhi phan thu',d:3,': '); for i:=1 to n write(a[i]:2);writeln; end; procedure TRY(i:integer); var j:integer; begin for j:=0 to begin a[i]:=j; if i=n then GHINHAN else Try(i+1); end; end; BEGIN khoitao; Try(1); readln; END Bài 6: Liệt kê tất hoán vị tập n số tự nhiên {1, 2, , n} Gọi hoán vị tập A = {1, 2, , n} gồm n thành phần (a 1, a2, ,an) ∈ A, i = 1,2, ,n ai, aj đôi khác Ta xây dựng thành phần thứ i cấu hình • có tập giá trị đề cử 1, 2,…,n • có điều kiện chấp nhận: Giá trị chưa dùng để kiểm soát người ta dùng mảng logic b: array[1 n] of Boolean; - Nếu b[j] = True j chưa dùng - Nếu b[j] = False j dùng Với giá trị đề cử j b[j] = True j chấp nhận ta xác định a i theo j sau đặt b[j] = False (để xác định j dùng rồi) Thủ tục quay lui xây dựng thành phần thứ i cấu hình Procedure Try(i: integer); Var j: integer; Begin For j: = to n 13 If b[j] then {chấp nhận j} Begin a[i]: = j; {xác định a[i] theo j} b[j]: = False; {ghi nhận trạng thái mới} If i = n then ghi nhận Else Try (i+1); {xây dựng thành phần thứ i + 1} b[j]: = True; {trả lại trạng thái cũ} End; End; Chương trình liệt kê hoán vị program hoanvi; uses crt; var n,d:integer; a:array[1 20] of integer; b:array[1 20] of boolean; procedure KHOITAO; var i:integer; begin write('n=');readln(n); for i:=1 to n b[i]:=true; d:=0; end; procedure GHINHAN; var i:integer; begin d:=d+1; write('Hoan vi thu',d:3,':'); for i:=1 to n write(a[i]:3); writeln; end; procedure Try(i:integer); var j:integer; 14 begin for j:=1 to n if b[j]= true then {chap nhan j} begin a[i]:=j; {xac dinh a[i] theo j} b[j]:=false; {ghi nhan trang thai moi} if i=n then GHINHAN else Try(i+1); b[j]:=true; {tra lai trang thai cu} end; end; BEGIN khoitao;Try(1); readln; END 15 Thảo luận Kỹ thuật đếm & cao cấp 4.1 Tổng hợp kiến thức kỹ thuật đếm cao cấp 4.2 Bài tập nguyên lý đếm Bài 1:(Lý thuyết Ramsay–giải toán phân chia tập tập phần tử) Giả sử nhóm người cặp hai bạn thù Chứng tỏ nhóm có ba người bạn lẫn có ba người kẻ thù lẫn Giải: Gọi A người Trong số người nhóm có người bạn A có người thù A ( Vì theo nguyên lý Dirrichlet / 3 =3) Trong trường hợp đầu ta gọi B, C, D bạn A Nếu người có người bạn họ với A lập thành ba người bạn lẫn nhau, ngược lại ba người B, C, D khơng có bạn chứng tỏ họ ba người thù lẫn Bài 2: Có xâu nhị phân độ dài là bắt đầu 00 kết thúc 11? Giải: Dễ thấy số xâu nhị phân độ dài bắt đầu 00 = 64 số xâu nhị phân độ dài kết thúc 11 26 = 64 Ngoài số xâu nhị phân độ dài bắt đầu 00 kết thúc 11 = 16 Vậy số xâu nhị phân bắt đầu 00 kết thúc 11 là: 64 + 64 – 16 = 112 Bài 3: Biết có 100 sinh viên học tiếng Anh, 70 học sinh học tiếng Nga, 50 học sinh học tiếng Pháp, 40 học sinh học tiếng Anh tiếng Nga, 20 học sinh học tiếng Anh tiếng Pháp, 12 học sinh hoạc tiếng Pháp tiếng Nga Néu tất 500 sinh viên theo học ngoại ngữ, có sinh viên học ba thứ tiếng? Giải: Gọi A tập sinh viên học tiếng Anh, B tập sinh viên học tiếng Nga, C tập sinh viên học tiếng Pháp Khi số sinh viên theo học ba thứ tiếng N(A ∩ B ∩ C) Theo nguyên lý bù trừ ta có N(A ∪ B ∪ C) = N(A) + N(B) + N(C) - N(A ∩ B) - N(A ∩ C) - N(B ∩ C) + N(A ∩ B ∩ C ) mà N(A) = 100 , N(B) = 70 , N(B ∩ C) = 12 , Suy N(C) = 50 , N(A ∩ B) =40 , N(A ∩ C) =20 N(A ∪ B ∪ C) =500 N(A ∩ B ∩ C )= 500 – 100 – 70 -50 +40 + 20 + 12 = 352 Lưu ý: Nếu ta đồng tập A k với tính chất Ak cho tập X đếm xem có phần tử X khơng thõa mãn tính chất Ak cả? Ký hiệu N số phần tử cần đếm, N số phần tử X, ta có: N = N - N(A1 ∪ A2 ∪ ∪ Am) = N - N1 + N2 - +(-1)mNm ( nguyên lý bù trừ) Trong Nk tổng phần tử X thoả mãn k tính chất lấy từ m tính chất cho 16 Bài 4: Hỏi tập X = {1, 2, …, 10000} có số không chia hết cho số số 3,4,7? Giải: Gọi Ai = {xє X x chia hết cho i}, i = 3, 4, Khi A3 ∪ A4 ∪ A7 số X chia hết cho số 3, 4, Vậy theo nguyên lý bù trừ, số lượng số cần đếm là: N(X) – N(A3 ∪ A4 ∪ A7) = N(X) – N1 + N2 – N3 Trong đó: N1 = N(A3) + N(A4) + N(A7) = [10000/3] + [10000/4] + [10000/7] = 3333+ 2500 + 1428 = 7261 N2 = N(A3 ∩ A4) + N(A3 ∩ A7) + N(A4 ∩ A7) = [10000/(3.4)] + [10000/(3.7)] + [10000/(4.7)] = 833 + 476 + 357 = 1666 N3 = N(A3 ∩ A4 ∩ A7) = [10000/(3.4.7)] = 119 (ở kí hiệu [r] để số nguyên lớn không vượt r) Vậy số lượng số cần đếm là: 10000 – 7261 + 1666 – 119 = 4286 Bài 5: Nhập vào chuỗi ký tự S Xuất hình tất hoán vị khác ký tự chuỗi S (Các ký tự S không thiết khác nhau) Program hoanvilap; uses crt; Var s:string; KT:Array[1 255] of Boolean; B:Array[1 255] of Char; n:byte; dem:longint; Function OK(k:byte):boolean; Var j:byte; Begin OK:=False; For j:=1 to k-1 if (S[k] = S[j]) and (not KT[j]) then Exit; OK:=True; end; 17 Procedure Ghinhan; Var i:Byte; Begin Inc(dem); write('Hoan vi thu ',dem,'.'); For i:=1 to n write(B[i]); Writeln; end; Procedure Try(i:byte); Var j:byte; Begin For j:=1 to n If (not (KT[j])) and (OK(j)) then begin KT[j]:=True; B[i]:=S[j]; If i=n then Ghinhan else Try(i+1); KT[j]:=False; B[i]:=#0; end; end; BEGIN clrscr; Write('S=');readln(S); n:=Length(S); dem:=0; Fillchar(KT,Sizeof(KT),0); Fillchar(B,Sizeof(B),0); Try(1); readln; END Bài Có xâu nhị phân có dộ dài nhỏ Bài Có xâu nhị phân có độ dài 80 bắt đầu 111 kết thúc 000 Bài Có số nguyên dương gồm chữ số: a/ Chia hết cho 18 b/ Chia hết cho cho c/ Chia hết cho chia hết cho 4.3 Bài tập tổ hợp hoán vị Bài Cho tập A={1, 3, 5} Có số gồm chữ số khác thành lập từ A Giải: Số gồm chữ số khác thành lập từ A hốn vị A, số số theo yêu cầu P3=3!=1.2.3=6 (số theo yêu cầu) Liệt kê số là: 135; 153; 315; 351; 513; 531 Bài 10 Cho A={0,1, , 9}, lập số chẵn có chữ số mà chữ số khác 19 Thảo luận Khái niệm đồ thị, đồ thị đặc biệt 5.1 Tổng hợp kiến thức cấu trúc đồ thị, phương pháp duyệt đồ thị, đồ thị Euler, đồ thị Hamilton, đồ thị phẳng, tô màu đồ thị 5.2 Bài tập biểu diễn đồ thị, bậc, phương pháp duyệt đồ thị Bài 1.Cho đồ thị vơ hướng G1, G2 a Tính bậc đỉnh đồ thị, bậc đồ thị? b Hãy liệt kê đường có độ dài c Hãy liệt kê chu trình có độ dài d Xác định tính liên thơng đồ thị? số thành phần liên thông đồ thị? e Hãy lập ma trận lân cận kề đồ thị G, ma trận liên thuộc G? f Đưa thứ tự duyệt đồ thị theo chiều rộng chiều sâu, xây dựng khung tương ứng với thứ tự duyệt g Đồ thị có đường chu trình Euler (Hamilton) khơng? (G1) A B E D C K G H I (G2) 20 Bài Hãy vẽ đồ thị vô hướng biểu diễn ma trận liền kề sau: 1 1 a) 4 , b) 0 0 1 0 1 0 1 1 0 , c) 1 0 0 4 3 1 0 4 0 1 2 3 Bài Nêu ý nghĩa tổng phần tử hàng (cột) ma trận liền kề đồ thị vô hướng ? Đối với đồ thị có hướng ? Bài 4: Chỉ thứ tự duyệt đồ thị theo BFS DFS đồ thị G1, G2(bài 1); đồ thị a,b,c (bài2) Bài Tìm ma trận liền kề cho đồ thị sau: a) Kn , b) Cn, c) Wn , d) Km,n , e) Qn Bài Cho V={2,3,4,5,6,7,8} E tập hợp cặp phần tử (u,v) V cho u