PHÉP TOÁN MA TRẬN VÀ ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TIN HỌC MÃ: TI19 Tóm tắt – Chuyên đề trình bày phép toán ma trận cộng, nhân lũy thừa Ứng dụng phép toán để giải số toán học sinh giỏi môn Tin học GIỚI THIỆU Ma trận phép toán ma trận ứng dụng rộng rãi Toán học, Kinh tế học, Vật lý học,… tất nhiên có Tin học (Đồ họa máy tính, Xử lý ảnh, Lý thuyết trò chơi, lý thuyết đồ thị,…) Ma trận phép toán ma trận thường gặp toán học sinh giỏi Tin học Khái niệm ma trận có lẽ quen thuộc với học sinh, khái niệm phép toán ma trận gần chương trình Toán phổ thông đề cập Tài liệu giáo khoa chuyên tin [1] Chuyên đề “Phép toán ma trận Ứng dụng giải số toán Tin học” viết nhằm bổ sung phần kiến thức cho học sinh Trong chuyên đề có sử dụng số kiến thức dãy Fibonacci, quan hệ đồng dư, xử lý số lớn Hash [1] 2.1 PHÉP TOÁN MA TRẬN Phép cộng hai ma trận Phép cộng hai ma trận có kích thước m x n, ma trận tổng C = A+B có kích thước m x n, phần tử đứng hàng i, cột j xác định bởi: ci,j = ai,j + bi,j, với ≤ i ≤ m ≤ j ≤ n Ví dụ: Cài đặt: Function Add(a,b:matrix):matrix; var c:matrix; i,j:longint; begin for i:= to n for j:= to n c[i,j]:=a[i,j]+b[i,j]; PHÉP TOÁN MA TRẬN VÀ ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TIN HỌC exit(c); end; 2.2 Phép nhân hai ma trận Phép nhân hai ma trận thực số cột ma trận bên trái số dòng ma trận bên phải Nếu ma trận A có kích thước m x n ma trận B có kích thước n x p, ma trận tích C = A x B có kích thước m x p, phần tử đứng hàng thứ i, cột thứ j xác định bởi: Cij = ai,1b1,j + ai,2b2,j + + ai,nbn,j Ví dụ: Phép nhân ma trận có tính chất sau: • Tính chất kết hợp: (A x B) x C = A x (B x C) • Tính chất phân phối: (A + B) x C = A x C + B x C; C x (A + B) = C x A + C x B • Phép nhân ma trận tính giao hoán, A x B ≠ B x A, ví dụ: Cài đặt: Function Mul(a,b:maxtrix):maxtrix; var i,j,k:longint; c:maxtrix; begin for i:= to m for j:= to p begin c[i,j]:=0; for k:= to n c[i,j]:=c[i,j]+a[i,k]*b[k,j]; end; PHÉP TOÁN MA TRẬN VÀ ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TIN HỌC exit(c); end; 2.3 Phép lũy thừa bậc k ma trận A Phép lũy thừa bậc k ma trận A tức thực nhân ma trận A với k lần Ví dụ: Cài đặt: O(logK): Function Power(a:matrix; k:longint):matrix; var c:matrix; begin if k=1 then exit(a); c:=power(a,k div 2); c:=mul(c,c); if k mod 2=1 then c:=mul(c,a); exit(c); end; 3.1 ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TIN HỌC LATGACH4 Nguồn bài: http://vn.spoj.com/problems/LATGACH4/ [3] Cho hình chữ nhật kích thước 2xN (1 A ⎢ f ⎥ = ⎢ f ⎥ Quy nạp: A ⎢ f 2⎥⎥ = ⎢⎢ f n+1 ⎥⎥ ⎢⎣ f ⎥⎦ ⎢⎣ f ⎥⎦ ⎢⎣ f ⎥⎦ ⎢⎣ f ⎥⎦ ⎢⎣ f ⎥⎦ ⎢⎣ f ⎥⎦ ⎢⎣ f 3⎥⎦ ⎢⎣ f n+2 ⎥⎦ fn tính với độ phức tạp O(logN) Cài đặt: type matrix=array[1 3,1 3] of int64; const fi=''; PHÉP TOÁN MA TRẬN VÀ ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TIN HỌC fo=''; f:text; a,b:matrix; n:int64; m:int64; procedure input; begin assign(f,fi); reset(f); readln(f,n,m); close(f); end; var function Mul(a,b:matrix):matrix; var c:matrix; k,u,v:longint; begin for u:=1 to for v:=1 to begin c[u,v]:=0; for k:=1 to c[u,v]:=(c[u,v]+a[u,k]*b[k,v])mod m; end; exit(c); end; function Power(a:matrix;k:int64):matrix; var b:matrix; begin if k=1 then exit(a) else begin b:=Power(a,k div 2); b:=Mul(b,b); if k mod =1 then b:=Mul(b,a); end; exit(b); end; procedure solve; begin a[1,1]:=0; a[1,2]:=1; a[1,3]:=0; a[2,1]:=0; a[2,2]:=0; a[2,3]:=1; a[3,1]:=1; a[3,2]:=1; a[3,3]:=1; b:=Power(a,n-1); end; procedure output; begin assign(f,fo); rewrite(f); case n of 1: writeln(f,1); 2: writeln(f,2 mod m); 3: writeln(f,4 mod m); else PHÉP TOÁN MA TRẬN VÀ ỨNG DỤNG GIẢI MỘT SỐ BÀI TOÁN TIN HỌC begin solve; writeln(f,(b[1,1]+b[1,2]*2+b[1,3]*4)mod m); end; end; close(f); end; BEGIN input; output; END CÁC BÀI TOÁN TỰ LUYỆN http://vn.spoj.com/problems/VMATRIX/ [3] (Ma trận, Hash) http://vn.spoj.com/problems/LATGACH/ [3] (Ma trận A 2x2) http://vn.spoj.com/problems/ONE4EVER/ [3] (Tìm ma trận A) http://vn.spoj.com/problems/VOSTRIBO/ [3] (Làm giống mở rộng LATGACH4, lúc dùng ma trận A3x3, phân tích Sn = Sn-1 + fn lúc tìm A4x4) KẾT LUẬN Chuyên đề trình bày phép toán ma trận ứng dụng phép toán để giải số toán học sinh giỏi Tin học Giảm độ phức tạp toán từ O(N) xuống O(logN) Để vận dụng đòi hỏi học sinh phải lý giải thêm cách tìm ma trận A, nắm thêm lý thuyết đồng dư xử lý số lớn Chuyên đề giúp bổ sung thêm lượng kiến thức định không Tin học mà Toán học, giúp học sinh làm tốt TÀI LIỆU THAM KHẢO [1] Hồ Sĩ Đàm cộng Tài liệu giáo khoa chuyên Tin tập 1, 2, 2009 [2] Hội trường Chuyên Vùng Duyên Hải Đồng Bằng Bắc Bộ Đề Thi Chọn HSG Lần VIII - Tin học 11 18/04/2015 [3] Website: http://vn.spoj.com/ [4] Website: https://vi.wikipedia.org/wiki/Ma_trận