TÀI LIỆU DỆ QUY DÀNH CHO HOC SINH CHUYÊN TIN

113 532 0
TÀI LIỆU DỆ QUY DÀNH CHO HOC SINH CHUYÊN TIN

Đ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

54 Tài liệu 11 Chuyên Tin - Lê Quý Đôn A / Khái niệm chung I / Khái niệm đệ qui : Một đối tợng gọi có tính đệ qui đợc đị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 ( N-1) Thí dụ 2: Xây dựng hoán vị N phần tử có tính chất đệ qui Thật : Giả sử có hoán vị S (A ,A , A i-1 ,Ai , An-1 ,An ), sau đổi chỗ phần tử S[i] S[j] hoán vị ta đợc hoá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 _ C11 Đệ qui TDH 11/12/2015 11/12/2015 55 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 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 ) , ta cho phần tử thứ i nhận giá trị từ (A i-1 +1) đến giá trị cao đợc giá trị (NK)+i sau phần tử thứ i (K-i) phần tử ,do 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ứ , ta phải dựa vào phần tử hàng rào phần tử vị trí thứ ,ta gán cho phần tử giá trị cho phù hợp qui luật nêu ? rõ ràng giá trị ,nhằm cho quyền đợc bình đẳng nh phần tử khác Phần tử chịu trách nhiệm nặng nề ,bắt đầu từ xây dựng dần đợc phần tử tổ hợp , song ta đừng quên phải ngậm ngùi không đợc đứ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,5 0*** 01** i=1 ; n-k+i = i=2 ; n-k+i = 012* 02** 013* i=3 ; n-k+i = 0123 0124 0125 0134 0135 014* 023* 03** 024* 034* 0145 0234 0235 0245 0345 Ii / Lu ý thủ tục hàm đệ qui : Lu ý + 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 thoát ( để không gọi tới ) 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ụ : _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 56 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 : If (N=1) or (N=2) then Fibonaci := lần gọi tới hàm Fibonaci N giảm , dẫn tới tình trạng N=3 ==> Fibonaci(3) = Fibonaci(2)+ Fibonaci(1) = 1+1 =2 Lu ý 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 ( 0Ldcheo then Begin Ldcheo := p; LB := B; LM := M; End; End; Procedure Vet(x,y : Byte); Var hg,i,j : Byte; Begin Tim(x,y); For hg := to If chapnhan(x,y,hg) then Begin Inc(q); Dat(x,y,hg); If q=21 then Ghitoiuu Else Vet(x,y); Dec(q); Xoa(x,y,hg); End; End; Procedure Datnot; Var i,j,k,dem : Byte; Begin FillChar(D,Sizeof(D),False); For i:=1 to D[LM[i,i]]:= True; For k:=1 to 21 If Not D[k] then Begin dem := 0; For i:=1 to For j:=1 to If LM[i,j]=k then Begin Inc(dem); LB[i,j]:= T[k,dem]; _ C11 Đệ qui TDH 11/12/2015 11/12/2015 166 Tài liệu 11 Chuyên Tin - Lê Quý Đôn End; End; BEGIN END End; Clrscr;{ TaoF;} DocF; Assign(F,Fo); ReWrite(F); Ldcheo := 0; Writeln('Please wait '); For x:=1 to For y:=1 to Begin FillChar(M,Sizeof(M),0); FillChar(B,Sizeof(B),0); q := 0; M[x,y] := 22; Vet(1,1); End; Datnot; GhiLM; GhiLB; Close(F); Writeln('Da xong '); Readln; Bài làm theo sơ đồ sau : - Cho ô trống tuỳ ý bàn cờ , coi Triminô nh ( nghĩa không để ý tới số chúng ) , đặt 21 quân Triminô lên bàn cờ , đựơc kết : ô trống vào vị trí (3,3) ; (3,6) ; (6,3) ; (6,6) đặt đợc Tất có 1424 cách đặt theo kiểu (tạm gọi cách cấu hình bàn cờ ) - Với cách đặt , xếp Triminô lần lợt vào vị trí đờng chéo từ góc trên_trái góc dới_phải , cho vị trí tốt : + Xem ô (i,i) xét ô vị trí thứ Triminô Ti chứa ô (i,i) cấu hình xét (gọi vị trí vt ) + Duyệt Triminô cha dùng 21 Triminô , tìm có số lớn vị trị vt Nếu vt=1 phải tìm số lớn vị trí Gọi tìm đợc Tx + Trên bàn cờ thay tơng ứng Ti Tx , xoá Tx sử dụng - Tính đờng chéo , thấy tốt lu lại bàn cờ cấu hình tơng ứng - Đặt nốt Triminô cha dùng vào bàn cờ theo lu cấu hình ( cần cách đặt nốt ) _ C11 Đệ qui TDH 11/12/2015 11/12/2015 [...]... TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 69 CloseGraph; END Chú ý : Chơng trình trên dùng đệ qui gián tiếp (với từ ForWard ) Thủ tục D gọi tới các thủ tục A và C ở dới nó Thủ tục B gọi tới các thủ tục C và A ở dới nó Ngoài ra , để dùng các lệnh vẽ ( chế độ đồ hoạ ) ta sử dụng Unit Graph _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 70 B / Quay... 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 85 Bài toán ngời du lịch : Cho N thành phố , giá cớc phí vận chuyển từ thành phố i tới thành phố j là C ij Yêu cầu : File dữ liệu vào là DULICH.INP nh sau Dòng đầu là N , XP , Dich ( N số thành phố , XP : th/ phố xuất phát , Dich : th/phố đích ) N dòng tiếp theo : Số đầu dòng là i , các cặp số tiếp theo là j và C ij của ma trận C(N,N) File dữ liệu ra là... Thử chọn 1 đề cử cho bớc k + Nếu đề cử này thoả mãn bài toán thì Begin * Ghi nhận giá trị đề cử; * Lu trạng thái mới của bài toán sau đề cử; * Tim(k+1); * Trả lại trạng thái của bài toán trớc khi đề cử; End; End; _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 72 End; Thí dụ : Bài toán con mã đi tuần ( Hiện tất cả các nghiệm) Cách 1 : Program Madequy; Uses Crt; Const... Assign(F,Fi); Append(F); {Ghi nghiệm ngay cuối File dữ liệu Input } Writeln(F,'Nghiem thu ',dem); For i:=1 to N do Begin For j:=1 to N do Write(F,A[i,j]:3); Writeln(F); End; Close(F); End; Procedure Try(k:Integer;x,y: Integer); Var i,j,u,v : Integer; Begin If k > nsq then Hien Else For i:=1 to 8 do _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 73 Begin u:=x+D[i]; v:=y+C[i];... End; End; End; Trong bài toán tìm 1 nghiệm , ngời ta thờng đa thêm vào các điều kiện đối với các khả năng đề cử để bỏ bớt đi 1 số khả năng đề cử hoặc làm cho khả năng đề cử thu hẹp lại _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 76 Thí dụ : + Điều kiện cần để một khả năng đợc chấp nhận ở bớc thứ i là bớc i+1 cũng có khả năng chấp nhận một đề cử của nó và bớc thứ... Thoát End; End; Cũng có thể viết dới dạng sau : _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 81 Procedure Tim(k : Integer); Begin Nếu bớc k là bớc sau bớc cuối cùng thì Hiện nghiệm ; Vòng lặp đề cử mọi khả năng của bớc thứ k trong tìm kiếm 1 nghiệm Begin + Thử chọn 1 đề cử cho bớc k + Nếu đề cử này thoả mãn bài toán thì Begin * Ghi nhận giá trị đề cử; * Lu trạng thái... 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 83 Cách 1 : Procedure Tim(k : Integer); Begin Nếu bớc k là bớc sau bớc cuối cùng thì Begin Nếu tìm đợc nghiệm mới thì So sánh nghiệm mới với nghiệm lu tối u trớc để chọn lại nghiệm lu tối u End; Vòng lặp đề cử mọi khả năng của bớc thứ k trong tìm kiếm 1 nghiệm ( Chú ý nên kết hợp với nghiệm lu tối u đã có để thu hẹp diện đề cử ) Begin + Thử chọn 1 đề cử cho bớc... tiếp theo đợc nhanh chóng hơn Cách 2 : _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 84 Procedure Tim(k : Integer); Begin Vòng lặp đề cử mọi khả năng của bớc thứ k trong tìm kiếm 1 nghiệm ( Chú ý nên kết hợp với nghiệm lu tối u đã có để thu hẹp diện đề cử ) Begin + Thử chọn 1 đề cử cho bớc k + Nếu đề cử này chấp nhận đợc thì Begin * Ghi nhận giá trị đề cử; * Lu trạng... : LongInt) : LongInt; _ C11 Đệ qui TDH 11/12/2015 11/12/2015 Tài liệu 11 Chuyên Tin - Lê Quý Đôn 67 Begin If M=0 then Chia := 1 Else {M>0} If N=0 then Chia := 0 Else {N>0} If M

Ngày đăng: 12/11/2015, 20:40

Từ khóa liên quan

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

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

Tài liệu liên quan