3 CHƯƠNG MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Trong bước giải tốn máy tính, cơng đoạn lập trình có vai trò quan trọng nhất.Việc ứng dụng tin học ngày phát triển,các yêu cầu thực tiễn ngày đa dạng Điều đòi hỏi phải thiết kế giải thuật giải cách hiệu vấn đề đặt Trong chương xem xét số khái niệm cấu trúc liệu giải thuật,các phương pháp thiết kế giải thuật thông dụng 1 MỘT SỐ KHÁI NIỆM VỀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Q trình giải tốn máy tính bao gồm nhiều công đoạn Bước thứ xác lập mơ hình tốn,tức xác định cấu trúc toán học toán đặt Thực tế cho thấy ,đối với sở thực tiễn người ta phác hoạ yêu cầu cần giải cách hình thức dạng yêu cầu, mong muốn Nhiệm vụ phân tích viên hệ thống phải chuyển yêu cầu hình thức thành cấu trúc chặt chẽ dạng mơ hình tốn học Mơ hình sở để thiết kế bước giải toán việc thiết kế cấu trúc liệu, thiết kế giải thuật, lựa chọn ngôn ngữ diễn đạt giải thuật, đến việc thử nghiệm chương trình phân tích kết chương trình nhằm đánh giá chất lượng chương trình Qui trình giải tốn máy tính gồm bước biểu diễn hình vẽ sau đây: X© y dựng mô hì nh Thiết kếCSDL Thiết kếgiải thuật Chọn ngôn ngữlập trì nh Viết ch ơng trì nh Thử nghiệm ch ơng trì nh Phâ n tích kết V bn cht kỹ thuật lập trình ,người ta thường đưa định nghĩa ngắn gọn sau: Programs = Data structure + Algorithm Chương trình = Cấu trúc liệu + Giải thuật Định nghĩa nêu lên thực chất kỹ thuật lập trình: Kỹ thuật lập trình cơng việc lao động trí tuệ sáng tạo nhà lập trình phải thực hai cơng đoạn quan trọng: • Cơng đoạn thiết kế cấu trúc liệu • Cơng đoạn thiết kế giải thuật Việc xây dựng phần mềm trình phức tạp, nghệ thuật đồng thời khoa học.Nó nghệ thuật đòi hỏi trí tưởng tượng tốt,óc sáng tạo cộng thêm khéo léo.Là khoa học kỹ thuật phương pháp tiêu chuẩn sử dụng.Thuật ngữ công nghệ phần mềm (Software Engineering) dùng để việc nghiên cứu sử dụng kỹ thuật này.Cả hai cơng đoạn đòi hỏi tính sáng tạo cao,vì đứng trước tốn đặt ,người lập trình phải biết lựa chọn cấu trúc liệu phù hợp nhất,và sở tiến hành thiết kế giải thuật hiệu Định nghĩa Giải thuật (Algorithm) dãy qui tắc chặt chẽ xác định trình tự thao tác đối tượng cụ thể để giải vấn đề để hoàn thành mục đích cuối Trong tin học , thuật ngữ giải thuật dùng để thủ tục thực máy tính , điều dẫn đến số hạn chế lệnh tạo nên thủ tục: - Chúng phải xác định khơng nhập nhằng để biết rõ lệnh làm gì? - Chúng phải đủ đơn giản để máy tính hiểu - Chúng phải kết thúc sau số hữu hạn phép tốn Các giải thuật ln ln thiết kế ba cấu trúc điều khiển sau đây: • Cấu trúc ( Sequential) bước thực theo trình tự cách xác, bước thực lần • Cấu trúc chọn lọc ( Selection ) nhiều thao tác chọn thực • Cấu trúc chu trình( Repetition) hay nhiều bước thực lặp lại Ba chế điều khiển chương trình đơn giản thực tế đủ mạnh để xây dựng giải thuật Nguyên tắc quan trọng để tạo chương trình có chất lượng cao đảm bảo chương trình phải có cấu trúc tốt Muốn nên thực vấn đề sau đây: • Sử dụng phương hướng tiếp cận từ đỉnh xuống ( Top Down Design ) để viết chương trình phức tạp • Sử dụng cấu trúc diều khiển để thiết kế cho đơn thể chương trình( Program Module) • Sử dụng biến cục bộ( Local variables) chương trình • Sử dụng tham số để truyền tham số Tránh dùng biến toàn cục( Global variables) để truyền tham số chương trình , điều làm phá vỡ tính độc lập chương trình Để chứng minh tính đắn giải thuật, phải chứng minh cách suy diễn bước giải thuật xử lý đầu vào đắn tạo đầu theo yêu cầu Như vậy, chứng minh tính đắn giải thuật bắt đầu khẳng định( Giả thiết ) liệu vào ( Data Input) dùng lý luận lôgic để việc thực giải thuật cho ta khẳng định( Kết luận) liệu ( Data Output) Định nghĩa Một tập hợp phần tử liệu ban đầu tốn gọi liệu sở Ví dụ : Chúng ta xem xét toán kinh tế sau đây: Trong hệ thống quản lý Ngân hàng, giả sử ta cần tính số dư tiết kiệm khách hàng, biết họ tên khách hàng, số tiền gửi ban đầu, số tháng gửi lãi suất hàng tháng Trong trường hợp liệu sở : - Họ tên người gửi - Số tiền gửi ban đầu - Lãi suất - Kỳ gửi Định nghĩa Cấu trúc liệu kết hợp liệu sở theo phương thức nhằm liên kết chúng thành cấu trúc thống tiện lợi cho trình xử lý Việc lựa chọn cấu trúc liệu, việc thiết lập giải thuật đắn có cấu trúc tốt hiệu , vấn đề mấu chốt việc thiết lập phần mềm.Hai khía cạnh việc phát triển phần mềm có tầm quan trọng nhau, thực tế chúng khơng thể tách rời Khơng thể nói tới cấu trúc liệu mà không đề cập đến giải thuật tác động lên cấu trúc liệu Ngược lại, giải thuật liên quan đến cấu trúc liệu cụ thể , có giải thuật chung chung cho cấu trúc liệu Khi cấu trúc liệu thay đổi giải thuật phải thay đổi cho phù hợp để xử lý cách hiệu cấu trúc liệu Để minh hoạ cho ý tưởng ,chúng ta xét toán tạo lập hồ sơ ban đầu phân hệ tin học quản lý nhân quan Giả sử hồ sơ bao gồm trường: Họ tên , tuổi, địa chỉ, số năm công tác, mức lương Trước hết việc chọn cấu trúc liệu để giải tốn Ta chọn cấu trúc liệu sau đây: Cấu trúc liệu tệp File Cấu trúc liệu động kiểu trỏ Pointer Cấu trúc liệu mảng Array Giải thuật tạo lập hồ sơ ban đầu trường hợp sau : Trường hợp 1: Sử dụng cấu trúc liệu tệp File Program CreateFile; Type nhansu = record Stt : integer; (* Số thứ tự *) Hoten : String [30]; ( * Họ tên * ) Tuoi : integer; ( * Tuổi *) namct : integer; ( * Số năm công tác *) diachi : String [30]; ( * Địa *) Luong : real; ( * Lương * ) end; Var F : file of nhansu ; Nguoi : nhansu ; OK : char; X, Y : integer; Begin Assign ( F, ' nhansu dat ' ); Rewrite ( F ); OK : = ' C ' ; Nguoi Sott : = 1; While ( OK = ' C ' ) or ( OK = ' c ' ) Begin ClrScr; GotoXY (20, ); Write ( ' Program CreateFile ' ); X : = 12 ; Y : = 10 ; GotoXY ( X,Y ) ; Write ( ' Sott : ' ); GotoXY ( X, Y+1 ); Write ( ' Hoten : ' ); GotoXY (X, Y+2 ); Write ( ' Tuoi : ' ); GotoXY ( X,Y+3); Write ( ' Nam cong tac'); GotoXY ( X, Y+4); Write (' Dia chi '); Goto XY ( X, Y+5 ); Write ( ' Luong :' ); X : = X+14 ; With Nguoi Begin GotoXY ( X,Y ); Write ( SoTT ); GotoXY ( X, Y+1 ); Readln (Hoten ) ; GotoXY ( X, Y+2 ); Readln ( Tuoi ); GotoXY ( X, Y+3); Readln( Namct); GotoXY( X, Y+4); Readln (Diachi); GotoXY ( X, Y+5 ); Readln ( Luong ); End; If Nguoi Hoten < > ' ' then Begin Write ( F, Nguoi ); Nguoi SoTT : = Nguoi SoTT +1; End; GotoXY (20, 20 ) ; Write ( ' Tiep tuc nua khong ? ( C/ K )' ); Readln(OK); End; 10 Close ( F ); End Trường hợp : Sử dụng kiểu trỏ [3] Giải thuật: Type PointerN = ^ Nhan_Su ; Nhan_Su = Record Hoten : String[30]; Tuoi : integer; Namct : Integer; diachi :String [30]; Luong : real; Next: PointerN; End; Var Last , Ptr, p, q : PointerN; HeapTop: ^ integer; Name : String[30]; Begin Last: = Nil ; Mark ( HeapTop); Repeat Writeln; Write(' Ho ten: ' ); Readln( Name); If Name < > ' ' then Begin New( Ptr); Ptr ^ hoten : = Name; Write( ' Tuoi: ' ); Readln( Ptr ^ Tuoi) 10 11 Write (' Năm ctac'); Readln( Ptr ^ namct); Write (' Địa chỉ: ' ); Readln( Ptr ^ diachi); Write( ' luong ' ); Readln( Ptr ^ luong); Ptr ^ Next : = Last; Last: = Ptr; End; Until Name ="; (* Đọc lại toàn danh sách *) Writeln(' Danh sách cán bộ' ); Ptr: = Last ; While Ptr < > nil Begin Writeln(' Ho ten:', Ptr ^ hoten) Writeln(' Tuoi:', Ptr ^ Tuoi); Writeln(' Nam ctac' , Ptr^ namct); Writeln(' Dia chi' , Ptr^ diachi); Writeln ('luong' , Ptr ^.luong); Writeln; Ptr: = Ptr ^ Next; End; Release( HeapTop); end; Trường hợp 3: Sử dụng cấu trúc liệu mảng Giải thuật: Type mt1 = Array[1 n ] of string; mt2 = Array[1 n ] of real; mt3 = Array [1 n] of integer; ( * n số lượng cán *) Var tuoi, namct : mt3; 11 12 luong : mt2; Hoten,Diachi : mt1; i: Integer; Begin For i : = to n Begin Write (' Hoten [',i ,' ] = '); Readln ( Hoten [i]); Write (' Tuoi[',i,'] = ' ); Readln( Tuoi[i]); Write (' Namct[',i,'] = '); Readln( Namct[i]); Write (' Diachi[',i,'] =' ); Readln(Diachi[i]); Write ( ' Luong[',i,'] ='); Readln(Luong[i]); end; end; Qua ba trường hợp trình bày thấy, giải toán vào cấu trúc liệu lựa chọn mà giải thuật khác Điều khẳng định lần mối liên hệ tách rời hai khái niệm cấu trúc liệu ( Data structure ) giải thuật ( Algorithm ) Bây xem xét vài khái niệm khác Định nghĩa Phương thức biểu diễn cấu trúc liệu nhớ gọi cấu trúc lưu trữ ( Storage Structure ) cấu trúc liệu Hai khái niệm cấu trúc liệu ( Data structure ) cấu trúc lưu trữ ( Storage Structure) khơng hồn tồn đồng Thật , với cấu trúc liệu có nhiều cấu trúc lưu trữ khác Chẳng hạn, với cấu trúc liệu mảng hai chiều,có 12 49 writeln(' ============================================'); writeln(' donvi:trieu dong '); writeln('+ -+ -+ -+ -+'); writeln('| STT | TEN KHACH HANG | TIEN MUA HANG | GHI CHU |'); writeln('| -| -| -| -|'); for i:=1 to n begin writeln('|',i:7,'|', kh1[i]:21 , '|', tt1[i]:19:2 , '|',m1[i]:11,'|'); writeln('| -| -| -| -|'); end; writeln('| | TONG CONG: |', tongt1:19:2 , '| |'); writeln('+ -+ -+ -+ -+'); writeln; readln; end; • THIẾT KẾ MODULE THỨ BA In bảng tổng hợp kinh doanh tháng đầu năm Procedure in_bang1; begin writeln(lst); writeln(lst,'BANG TONG HOP KINH DOANH THANG DAU NAM '); writeln(lst,' ========================================'); writeln(lst,' donvi:trieu dong '); writeln(lst,'+ -+ -+ -+'); writeln(lst,'| STT |TEN KHACH HANG | TIEN MUA HANG | GHI CHU |'); 49 50 writeln(lst,'| -| -| -| |'); for i:=1 to n begin writeln(lst,'|',i:7,'|', kh1[i]:21 , '|', tt1[i]:19:2 , '|',m1[i]:11,'|'); writeln(lst,'| -| -| -| |'); end; writeln(lst,'| | TONG CONG: |',tongt1:19:2, '| |'); writeln(lst,'+ -+ -+ -+ -+'); writeln(lst); readln; end; • THIẾT KẾ MODULE THỨ Nhập số liệu kinh doanh tháng cuối năm Procedure nhap_so_lieu_2(var kh2:mt2;var p,q:integer;var tt2:mt1); begin writeln('xin moi nhap vao so lieu thang cuoi nam'); write('nhap so khach hang p= '); readln(p); write('nhap so hang hoa q= '); readln(q); for i:=1 to p begin write('cho biet ten khach hang thu ',i,':'); readln(kh2[i]); end; for i:=1 to p for j:=1 to q begin write('Nap khoi luong mat hang ',j,' cua khach hang',i,'='); readln(kl2[i,j]); end; 50 51 for i:=1 to q begin write(' Nap don gia mat hang thu ',i,':'); readln(dg2[i]); end; begin tongt2:=0; for i:=1 to p begin tt2[i]:=0; for j:=1 to q tt2[i]:=tt2[i]+kl2[i,j]*dg2[j]; tongt2:=tongt2+tt2[i]; end; end; for i:=1 to p if tt2[i]>=100 then m2[i]:= 'QT'; end; • THIẾT KẾ MODULE THỨ Tính tốn kinh doanh cho tháng cuối năm Procedure kq2; var tg2:real; st2:string[10]; begin clrscr; for i:=1 to p-1 for j:=i+1 to p if tt2[i]>tt2[j] then begin 51 52 tg2:=tt2[i]; tt2[i]:=tt2[j]; tt2[j]:=tg2; st2:=kh2[i]; kh2[i]:=kh2[j]; kh2[j]:=st2; end; begin for i:=1 to p if tt2[i]>=100 then m2[i]:= 'QT' else m2[i]:=' '; end; writeln; writeln('BANG TONG HOP KINH DOANH THANG CUOI NAM '); writeln(' ============================================'); writeln(' donvi:trieu dong '); writeln('+ -+ -+ -+ +'); writeln('| STT | TEN KHACH HANG | TIEN MUA HANG | GHI CHU |'); writeln('| -+ -+ -+ -|'); for i:=1 to p begin writeln('|',i:7,'|', kh2[i]:21 , '|', tt2[i]:19:2,'|',m2[i]:11,'|'); writeln('| -+ -+ -+ -|'); end; writeln('| | TONG CONG: |', tongt2:19:2,'| |'); writeln('+ -+ -+ -+ +'); readln; end; • THIẾT KẾ MODULE THỨ 52 53 In bảng tổng hợp kinh doanh tháng cuối năm Procedure in_bang2; begin writeln(lst); writeln(lst,' BANG TONG HOP KINH DOANH THANG CUOI NAM '); writeln(lst,' ======================================='); writeln(lst,' donvi:trieu dong '); writeln(lst,'+ -+ -+ -+ -+'); writeln(lst,'| STT | TEN KHACH HANG | TIEN MUA HANG | GHI CHU |'); writeln(lst,'| -+ + -+ -|'); for i:=1 to p begin writeln(lst,'|',i:7,'|', kh2[i]:21 , '|', tt2[i]:19:2,'|',m2[i]:11,'|'); writeln(lst,'| -+ + -+ -|'); end; writeln(lst,'| | TONG CONG: |', tongt2:19:2,'| |'); writeln(lst,'+ -+ -+ -+ -+'); readln; end; • THIẾT KẾ MODULE Tính tốn tổng hợp kinh doanh năm Procedure bang3; begin clrscr; for i:=1 to n 53 54 begin for j:=1 to n begin if kh1[i]=kh2[j] then begin tt1[i] := tt1[i] + tt2[j]; tt2[j]:=0; end; end; if tt1[i]> 100 then m1[i]:= 'QT'; end; writeln; writeln(' BANG TONG HOP KINH DOANH CA NAM '); writeln(' ============================================'); writeln(' donvi:trieu dong '); writeln('+ -+ -+ -+ -+'); writeln('| STT | TEN KHACH HANG | TIEN MUA HANG | GHI CHU |'); writeln('| -+ -+ -+ -|'); for i:=1 to n begin writeln('|',i:7,'|', kh1[i]:21 , '|', tt1[i]:19:2 , '|',m1[i]:11,'|'); writeln('| -+ -+ -+ -|'); end; j:=0; for i:= to p if tt2[i]0 then begin j:=j+1; writeln('|',j+n:7,'|', kh2[i]:21 , '|', tt2[i]:19:2,'|',m2[i]:11,'|'); writeln('| -+ + -+ -|'); 54 55 end; writeln('| | TONG CONG: |', tongt1+tongt2:19:2,'| |'); writeln('+ -+ -+ -+ -+'); readln; end; • THIẾT KẾ MODULE In bảng tổng hợp kinh doanh năm Procedure in_bang3; begin writeln(lst); writeln(lst,' BANG TONG HOP KINH DOANH CA NAM '); writeln(lst,' ======================================='); writeln(lst,' donvi:trieu dong '); writeln(lst,'+ -+ + -+ -+'); writeln(lst,'| STT | TEN KHACH HANG | TIEN MUA HANG | GHI CHU |'); writeln(lst,'| -+ + -+ -|'); for i:=1 to n begin writeln(lst,'|',i:7,'|', kh1[i]:21 , '|', tt1[i]:19:2 , '|',m1[i]:11,'|'); writeln(lst,'| -+ + -+ -|'); end; j:=0; for i:= to p if tt2[i]0 then begin j:=j+1; 55 56 writeln(lst,'|',j+n:7,'|', kh2[i]:21 , '|', tt2[i]:19:2,'|',m2[i]:11,'|'); writeln(lst,'| -+ -+ -+ -|'); end; writeln(lst,'| | TONG CONG: |', tongt1+tongt2:19:2,'| |'); writeln(lst,'+ -+ + + -+'); readln; end; • THIẾT KẾ MODULE Thiết kế thực đơn BEGIN thoat:=false; repeat clrscr; textcolor(white); begin writeln; writeln(' BANG MENU '); writeln(' LAP BANG HOP DONG KINH DOANH THANG DAU NAM '); writeln(' LAP BANG HOP DONG KINH DOANH THANG CUOI NAM'); writeln(' LAP BANG HOP DONG KINH DOANH CA NAM writeln(' IN_BANG1 '); writeln(' IN_BANG2 '); writeln(' IN_BANG3 '); writeln(' THOAT KHOI CHUONG TRINH '); '); 56 57 textcolor(2); write(' MOI BAN CHON MOT TRONG SO: '); readln(k); writeln; case k of 1: begin clrscr; nhap_so_lieu_1(kh1,n, m,tt1); kq1; readln; end; 2: begin clrscr; nhap_so_lieu_2(kh2,p,q,tt2); kq2; readln; end; 3: begin bang3; readln; end; 4: begin in_bang1; readln; end; 5: begin in_bang2; readln; end; 6: begin in_bang3; readln; end; 7: thoat:=true else begin writeln('Sai , vao lai'); readln; end; end; end; until thoat; writeln('chuong trinh ket thuc'); readln; END Sau bổ sung thêm số mô tả ban đầu cho biến toàn cục có chương trình hồn chỉnh PROGRAM QUAN_LY_KINH_DOANH; Uses crt,printer; type mt1 = array [1 50] of real; mt2 = array [1 60] of string[30]; 57 58 mt3 = array [1 50,1 60] of real; var kh1,kh2:mt2; dg1,dg2:mt1; tt1,tt2,titrong:mt1; kl1,kl2:mt3; m1,m2:mt2; i,j,p,q,m,n,k :integer; thoat:boolean; tongt1,tongt2:real; Procedure tt1:mt1); Procedure tt1:mt1); NHAP_SO_LIEU_1(var NHAP_SO_LIEU_2(var kh1:mt2;var n,m:integer ;var kh1:mt2;var n,m:integer ;var Procedure kq1; Procedure in_bang1; Procedure nhap_so_lieu_2(var kh2:mt2;var p,q:integer;var tt2:mt1); Procedure kq2; Procedure in_bang2; 58 59 Procedure bang3; Procedure in_bang3; ( * Chương trình ) BEGIN thoat:=false; repeat clrscr; textcolor(white); begin writeln; writeln(' BANG MENU '); writeln(' LAP BANG HOP DONG KINH DOANH THANG DAU NAM '); writeln(' LAP BANG HOP DONG KINH DOANH THANG CUOI NAM'); writeln(' LAP BANG HOP DONG KINH DOANH CA NAM '); writeln(' IN_BANG1 '); writeln(' IN_BANG2 '); writeln(' IN_BANG3 '); writeln(' THOAT KHOI CHUONG TRINH '); textcolor(2); write(' CHON MOT TRONG SO: '); readln(k); writeln; case k of 1: begin clrscr; nhap_so_lieu_1(kh1,n, m,tt1); kq1; readln; end; 2: begin clrscr; nhap_so_lieu_2(kh2,p,q,tt2); kq2; readln; 59 60 end; 3: begin bang3; readln; end; 4: begin in_bang1; readln; end; 5: begin in_bang2; readln; end; 6: begin in_bang3; readln; end; 7: thoat:=true else begin writeln('vao sai, moi vao lai'); readln; end; end; end; until thoat; writeln('chuong trinh ket thuc '); readln; END CÂU HỎI ÔN TẬP CHƯƠNG 60 61 - Trình bày khái niệm cấu trúc liệu giải thuật ? Cho ví dụ - Trình bày mối liên hệ chặt chẽ cấu trúc liệu giải thuật ? Khi cấu trúc liệu thay đổi giải thuật xử lý có thay đổi không? Tại sao? - Khái niệm cấu trúc lưu trữ ? Sự liên quan cấu trúc liệu cấu trúc lưu trữ? - Trình bày phương pháp diễn đạt giải thuật? Cho ví dụ ? - Khái niệm mơdun hố ? Tại phải phân chia tốn lớn thành mơdun nhỏ ? - Trình bày phương pháp thiết kế Top down design ? Cho ví dụ minh hoạ? - Phương pháp thiết kế Bootom up design ? Cho ví dụ minh hoạ ? - Ký pháp" chữ O lớn "nào tốt để biểu diễn thời gian tính tốn đây: T(n) = 100n Logn +1000 T(n) = 1+2+4+ 2^(n-1) T(n) = 2^n + n^99+7 9- Đối với đoạn chương trình PASCAL đây,hãy xác định ký pháp" Chữ O lớn" tốt để biểu diễn thời gian tính tốn trường hợp tồi hàm n: Sum =0; For i:= to n Begin ReadLn(x); Sum:= Sum+x; end; Mean:= Sum/n; 61 62 10- Đối với đoạn chương trình PASCAL thực cộng hai ma trận,hãy xác định ký pháp" Chữ O lớn" tốt để biểu diễn thời gian tính tốn trường hợp tồi hàm n: For i:= to n For J:= to n ReadLn(A[i,j]; For i:= to n For J:= to n ReadLn(B[i,j]; C[i,j]:= A[i,j]+B[i,j]; 11- Xác định độ phức tạp đoạn chương trình sau : For i : = to n-1 For j:= I+1 to n if a[i] >a[ j] then begin tg: = a[i]; a[i]: =a[j]; a[ j] : = tg (* Đổi chỗ a[i] a[j] *) end; 12 - Giải thuật tính ước số chung lớn hai số nguyên dương p q ( p>q) mo tả sau : Gọi r lsf số dư phép chia p cho q - Nếu r =0 q ƯSCLN p q 62 63 - Nếu r ≠ gán q cho p , gán r cho q lặp lại trình Viết giải thuật đệ qui tìm ƯSCLN p q ? 13 - Viết thủ tục đệ qui thực việc in đảo ngược dãy ký tự cho trước ? Chẳng hạn , cho dãy ETHNIKCOHNIT in thành dãy TINHOCKINHTE 63 ... đánh giá độ phức tạp giải thuật : Log2 n n n Log2 n2 n3 2n n 14 15 16 32 24 64 16 0 16 64 256 10 24 64 512 4096 32768 16 256 65536 214 7483648 Các hàm N , n! gọi hàm mũ Các giải thuật có thời gian... thuật: Type mt1 = Array [1 n ] of string; mt2 = Array [1 n ] of real; mt3 = Array [1 n] of integer; ( * n số lượng cán *) Var tuoi, namct : mt3; 11 12 luong : mt2; Hoten,Diachi : mt1; i: Integer;... cần tính 1! sau 2! coi tích 1! số Sử dụng lần ta có 1! = 0! x1 đạt đến trường hợp phần neo theo sơ đồ sau : 3! = 3x 2! ↓ 2! = x 1! ↓ 1! = x 0! ↓ 0! = 28 29 Dùng giá trị 0! , ta tính 1! Giá trị