Sử dụng quy hoạch động đề nâng cao năng lực giải quyết một số vấn đề về dãy con bằng ngôn ngữ lập trình c++

11 9 0
Sử dụng quy hoạch động đề nâng cao năng lực giải quyết một số vấn đề về dãy con bằng ngôn ngữ lập trình c++

Đ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ỤC LỤC I PHẦN MỞ ĐẦU 1.1 Lý chọn đề tài 1.2 Mục đích nghiên cứu 1.3 Đối tượng nghiên cứu 1.4 Phương pháp nghiên cứu II NỘI DUNG NGHIÊN CỨU 2.1 Cơ sở lý luận 2.2 Thực trạng trước nghiên cứu 2.3 Các biện pháp sử dụng để giải vấn đề 2.4 Các toán dãy liên tiếp 2.5 Các tốn dãy khơng liên tiếp 23 III KẾT LUẬN VÀ KIẾN NGHỊ 42 Kết nghiên cứu : 42 Kiến nghị, đề xuất : 42 Kết Luận 43 I PHẦN MỞ ĐẦU 1.1 Lý chọn đề tài Trong trình giảng dạy phát triển lực cho học sinh giỏi thường gặp nhiều toán dãy Đây dạng tập khó thường xuất đề thi học sinh giỏi môn Tin học Rất nhiều học sinh gặp dạng tập dạng khó tìm cách giải tối ưu nên điểm khơng cao Ngun nhân nhiều có hai nguyên nhân là: chương trình cho kết output sai chương trình cho kết output với input có liệu nhỏ với input có liệu lớn chương trình chạy thời gian quy định 1giây/1test (mặc dù kết output đúng) Trên thực tế có số tài liệu đề cập đến tập dãy con, tài liệu đưa thuật toán chương trình giải số tập cụ thể làm ví dụ minh họa cho kỹ thuật lập trình nghiên cứu mà chưa khái quát dạng, chưa phân tích sâu cách tư duy, cách lựa chọn cài đặt chương trình tối ưu Các chương trình mà số tài liệu đưa khó hiểu phức tạp không phù hợp lực học sinh Trường THPT Lê Viết Thuật Khi nghiên cứu tài liệu này, không học sinh mà giáo chưa có kinh nghiệm khó khăn? Từ lý trên, chọn nghiên cứu đề tài: ‘‘Sử dụng quy hoạch động đề nâng cao lực giải số vấn đề dãy ngôn ngữ lập trình C++’’ 1.2 Mục đích nghiên cứu Với mong muốn sử dụng quy hoạch động nâng cao lực giải số vấn đề dãy hiểu biết sâu sắc cách giải tập dạng này, dày công nghiên cứu, phân dạng tập dãy con, trăn trở để tìm nhiều cách làm khác nhau, đánh giá độ phức tạp, đo thời gian thực chương trình, để so sánh tìm chương trình tối ưu dễ hiểu chương trình đưa Từ nâng cao chất lượng bồi dưỡng học sinh giỏi môn Tin học 1.3 Đối tượng nghiên cứu Sáng kiến kinh nghiệm có đối tượng nghiên cứu - Một số toán dãy liên tiếp - Một số tốn dãy khơng liên tiếp Được nghiên cứu nhiều cách làm, xét nhiều phương diện (trong nhấn mạnh phương pháp quy hoạch động) như: độ phức tạp, kết output, thời gian thực chương trình 1.4 Phương pháp nghiên cứu Để trình bày sáng kiến kinh nghiệm này, chúng tơi sử dụng phối kết hợp nhiều phương pháp như: nghiên cứu tài liệu, thuyết trình, quan sát, điều tra bản, thực 1|42 nghiệm so sánh, phân tích kết thực nghiệm, … phù hợp với môn học thuộc lĩnh vực Tin học, Tốn học Trong phần chúng tơi xếp trình bày tập từ dễ đến khó, đồng thời thơng qua tập chúng tơi cố gắng phân tích nhằm đưa số định hướng lời giải toán để rèn luyện cho học sinh có kinh nghiệm, kỹ vận dụng số toán tương tự nhau, hướng tới phát triển lực cho học sinh II NỘI DUNG NGHIÊN CỨU 2.1 Cơ sở lý luận Nếu học sinh biết vận dụng phương pháp quy hoạch động vào việc giải tốn dãy nói riêng tập lập trình nói chung chất lượng học sinh giỏi nâng cao 2.2 Thực trạng trước nghiên cứu Các năm học trước trực tiếp giảng dạy cho đội tuyển học sinh giỏi cấp chuyên đề dãy con, nhiên việc dạy chuyên đề chủ yếu dựa kiến thức sách giáo khoa, tài liệu tham khảo chưa trọng nhiều đến việc nghiên cứu kiến thức Toán học để vận dụng giải tốn Chính nên em chủ yếu biết giải toán mà thầy, cô dạy mà không hiểu chất thật toán, gặp toán dạng có khác chút gặp phải nhiều khó khăn Kết thực trạng: Trên sở nhiều năm phân công dạy khối lớp 11, trường THPT Lê Viết Thuật, lưu lại kết học tập tiến học sinh năm học số lớp để có đối chiếu rút kinh nghiệm - Bảng số liệu kết đạt chưa thực đề tài: năm học 2019 - 2020 STT Lớp Sĩ số Giỏi Khá Trung bình Khơng đạt u cầu 11T1 35 3% 29% 57% 11% 11A1 40 13% 63% 25% 11A2 38 6% 50% 44% - Khi thực nghiệm qua đối tượng học sinh nêu trên, đa số em lúng túng trước tốn lập trình Phần lớn em cịn chưa hứng thú với tốn lập trình đặc biệt với ngơn ngữ pascal Vì q trình giảng dạy chúng tơi đúc rút số kinh nghiệm để giúp học sinh tiếp cận nội dung dễ dàng hơn, tạo nhiều đam mê cho học sinh Để rèn lực kỹ lập trình cho học sinh khá, giỏi mơn Tin học, có nhiều cách mà giáo viên áp dụng đối tượng học sinh khác Thông thường cho tốn tin học có dạng tương tự dạng mở rộng từ toán sách giáo khoa, tốn 2|42 mà em biết em xây dựng có hứng thú để xây dựng thuật toán cho toán đặt Vì giáo viên chọn tập từ mở rộng phát triển để rèn luyện kỹ lập trình cho học sinh Dĩ nhiên cách làm không với giáo viên cách chọn toán để học sinh vận dụng gây hưng thú cho học sinh lại điều đáng quan tâm Và chúng tơi hồn tồn thay ngơn ngữ lập trình pascal ngơn ngứ lập trình C++ ngơn ngữ lập trình Python để tạo thuận lợi cho em việc cài đặt chương trình 2.3 Các biện pháp sử dụng để giải vấn đề 2.3.1 Cơ sở lý thuyết Khi cần đến quy hoạch động? Đó câu hỏi khó trả lời Khơng có cơng thức cho tốn Tuy nhiên, có số tính chất tốn mà bạn nghĩ đến quy hoạch động Dưới hai tính chất bật số chúng: Bài tốn có tốn gối Bài tốn có cấu trúc tối ưu Thường tốn có đủ hai tính chất này, dùng quy hoạch động Một câu hỏi thú vị không dùng quy hoạch động có khơng? Câu trả lời có, bạn thi code kết khơng cao a Dãy liên tiếp Dãy liên tiếp dãy gồm phần tử liên tiếp thuộc dãy cho trước Ví dụ: Cho dãy A gồm số nguyên {5,3,4,-4} Dãy số {4}; {3,4}; {5,3,4}; {5,3,4,4}; … gọi dãy liên tiếp dãy A b Dãy khơng liên tiếp Dãy chọn khơng liên tiếp dãy thu sau xóa số phần tử (có thể khơng xóa phần tử nào) dãy cho trước giữ nguyên thứ tự phần tử cịn lại dãy Ví dụ: Cho dãy B gồm số nguyên {3,5,-8,7,24,4} Dãy số {3}; {3,5}; {-8,7}; {7,24,4}; {3,1,2,-6,9}; … gọi dãy chọn khơng liên tiếp dãy A c Mơ hình dãy Cho dãy a1,a2, an Hãy tìm dãy tăng có nhiều phần tử dãy Đặc trưng: i) Các phần tử dãy kết xuất lần Vì phương pháp làm ta dùng vòng For duyệt qua phần tử dãy 3|42 ii) Thứ tự phần tử chọn phải giữ nguyên so với dãy ban đầu Đặc trưng số toán khác tùy vào yêu cầu cụ thể 2.3.2 Độ phức tạp thuật tốn Giả sử ta có hai thuật tốn P1 P2 với thời gian thực tương ứng T1(n) = 100n2 (với tỷ suất tăng n2) T2(n) = 5n3 (với tỷ suất tăng n3) Khi n > 20 T1 < T2 Sở dĩ tỷ suất tăng T1 nhỏ tỷ suất tăng T2 Như cách hợp lý ta xét tỷ suất tăng hàm thời gian thực chương trình thay xét thân thời gian thực Cho hàm T(n), T(n) gọi có độ phức tạp f(n) tồn C, N0 cho T(n) ≤ Cf(n) với n ≥ N0 (tức T(n) có tỷ suất tăng f(n)) kí hiệu T(n) O(f(n)) (đọc “ô f(n)”) Các hàm thể độ phức tạp có dạng thường gặp sau: log2n, n, nlog2n, n , n , 2n, n!, nn Trong cách viết, ta thường dùng logn thay cho log2n cho gọn Khi ta nói đến độ phức tạp thuật tốn ta nói đến hiệu thời gian thực chương trình nên xem việc xác định thời gian thực chương trình xác định độ phức tạp thuật toán 2.3.3 Phương pháp lựa chọn cài đặt chương trình tối ưu giải số dạng tập dãy Đối với dạng tập dãy đưa toán bản, từ tốn bản, trình bày từ cách giải (cả cách làm học sinh cách làm giáo viên định hướng cho học sinh làm) Với phương châm “ mưa dầm thấm lâu” không hướng dẫn học sinh cách làm tối ưu mà phát vấn dạng tập mà chúng tơi u cầu học sinh làm theo trình tự sau: Bước 1: Xác định toán Bước 2: Suy nghĩ tìm thuật tốn, viết chương trình, tính độ phức tạp (Có thể nhiều cách) Bước 3: Trao đổi cách làm với bạn để tìm hay dở Bước 4: Sử dụng phần mềm Themis-chấm tự động để chấm cách làm (với 10 test nhiều mà giáo viên xây dựng sẵn, test cấu hình điểm, thời gian chạy không giây) Bước 5: Nhận xét tối ưu thuật toán Bước 6: Giáo viên định hướng cách làm tối ưu (nếu có) Bước 7: Sử dụng phần mềm Themis để chấm tất cách viết chương trình Bước 8: Dựa vào kết quả, lựa chọn chương trình có độ phức tạp nhỏ nhất, thời gian thực test nhỏ chương trình ngắn gọn dễ hiểu Bước 9: Lập trình giải tập tương tương với cách lựa chọn 4|42 2.4 Các toán dãy liên tiếp Các dãy không chung phần tử dãy ban đầu nghĩa phần tử dãy ban đầu thuộc dãy thỏa mãn khơng thuộc dãy thỏa mãn khác Ví dụ: Dãy A gồm phần tử {2, 5, -9, -6, 0, -7, -5} Dãy {-9, -6}; {-7, -5} dãy liên tiếp không chung phần tử dãy A Lưu ý: Dạng tập áp dụng cho trường hợp phần tử đầu dãy trùng với phần tử cuối dãy Bài tập 1: (Bài toán bản) Cho dãy A gồm N số nguyên (hoặc số thực) {a1, a2,…, aN} Dãy ai, ai+1,…, aj (1≤i≤j≤N) dãy tạo từ phần tử liên tiếp dãy A phần tử i kết thúc phần tử j Hãy tìm độ dài dãy con, số lượng dãy con, liệt kê số dãy con, liệt kê giá trị phần tử dãy thõa mãn điều kiện (Độ dài dãy số lượng phần tử dãy con) Để giải dạng tập ta sử dụng nhiều thuật toán như: thuật toán vét cạn dãy duyệt qua phần tử dãy sử dụng phương pháp quy hoạch động Đối với dạng tập định hướng cho học sinh lựa chọn thuật toán duyệt qua phần tử dãy quy hoạch động Mơ hình thuật tốn: Cách Sử dụng phương pháp duyệt qua phần tử dãy: - Duyệt qua tất phần tử dãy nếu: + Thỏa mãn điều kiện, tăng độ dài thêm 1, ngược lại: Nếu dãy xét cần lưu thì: lưu lại độ dài, số đầu dãy, xác định lại độ dài, số đầu dãy Nếu dãy xét khơng cần lưu thì: lưu lại độ dài, số đầu dãy Cách Sử dụng phương pháp quy hoạch động - Gọi L[i] độ dài dãy thỏa mãn điều kiện có phần tử cuối a[i], i=1 n - Gán giá trị độ dài dãy trường hợp đơn giản: L[0]=0; L[1]=1 - Tính L[i] nhờ giá trị tốn tính từ trước L[i-1], L[i-2], - Kết toán tổng hợp kết từ toán L[i] (i=1,2, ,n) Từ ta có tập 1.2 sau: Bài tập 1.2: Cho dãy A gồm N số nguyên {a1, a2,…, aN} Dãy ai, ai+1,…, aj(1≤i≤j≤N) dãy tạo từ phần tử liên tiếp dãy A phần tử i kết thúc phần tử j 5|42 Yêu cầu: Hãy tìm độ dài liệt kê giá trị phần tử dãy dài tạo thành cấp số cộng có cơng sai d Dữ liệu vào: File văn dayconcsc.inp gồm: - Dòng đầu ghi giá trị N, d (2≤N≤108; 0≤d≤500 ) - Dòng sau gồm N số nguyên{a1, a2,…, aN} (-106≤ai≤106) số cách dấu cách Dữ liệu ra: File văn dayconcsc.out gồm - Dòng đầu ghi độ dài dãy dài - Dòng ghi giá trị phần tử dãy (Chú ý: Nếu khơng có dãy thỏa mãn ghi 0) Ví dụ: Dayconcsc.inp Dayconcsc.out 94 32 10 14 6 10 10 14 10 Cách 1: Khi gặp toán thông thường học sinh sử dụng phương pháp vét cạn dãy sau: Mơ hình thuật toán: for (int i=1; i

Ngày đăng: 08/12/2023, 20:34

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

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

Tài liệu liên quan