Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
274,5 KB
Nội dung
Mục lục Nội dung Mở đầu 1.1 Lý chọn đề tài 1.2 Mục đích đề tài sáng kiến kinh nghiệm Trang 1 1.3 Đối tượng, phạm vi nghiên cứu SKKN 1.4 Phương pháp nghiên cứu 1.5 Những điểm SKKN: 1.6 Đóng góp SKKN Nội dung đề tài sáng kiến kinh nghiệm 2.1 Cơ sở lý luận sáng kiến kinh nghiệm 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm 2 Nội dung KẾT LUẬN, KIẾN NGHỊ 2,3,4,5,6,7,8,9,10,11,1 2,13,14,15,16,17,18,19 ,20 20 3.1 Kết luận: 20 3.2 Kiến nghị 20 1 Mở đầu 1.1 Lý chọn đề tài Bồi dưỡng học sinh giỏi nhiệm vụ quan trọng giáo viên Do đó, việc nghiên cứu, tìm tịi, tích lũy kiến thức công việc thường nhật giáo viên nhằm nâng cao trình độ chun mơn nghiệp vụ, tích lũy kinh nghiệm cho thân Trong năm gần mức độ yêu cầu đề thi học sinh giỏi ngày nâng cao Những tốn khó học sinh, chương trình thường khó thực hết test yêu cầu, đặc biệt học sinh không chuyên trường THPT Lê lợi Trong lập trình có nhiều phương pháp, cách giải tốn nêu ra, nhiên có tài liệu trình bày cụ thể cách giải tốn có liệu lớn Hơn toán Tin học thường đa dạng, phong phú Do giáo viên bồi dưỡng học sinh giỏi gặp nhiều khó khăn việc hướng dẫn học sinh giải tốn Qua q trình giảng dạy, học tập tham gia bồi dưỡng học sinh giỏi môn Tin học trường THPT Lê Lợi, tổng hợp số kinh nghiệm giải phần khó khăn nêu Do tơi chọn đề “Một số dạng toán cho học sinh khá, giỏi môn Tin học 11 trường THPT Lê Lợi năm học 2020-2021" 1.2 Mục đích đề tài sáng kiến kinh nghiệm - Đưa số kinh nghiệm giúp giải tốn có liệu lớn mà cách giải thơng thường khơng giải mặt thời gian không thực hết test yêu cầu - Nâng cao lực giải vấn đề giải toán Tin học học sinh giỏi học sinh tham gia dự kỳ thi học sinh giỏi cấp tỉnh 1.3 Đối tượng, phạm vi nghiên cứu SKKN - Hs giỏi lớp 11 trường THPT Lê Lợi - Các tốn Tin học - Chun đề, chương trình để bồi dưỡng học sinh giỏi Tin học THPT - Một số kinh nghiệm, giải pháp giúp bồi dưỡng lực giải vấn đề cho học sinh khá, giỏi 1.4 Phương pháp nghiên cứu - Nghiên cứu tài liệu, trao đổi chuyên môn với đồng nghiệp, bạn bè để giải vấn đề - Thực bồi dưỡng học sinh giỏi qua năm học 2017 – 2018, năm học 2018 – 2019, 2020- 2021 - Dựa vào kiến thức mà học sinh học chương trình Tin học phổ thơng cấu trúc đề thi học sinh giỏi môn Tin học qua kì thi học sinh giỏi Tỉnh Thanh Hóa 1.5 Những điểm SKKN: - Đưa giải pháp giúp giải toán thuật tốn tối ưu tổ chức hợp lí liệu phân loại thành dạng cụ thể - Minh họa giải pháp ví dụ cụ thể Liên hệ số đề thi, tập vận dụng - SKKN đưa số giải pháp để xử lí tốn liệu lớn thông qua việc phân loại thành dạng thường gặp, giúp người đọc dễ hiểu dễ liên hệ với toán khác - Hệ thống tốn ví dụ khơng phải toán xa lạ, SKKN đưa hướng giải theo hướng “làm mịn dần”, có so sánh cách giải kiểm chứng thời gian thực cụ thể nhờ phần mềm Themis 1.6 Đóng góp SKKN - Đưa số kinh nghiệm để giải số toán - Là tài liệu tham khảo cho học sinh giỏi môn tin 11 để bồi dưỡng học sinh giỏi Tin học nhà trường có hiệu Nội dung đề tài sáng kiến kinh nghiệm 2.1 Cơ sở lý luận sáng kiến kinh nghiệm - Với phát triển nhanh ngành công nghệ thông tin, máy tính ngày có tốc độ xử lý cao đáp ứng yêu cầu xử lý toán có liệu lớn thời gian thực ngắn - Học sinh giáo viên dễ dàng tìm hiểu nguồn tài liệu để học tập tham khảo qua đồng nghiệp, mạng Internet, … 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm - Những kiến thức chương trình Tin học phổ thơng cịn hạn chế chưa đủ đáp ứng cho việc giải số toán kỳ thi học sinh giỏi Tỉnh có yêu cầu liệu lớn thời gian thực ngắn - Các tài liệu tổng hợp cách để giải toán yêu cầu cao chưa nhiều để học sinh tham khảo, ôn luyện Nội dung Bài tốn có liệu lớn tốn có liệu vào có giá trị lớn kiểu liệu thường dùng kiểu Byte, integer, word, string… Tuy so với Turbo Pascal Free pascal cho phép nhớ lưu trữ lớn nhiều Tuy nhiên, toán đề thi học sinh giỏi khơng u cầu liệu lớn mà yêu cầu thời gian thực nhanh (thường khơng q 1s) Để giải tốn có liệu lớn ta cần tối ưu hóa thuật tốn để giảm khơng gian lưu trữ thời gian thực chương trình Tối ưu hố thuật tốn cơng việc u cầu tư thuật toán cao, với khả sử dụng thục cấu trúc liệu Vì vậy, việc tìm thuật tốn tối ưu khơng dễ chút Tối ưu hoá thường tiến hành theo hai góc độ tối ưu theo khơng gian lưu trữ (bộ nhớ) tối ưu theo thời gian có nghĩa giảm độ phức tạp thuật toán, giảm bước xử lý chương trình… Tuy nhiên khơng phải lúc ta đạt đồng thời điều đó, nhiều trường hợp tối ưu thời gian làm tăng không gian lưu trữ, ngược lại Bài toán Tin học đa dạng phong phú Do đó, việc giải tốn khơng phải vấn đề đơn giản Từ kinh nghiệm bồi dưỡng đội tuyển học sinh giỏi cấp tỉnh môn Tin học năm qua mạnh dạn đưa số kinh nghiệm giải số tốn có liệu lớn cách tối ưu hóa thuật toán dạng tập cụ thể sau: Dạng 1: Sử dụng suy luận toán học Trong nhiều toán tin học biết suy luận dựa theo định lí, cơng thức, kết quả… tốn học cho ta cách giải tốt Chúng ta xét ví dụ sau: Ví dụ 1: Bài toán: Kiểm tra tính nguyên tố số nguyên dương (N>0) - Cách 1: Đây toán Tin học sử dụng thuật tốn khơng tối ưu khơng thể giải trường hợp N lớn - Từ định nghĩa số nguyên tố số nguyên dương có ước khác ta viết hàm nguyên tố sau: Function NT1(n: Longint): Boolean; Var i: integer; Begin If n=1 then exit(false); If n max then Begin Max:=S; Dau:=i; Cuoi:=j; End; End; End; Với cách giải có độ phức tạp O(n 3) với vòng for lồng Đoạn mã có nhiều để ta tối ưu, ví dụ tính tổng từ i->j không tận dụng tổng từ i->(j-1) tính trước đó! Do chưa thể chương trình tối ưu Đương nhiên khơng thể thực với liệu thời gian yêu cầu đề - Cách 2: Với cải tiến nhỏ ta xét hết tất dãy dãy số vị trí thứ i (i=0,1,2…n-1), với việc tận dụng lại giá trị tính trước Chúng ta có đoạn mã sau: Procedure Timmax; Var i,j,k: longint; Begin Max:= a[0]; dau:=0; cuoi:=0; For i:=0 to n-1 Begin S:=0; 14 For j:=i to n Begin S:=s+a[j]; If s > max then Begin Max:=S; Dau:=i; Cuoi:=j; End; End; End; End; Thuật tốn sử dụng vịng lặp lồng nhau, vòng lặp n lần, vòng thứ lặp tối đa n lần, nên dễ thấy độ phức tạp thuật toán O(n2) Thử với N =104Thời gian thực ≈ 0.173273530 giây Với N lớn thực thời gian 1s u cầu đề Do khơng đáp ứng mặt thời gian - Cách 3: Ta sử dụng thêm mảng k,c mảng gồm n phần tử Trong k[i] lưu giá trị lớn tổng dãy mà a[i] cuối dãy, c[i] lưu số đầu dãy Như k[i]=max(a[i],a[i]+k[i-1]) Chúng ta có đoạn mã sau, xây dựng tư tưởng quy hoạch động: Procedure timmax; Var i,j,k: longint; k:array[1 100000] of longint; Begin Max:=0; k[0]:=0; c[0]:=0; dau:=0;cuoi:=0; For i:=1 to n Begin S:=k[i-1] +a[i]; K[i]:=a[i]; C[i]:=i; If s> k[i] then Begin K[i]:=s; C[i]:=c[i-1]; End; If k[i] > max then Begin Max:=k[i]; Cuoi:=i; 15 End; End; Dau:=c[cuoi]; End; Với thuật toán độ phức tạp O(n) với vòng lặp n lần Như vậy, nói ta tối ưu xong mặt thời gian từ độ phức tạp O(n3) xuống cịn O(n) Về khơng gian nhớ, cách làm ta sử dụng thêm mảng k c mảng n phần tử, toán yêu cầu với N lớn giải nào? Ta dễ dàng bỏ mảng k sử dụng tính tốn hồn tồn mảng a, bỏ nốt mảng c không? bỏ ta xác định giá trị đầu dãy nào? - Cách 4: Tại vị trí xét ta so sánh để tìm dãy có tổng lớn trên, ta sử dụng biến để lưu giá trị đầu dãy tìm được! Cách làm sau: Procedure timmax; Var i,j,k: longint; Begin Dau:=0; cuoi:=0; luu:=0;max:=a[0]; For i:=1 to n Begin A[i]:=a[i] + a[i-1]; If a[i] < a[i]-a[i-1] then Begin A[i]:=a[i]-a[i-1]; Dau:=i; End; If a[i]>max then Begin Max:=a[i]; Cuoi:=i; Luu:=dau; End; End; Dau:=luu; End; Cách làm hiệu quả, nhiên làm biến đổi dãy số ban đầu (mảng a) Làm giữ nguyên dãy số, không dùng thêm mảng phụ, đáp ứng yêu cầu đề Với cải tiến nhỏ ta thấy thuật toán tối ưu nhất: 16 Procedure timmax; Var i,j,k: longint; Begin Dau:=0; cuoi:=0; luu:=0;max:=a[0]; For i:=1 to n Begin S:=s+a[i]; If s < a[i] then Begin S:=a[i]; Dau:=i; End; If s > max then Begin Max:=s; Cuoi:=i; Luu:=dau; End; End; Dau:=luu; End; Với N = 104Thời gian thực ≈ 0.014385053 giây Với N = 106Thời gian thực ≈ 0.145823363 giây Như vậy, với toán dạng dãy con, đoạn con, cần ý tinh chỉnh cho giảm số lần thực để chương trình thực với liệu lớn thời gian hạn chế Bài toán dạng đa dạng Trên thực tế, đôi lúc việc tinh chỉnh chưa giải hết tối ưu mà đòi hỏi sử dụng thuật toán khác quy hoạch động, chia để trị…mới đạt u cầu tốn Chúng ta tìm hiểu dạng Bài tập tương tự: Bài 1: DÃY CON Cho dãy số nguyên dương a1,a2…aN (10