SKKN một số kinh nghiệm nâng cao hiệu quả ôn thi học sinh giỏi thông qua các bài toán đệ quy, khử đệ quy và đệ quy

47 96 0
SKKN một số kinh nghiệm nâng cao hiệu quả ôn thi học sinh giỏi thông qua các bài toán đệ quy, khử đệ quy và đệ quy

Đ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

Một số kinh nghiệm giải toán phơng pháp đệ quy «n thi HSG MỤC LỤC A PHẦN MỞ ĐẦU I Lý chọn đề tài: II Mục đích nghiên cứu: .3 III Đối tượng phạm vi nghiên cứu: IV Nhiệm vụ nghiên cứu: V Phương pháp nghiên cứu: .4 B PHẦN NỘI DUNG I Cơ sở lý luận đề tài: Các khái niệm: a) Khái niệm Đệ quy: .5 b) Đặc điểm chương trình đệ quy: c) Phân loại đệ quy: Gồm loại: .6 Nguyên tắc hoạt động giải thuật đệ quy: a) Khái niệm stack: b) Nguyên tắc hoạt động giải thuật đệ quy ứng dụng Stack: .7 c) Ưu điểm nhược điểm giải thuật đệ quy: Đệ quy quay lui: a) Khái niệm đệ quy quay lui: b) Giải thuật tổng quát đệ quy quay lui: c) Nét đặc trưng phương pháp đệ quy quay lui: 10 d) Ưu nhược điểm: .11 Phương pháp khử đệ quy: .11 Sự khác đệ quy lặp: 12 II GIẢI PHÁP NÂNG CAO HIỆU QUẢ ÔN LUYỆN THI HSG THÔNG QUA CÁC BÀI TẬP VÍ DỤ ĐỆ QUY, ĐỆ QUY QUAY LUI VÀ KHỬ ĐỆ QUY 13 Các tập đệ quy không đệ quy: 13 Các tập đệ quy đệ quy quay lui: 14 Kết đạt được: 19 C KẾT LUẬN VÀ KIẾN NGHỊ 20 GV: Trần Ngọc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG A PHẦN MỞ ĐẦU I Lý chọn đề tài: Như biết, việc đào tạo bồi dưỡng học sinh giỏi thật cơng việc khó khăn, đòi hỏi nhiều cơng sức giáo viên học sinh Trong năm gần đây, kỳ thi chọn học sinh giỏi mơn văn hóa cấp tỉnh, đội tuyển học sinh giỏi trường THPT Nông Cống đạt nhiều thành tích cao, cụ thể xếp hạng năm học từ 2015 trở trước đứng thứ 40 tỉnh Trong năm học 2016-2017 vượt lên thứ 28 năm học 2017-2018 giữ nguyên thứ hạng Điều góp phần công sức lớn lao đội ngũ thầy trực tiếp giảng dạy, vươn lên khó khăn từ em học sinh góp phần vào kết chung nhà trường, có đóng góp thành tích mơn Tin học Vì thân cố gắng phấn đấu để bắt nhịp với đội tuyển môn nhà trường Tuy nhiên, sau nhiều năm đào tạo, nhận thấy thực trạng công tác ôn thi học sinh giỏi môn Tin học bộc lộ khó khăn thuận lợi sau: + Thuận lợi: - Được quan tâm, động viên Ban giám hiệu nhà trường Sự đồng lòng bậc phụ huynh học sinh đội tuyển động viên dành thời gian để em ôn luyện - Sự đúc kết kinh nghiệm giảng dạy, trau dồi kiến thức thân trình giảng dạy - Học sinh có ý thức học tập, say mê mơn học nặng tư duy, năm học 2017-2018 có em đội tuyển Tin học thi mơn: em thi mơn Hóa em thi mơn Tốn + Khó khăn: - Tìm kiếm xây dựng nguồn nhân lực khó khăn, điều kiện mà năm học 2017-2018 khối học sinh 12 không tham gia dự thi, điều làm cho lực lượng học sinh có chất lượng khối 11 khó thi Tin học (vì em học môn tự nhiên thi môn khác) - Học sinh đứng trước lựa chọn học chuyên sâu để thi học sinh giỏi học để thi ĐH-CĐ, dẫn đến việc thi môn trái với môn thi ĐH-CĐ không nằm lựa chọn em - Một số học sinh tham gia học bồi dưỡng chưa thật cố gắng nên kết thi học sinh giỏi chưa cao - Bản thân chưa đủ điều kiện, thời gian để tự bồi dưỡng, nghiên cứu nhằm nâng cao chất lượng dạy học, áp lực cơng việc ơn luyện khơng nhỏ - Cơ sở vật chất, trang thiết bị, tài liệu dạy học phục vụ cho công tác bồi dưỡng HSG nhiều thiếu thốn, hư hỏng nhiều GV: TrÇn Ngäc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG - c bit khối kiến thức thi học sinh giỏi rộng, em ơn luyện từ làm quen với ngơn ngữ lập trình thi khoảng 2-3 tháng Trước thuận lợi khó khăn qua nhiều năm tham gia ôn luyện thi học sinh giỏi rút nhiều học kinh nghiệm, có việc giúp học sinh đạt kết cao thi khó, cuối đề thi Những dạng thường dùng giải thuật đệ quy để giải Như ta biết, phép lặp kỹ thuật dùng để giải toán cách thực liên tiếp số câu lệnh vòng lặp điều kiện thỏa mãn Một kỹ thuật lập trình sử dụng để thay cho phép lặp kỹ thuật đệ quy Mặt khác, thực tế có nhiều tốn đòi hỏi lặp lặp lại cách phức tạp Và đệ quy cung cấp cho ta chế giải toán phức tạp cách đơn giản Hơn nữa, đệ quy thích hợp để giải tốn có chất đệ quy nhiều tốn chưa có lời giải phi đệ quy Từ mục đích nhằm nâng cao kết ôn luyện thi học sinh giỏi, đồng thời giải khó khăn q trình ơn luyện chọn đề tài “Một số kinh nghiệm nâng cao hiệu ôn thi học sinh giỏi thông qua toán đệ quy, khử đệ quy đệ quy quay lui” làm đề tài sáng kiến kinh nghiệm II Mục đích nghiên cứu: - Nhằm nâng cao hiệu ôn luyện thi học sinh giỏi - Gây hứng thú học sinh tham gia thi học sinh giỏi môn tin học thông qua việc sinh test cho tập để chấm điểm, phân tích liệu xử lý - Khắc phục khó khăn giải tốn khó đề thi - Nâng cao lực thân đối tượng có sử dụng phương pháp đệ quy để giải tập III Đối tượng phạm vi nghiên cứu: Đối tượng: Đối tượng nghiên cứu đề tài tìm hiểu lý thuyết đệ quy, xây dựng phương pháp giải đệ quy thông qua tập từ đơn giản đến phức tạp Phạm vi: - Thực giải toán phương pháp đệ quy IV Nhiệm vụ nghiên cứu: - Nghiên cứu sở lý luận lý thuyết đệ quy, tìm hiểu ứng dụng đệ quy - Nghiên cứu phân tích đặc điểm, ưu - nhược điểm sử dụng giải toán bng phng phỏp quy GV: Trần Ngọc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy «n thi HSG - Nghiên cứu thực tiễn dạy học trình hướng dẫn học sinh giải toán đệ quy V Phương pháp nghiên cứu: Lý thuyết - Tham khảo tài liệu sách, báo, mạng Internet có liên quan trực tiếp đến đề tài Thực tiễn Trong q trình dạy học ơn luyện thi học sinh giỏi thực bước sau: + Tìm hiểu lý thuyết, tốn ứng dụng phương pháp đệ quy + Xây dựng toán đơn giản giải phương pháp đệ quy để học sinh tiếp cận bước dạng toán áp dụng + Thực giải toán khó đề thi HSG tỉnh năm đề thi tỉnh khác + Tạo TEST cho tập từ dễ đến khó nhằm tạo hứng thú học tập cho học sinh, đồng thời đánh giá độ phức tạp thuật toán, đánh giá lực phân tích thuật tốn để viết chng trỡnh ti u nht GV: Trần Ngọc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy «n thi HSG B PHẦN NỘI DUNG I Cơ sở lý luận đề tài: Các khái niệm: a) Khái niệm Đệ quy: Nếu thuật toán toán A thực thuật toán tốn A’ có dạng giống A, thuật tốn đệ quy (A’ nhỏ A) Hay nói cách khác là: Từ tốn A chia nhỏ tốn thành tốn kiểu so với toán gốc ban đầu, chia nhỏ gặp đến toán mà xử lý (trường hợp suy biến) thao tác dừng Như trình lập trình, việc xây dựng chương trình (thủ tục/hàm) sử dụng phương pháp đệ quy hiểu sau: Chương trình đệ quy chương trình mà có lời gọi tới chương trình + Các tốn dùng đệ quy: Bài tốn dễ dàng giải số trường hợp riêng ứng với giá trị đặc biệt tham số Ta gọi trường hợp suy biến Trong trường hợp tổng quát, tốn quy tốn dạng giá trị tham số bị thay đổi Và sau số hữu hạn bước biến đổi Ðệ Quy dẫn đến trường hợp suy biến Ví dụ: Định nghĩa giai thừa n!: + Kết với test n = 5: 0! = 5! = x 4! Nếu n>0 n!=n*(n-1)! = x (4 x 3!) = x (4 x (3 x 2!)) + Code mô tả sau: = x (4 x (3 x (2 x 1!))) Function gt(n: Word): Longint; = x (4 x (3 x (2 x (1 x 0!)))) Trường hợp Begin suy biến If n = then gt : =1 = x (4 x (3 x (2 x 1))) Else gt := n*gt(n - 1); = 120 End; Các toán khác: Định nghĩa số tự nhiên: số tự nhiên n số tự nhiên n-1 số tự nhiên Định nghĩa dãy Fibonacci f(n): 1, Nếu n = 1; 1, Nếu n = 2; F(n-1) + f(n-2) Nếu n > GV: TrÇn Ngọc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG T cỏc ví dụ nhận thấy chúng có chung cấu trúc dạng hàm gọi hàm khác dạng mơ hình phân cấp Tuy nhiên số tốn, việc dùng hàm gọi hữu dụng Có thể định nghĩa hàm đệ quy hàm gọi đến trực tiếp hay gián tiếp thông qua hàm khác Vấn đề đệ quy vấn đề phức tạp, gây khó hiểu cho người học, đặc biệt học sinh học lập trình có tư thuật tốn chưa sâu Do đề tài giới thiệu, phân tích, mơ tốn đệ quy từ đơn giản đến phức tạp để em dễ dàng tiếp cận Trước tiên ta xem xét khái niệm đệ quy, sau kiểm tra vài chương trình có chứa hàm đệ quy Cách tiến hành giải tốn đệ quy nhìn chung có điểm chung sau Trước tiên gọi hàm đệ quy để giải toán, hàm đệ quy thực biết cách giải tốn trường hợp đơn giản (hay gọi trường hợp sở) Nếu hàm đệ quy gọi trường hợp sở, hàm cần đơn giản trả lại kết Nếu hàm gọi trường hợp phức tạp hơn, hàm đệ quy chia công việc cần giải thành hai phần Một phần hàm biết cách giải nào, phần khơng biết cách giải nhiên để gọi có khả đệ quy, phần sau phải giống với toán ban đầu đơn giản hay nhỏ tốn ban đầu Bởi tốn giống với toán ban đầu nên hàm thực gọi để giải cơng việc đơn giản - lời gọi đệ quy hay gọi bước đệ quy Ðể đảm bảo việc đệ quy có kết thúc, lần gọi đệ quy tốn phải đảm bảo đơn giản bước đệ quy thực tiếp toán đơn giản dần, đơn giản tới mức trở thành trường hợp sở Có thể nhận thấy hàm đệ quy xử lý trường hợp sở để trả lại kết tính cho hàm mức phức tạp hơn, đến lượt hàm lại tính trả lại kết cho hàm phức tạp lời gọi hàm ban đầu b) Đặc điểm chương trình đệ quy: - Trong chương trình đệ quy có lời gọi đến chương trình - Mỗi lần gọi lại chương trình kích thước tốn thu nhỏ trước - Có trường hợp đặc biệt: trường hợp suy biến Đây trường hợp giúp kết thúc việc chia nhỏ chương trình để từ truy hồi công thức lấy kết c) Phân loại đệ quy: Gồm loại: Đệ quy trực tip v quy giỏn tip GV: Trần Ngọc Dơng Một số kinh nghiệm giải toán phơng pháp ®Ư quy «n thi HSG + Đệ quy trực tiếp: Là loại đệ quy mà đối tượng mô tả trực tiếp qua nó: Ví dụ 1: A mơ tả qua A, B, C… Trong B, C khơng chứa A Ví dụ 2: Mơ tả đệ quy gia phả: Gia phả người bao gồm người gia phả người ch gia phả người mẹ Ví dụ 3: Mơ tả đệ quy thi chọn hoa hậu: - Chọn hoa hậu khu vực - Chọn hoa hậu hoa hậu + Đệ quy gián tiếp: Là loại đệ quy mà đối tượng mơ tả gián tiếp qua nó: Ví dụ: A mơ tả qua B, C, D Trong đó: B mơ tả qua A E, C D không chứa A Nguyên tắc hoạt động giải thuật đệ quy: Trong trình thực lời gọi đệ quy, tham số, biến cục hay địa lưu tạm thời nhớ Các giá trị lấy để giải xảy trường hợp suy biến, giá trị vào sau lấy Chính q trình lưu xử lý liệu thực theo mơ hình stack Hình ảnh minh họa hoạt động stack a) Khái niệm stack: Stack (ngăn xếp) danh sách mà việc thêm xóa phần tử diễn đầu danh sách Stack thiết kế theo nguyên lý Last-In-First-Out (LIFO), nghĩa vào sau, trước Phần tử thêm vào sau phần tử lấy Ví dụ: - Xếp đĩa CD chồng lên nhau, đĩa CD cuối đưa vào đĩa CD lấy + Đặc điểm Stack Mọi phần tử Stack phải kiểu liệu kiểu liệu nào, kể struct hay object Một Stack gồm có phần đáy (bottom) phần đỉnh (top) Phần tử nằm đỉnh Stack gọi Top Item Mọi thao tác thêm, xóa phần tử diễn đỉnh Stack b) Nguyên tắc hoạt động giải thuật đệ quy ứng dụng Stack: GV: TrÇn Ngọc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG - Khi thực giải thuật đệ quy bước giải thuật đệ quy thực - Khi gặp lời gọi đệ quy trước thực lời gọi đệ quy, đoạn mã lệnh chưa thực xong với đối tượng liệu liên quan thời điểm lưu vào stack - Đến lúc thực lời gọi đệ quy (trường hợp suy biến) đối tượng lưu stack lấy để xử lý Ví dụ: Giải thuật đệ quy cho tốn tính N! Giả sử N = 3, quy trình thực sau: - Thực lời gọi hàm: giaithua := gt(3); máy tính ghi nhớ là: gt(3) := * gt(2); tính gt(2) - Tiếp tục máy lại ghi nhớ: gt(2):= 2*gt(1); tính gt(1) - Theo định nghĩa hàm gt(1):= 1; máy quay ngược lại: gt(2):= * 1; cho kết - Tiếp tục: gt(3) := * 2; cho kết Như kết cuối trả Ta có: 3! = Mặc dù ứng dụng giải toán phương pháp đệ quy kể toán học lẫn ứng dụng thực tiễn tồn số ưu – nhược điểm, cụ thể sau: c) Ưu điểm nhược điểm giải thuật đệ quy: + Ưu điểm: - Công cụ ứng dụng tốt với tốn có chất đệ quy, thể tư rõ ràng chặt chẽ - Ngắn gọn có khả định nghĩa tập hợp lớn đối tượng số câu lệnh hữu hạn - Giải thuật đệ quy thực nhiều tốn mà giải thuật khơng đệ quy khơng thể thực - Chương trình có chứa giải thuật đệ quy trở nên ngắn gọn, dễ hiểu, nêu bật chất vấn đề toán + Nhược điểm: - Chương trình có sử dụng phương pháp đệ quy tốn nhiều nhớ không dung đệ quy lần gọi đệ quy lại cần thêm vùng nhớ vùng nhớ cũ trì chưa giải phóng - Tốc độ thực chương trình chậm khơng dụng đệ quy - Do đệ quy lưu trữ liệu trung gian vào Stack nên lưu nhiều liệu lớn Stack gây tượng tràn Stack Đệ quy quay lui: GV: TrÇn Ngäc Dơng Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG a) Khỏi nim đệ quy quay lui: Quay lui (Backtracking) phương pháp tìm kiếm lời giải cho tốn mà nghiệm hay tập cấu hìn thỏa mãn đồng thời tính chất P Q, đó: + P: Là cách xác định cấu hình + Q: Tính dừng tốn Hay định nghĩa cách khác là: Thuật toán quay lui dùng để giải tốn liệt kê cấu hình Mỗi cấu hình xây dựng cách xây dựng phần tử, phần tử chọn cách thử tất khả Ví dụ 1: Giả sử cấu hình liệt kê có dạng a[1 n], thuật tốn quay lui thực qua bước 1) Xét tất giá trị a[1] nhận, thử a[1] nhận giá trị Với giá trị thử gán cho a[1] ta sẽ: 2) Xét tất giá trị a[2] nhận, thử cho a[2] nhận giá trị Với giá trị thử gán cho a[2] lại xét tiếp khả chọn a[3] tiếp tục bước: n) Xét tất giá trị a[n] nhận, thử cho a[n] nhận giá trị đó, thơng báo cấu hình tìm (a[1], a[2], , a[n]) Ví dụ 2: Liệt kê tất hoán vị n số tự nhiên nguyên dương theo thứ tự tăng dần từ điển: N = 3: gồm hoán vị: 123, 132, 213, 231, 312, 321 b) Giải thuật tổng quát đệ quy quay lui: Procedure TRY(i: integer); Var k: integer; Begin For k:=1 to n Begin Chọn bước thứ k If THEN Begin Ghi nhận bước i If i max then begin max := dem; vmax := sh; end; end; procedure thong_bao; var t,i,j : integer; begin assign(f,fo);rewrite(f); writeln(f,'so vung lien thong la: ',sh); for t := to sh begin write(f, 'vung lien thong thu ', t,' : '); for i := to n for j := to m if b[i,j] = t then write(f,'(',i,',',j,')',' '); writeln(f); end; writeln(f,'so vung lien thong lon nhat la: '); for i:=1 to n GV: Trần Ngọc Dơng 33 Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG for j:=1 to m if b[i,j] = vmax then write(f,'(',i,',',j,')',' '); end; BEGIN nhap; for r:=1 to n for s:=1 to m if b[r,s] = then begin dem:=1; inc(sh); lt(r,s); end; thong_bao; close(f); END BÀI 7: Biểu thức ZERO Cho số tự nhiên N ≤ Giữa số từ đến N thêm vào dấu + - cho kết thu Hãy viết chương trình tìm tất khả Dữ liệu vào: Lấy từ file văn ZERO.INP với dòng ghi số N Dữ liệu ra: Ghi vào file văn có tên ZERO.OUT có cấu trúc sau: - Dòng đầu ghi số lượng kết tìm - Các dòng sau dòng ghi kết tìm Ví dụ: Hướng dẫn giải Áp dụng thuật tốn đệ quy quay lui để giải toán này, ta dùng thủ tục đệ quy Try(i) Giả sử ta điền dấu’+’ ’-’ vào số từ đến i, cần điền dấu i i + Ta chọn ba khả năng: điền dấu ’+’, điền dấu ’-’, không điền dấu Khi chọn ba khả trên, ta tiếp tục lựa chọn dấu để điền vào i + i + cách gọi đệ quy Try(i+1) Ta duyệt tất khả để tìm tất nghiệm tốn, tốn khơng bị thiu nghim GV: Trần Ngọc Dơng 34 Một số kinh nghiệm giải toán phơng pháp đệ quy ôn thi HSG Nếu i = N ta kiểm tra xem cách điền có thoả mãn kết hay không Để kiểm tra ta dùng thủ tục Test chương trình Nếu tổng cách điền nghiệm tốn, ta ghi nhận Nếu i < N tiếp tục gọi Try(i+1) Trong chương trình ta dùng biến dem để đếm cách điền thoả mãn, mảng M kiểu string ghi nhận cách điền dấu thoả mãn u cầu tốn Chương trình: Type MangStr = array[1 15] of string; Const Fi ='ZERO.INP'; Fo ='ZERO.OUT'; Dau : array[1 3] of string[1] = ('-','+',''); S : array[1 9] of char =('1','2','3','4','5','6','7','8','9'); ChuSo = ['1' '9']; Var N,k,dem: byte; D : array[2 9] of string[1]; F : Text; St : String; M : MangStr; Procedure Write_out; Var i : byte; Begin Assign(F,Fo); Rewrite(F); Writeln(F,dem); For i:= to dem writeln(F,M[i],' = 0'); Close(F); Halt; End; Procedure Read_inp; Begin Assign(F,Fi); Reset(F); Read(F,N); Close(F); If N < then write_out; End; Function DocSo(S : String): longint; Var M : longint; t : byte; Begin M:= 0; t:= 0; If S[k] in ['+','-'] then begin t:= k; Inc(k); end; While (k=best then begin best:=val; bestconfig:=x; end; end; procedure try(i:integer); var j:integer; begin for j:= to if sum+j*a[i]1 then begin inc(socach); write(f,a[1]); for j:=2 to k write(f,'+',a[j]:2); writeln(f); end; End; BEGIN assign(f,fi); reset(f); readln(f,q); close(f); socach:=0; r:=0; assign(f,fo); rewrite(f); tach(q,r); writeln(f,socach); close(f); END BÀI 11: Đặt phép tính Cho số tự nhiên n Hãy đặt dấu + – vào chữ số 1, 2, 3, 4, 5, 6, 7, 8, viết theo thứ tự cho để tạo biểu thức có giá trị n Ví dụ cho n =122 thỡ GV: Trần Ngọc Dơng 42 Một số kinh nghiệm giải toán phơng pháp đệ quy «n thi HSG kết nhận là: 12 + 34 - - + 78 + 9, Nếu khơng tìm dãy ghi Input: Vào từ file văn PHEPTINH.INP số nguyên dương N (N

Ngày đăng: 21/11/2019, 08:52

Từ khóa liên quan

Mục lục

  • A. PHẦN MỞ ĐẦU 2

  • A. PHẦN MỞ ĐẦU

  • a:array[0..50] of longint;

  • f:text;

  • Procedure Tach(n,k:longint);

  • var j,l:longint;

  • Begin

  • if (n>0) then

  • begin

  • if (k=0) then l:=1

  • else l:=a[k];

  • for j:=l to n do

  • begin

  • k:=k+1;

  • a[k]:=j;

  • tach(n-j,k);

  • k:=k-1;

  • end;

  • end

  • else

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

Tài liệu liên quan