TL boi duong HSG tin11

183 61 0
TL boi duong HSG tin11

Đ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

Giáo viên: Phan Hồng Thảo Tài liệu ơn đội tuyển Tin A / Khái niệm chung I / Khái niệm đệ qui Một đối tượng gọi có tính đệ qui định nghĩa thơng qua Một hàm, thủ tục có tính đệ qui thân chương trình hàm, thủ tục lại có lời gọi tới Thí dụ 1: Định nghĩa giai thừa số nguyên không âm định nghĩa có tính đệ qui Thật vậy: Nếu N=0 (N)! = N * (N-1)! Nếu N>0 Để định nghĩa N giai thừa, phải thông qua định nghĩa giai thừa (của N-1) Thí dụ 2: Xây dựng hốn vị N phần tử có tính chất đệ qui Thật : Giả sử có hốn vị S (A 1, A 2, A i-1, Ai, An-1, An ), sau đổi chỗ phần tử S[i] S[j] hốn vị ta hốn vị Sau sơ đồ hình thành dần hoán vị hoán vị S(1,2,3) 123 B1 : i =1 j = 1,2,3 B2 : i = j=2,3 123 123 213 132 213 312 231 312 321 B3 : i =3 123 132 213 231 312 321 j=3 Vậy để xây dựng hoán vị sau ta phải dựa vào hoán vị sinh trước Thí dụ 3: Xây dựng tổ hợp chập K N phần tử 1, 2, 3, , N theo phương thức đệ qui: Ta xây dựng dần phần tử từ vị trí thứ đến vị trí thứ K tổ hợp Để xây dựng phần tử thứ i ( sau xây dựng xong phần tử từ đến i-1 tổ hợp này), ta cho phần tử thứ i nhận giá trị từ (Ai-1 +1) đến giá trị cao giá trị (N-K)+i sau phần tử thứ i (K-i) phần tử, phần tử thứ i nhận giá trị cao (N-K)+i phần tử khả nhận giá trị: (N-K)+i +1, (N-K)+i +2, , (N-K)+i + (K-i) = N Vậy để xây dựng phần tử thứ i tổ hợp, ta phải dựa vào kết xây dựng tới phần tử thứ i-1 Tất nhiên để xây dựng phần tử thứ 1, ta phải dựa vào ‘phần tử hàng rào’ phần tử vị trí thứ ‘0’, ta gán cho phần tử giá trị cho phù hợp qui luật nêu trên? Rõ ràng giá trị 0, nhằm cho quyền bình đẳng phần tử khác Phần tử chịu trách nhiệm Giáo viên: Phan Hoàng Thảo Tài liệu ôn đội tuyển Tin nặng nề, xây dựng dần phần tử tổ hợp, song ta đừng quên phải ‘ngậm ngùi’ ‘khơng đứng tổ hợp’ Sau sơ đồ minh hoạ việc xây dựng tổ hợp chập phần tử 1, 2, 3, 4, 0*** i=1 ; n-k+i = i=2 ; n-k+i = 01** 012* 02** 013* i=3 ; n-k+i = 0123 0124 0125 0134 014* 0135 023* 03** 024* 034* 0145 0234 0235 0245 0345 Ii / Lưu ý thủ tục hàm đệ qui Lưu ý 1: + Trong thủ tục hàm đệ qui cần chứa lệnh thể tính dừng đệ qui Nghĩa thủ tục, hàm đệ qui gọi tới số hữu hạn lần gặp điều kiện (để khơng gọi tới nữa) Thí dụ : Function Giaithua(N: Byte) : LongInt; Begin If N=0 then giaithua := Else Giaithua := N*Giaithua(N-1); End; Trong hàm Giaithua, điều kiện dừng 0! = , lần gọi tới hàm Giaithua N giảm đơn vị nên dẫn tới trường hợp N=0 Thí dụ : Function Fibonaci(N : Integer) : LongInt; Begin If (N=1) or (N=2) then Fibonaci := Else Fibonaci:= Fibonaci(N-1)+ Fibonaci(N-2); End; Trong hàm Fibonaci , điều kiện dừng là: If (N=1) or (N=2) then Fibonaci := lần gọi tới hàm Fibonaci N giảm 1, dẫn tới tình trạng N=3 ==> Fibonaci(3) = Fibonaci(2)+ Fibonaci(1) = 1+1 =2 Lưu ý Thủ tục hàm đệ qui phải thể tính đệ qui : Nó gọi tới Trong thí dụ nêu lệnh Giaithua := N*Giaithua(N-1); { Thí dụ } Fibonaci:= Fibonaci(N-1)+ Fibonaci(N-2); { Thí dụ } thể tính đệ qui III / Một số Bài tập Bài : Xây dựng hoán vị tập N phần tử 1, 2, 3, , N đệ qui : Bài : Xây dựng tổ hợp chập K N phần tử 1, 2, 3, , N ( 00 then 10 Readln; Giáo viên: Phan Hoàng Thảo Tài liệu ôn đội tuyển Tin Conlai:=Conlai+A[k].Tien; End; Close(F); End; Procedure Trao(Var u,v:PT); Var Coc: PT; Begin Coc:= u; u:= v; v:= Coc; End; Procedure Xap_xep; Var i,j : Byte; Begin For i:=1 to N-1 For j:=i+1 to N If A[i].Ketthuc>A[j].Ketthuc then Trao(A[i],A[j]); End; Procedure Lay(k:Byte); Var j : Byte; Begin Tien := Tien+A[k].Tien; D[k]:= k; Conlai := Conlai-A[k].Tien; Inc(top); Q[top].Thoigian := Thoidiem; {Thoi gian truoc lam k } Thoidiem := Thoidiem+A[k].Thoigian; Q[top].Ten := k; Q[top].Ketthuc := Thoidiem; {Thoi gian sau lam k } For j:=1 to N If (D[j]=0)And(A[j].Ketthuc

Ngày đăng: 17/02/2019, 20:56

Từ khóa liên quan

Mục lục

  • Else Stop := True

  • End

  • IV/ BÀI TẬP

  • Begin

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan