1. Trang chủ
  2. » Luận Văn - Báo Cáo

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++

45 2 0

Đ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

Thông tin cơ bản

Tiêu đề 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++
Tác giả Hoàng Xuân Thắng, Nguyễn Đình Lợi
Trường học Trường THPT Lê Viết Thuật
Chuyên ngành Tin học
Thể loại đề cương sáng kiến kinh nghiệm
Năm xuất bản 2021-2022
Thành phố Nghệ An
Định dạng
Số trang 45
Dung lượng 142,27 KB

Nội dung

SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN =====  ===== ĐỀ CƯƠNG SÁNG KIẾN KINH NGHIỆM 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++ THUỘC MƠN: TIN HỌC THÁNG 3/ 2022 SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN =====  ===== ĐỀ CƯƠNG SÁNG KIẾN KINH NGHIỆM 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++ THUỘC MƠN: TIN HỌC Nhóm tác giả : Hồng Xuân Thắng - Trường THPT Lê Viết Thuật Nguyễn Đình Lợi Tổ mơn: Tốn - Tin Năm thực hiện: 2021-2022 - Trường THPT Lê Viết Thuật I PHẦN MỞ ĐẦU 1.1 Lý chọn đề tài Trong quá trình giảng dạy phát triển lực cho học sinh khá giỏi thường gặp rất nhiều bài toán về dãy Đây là dạng bài tập khó thường xuất các đề thi học sinh giỏi môn Tin học Rất nhiều học sinh gặp dạng bài tập dạng này thì 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 hoặc chương trình cho kết output với các input có dữ liệu nhỏ với những input có dữ liệu lớn thì chương trình chạy quá thời gian quy định là 1giây/1test (mặc dù kết output đúng) Trên thực tế đã có số tài liệu đề cập đến các bài tập về dãy con, các tài liệu này mới đưa thuật toán và chương trình giải số bài tập cụ thể làm ví dụ minh họa cho kỹ thuật lập trình nào 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 và cài đặt chương trình tối ưu Các chương trình mà số tài liệu đưa rất khó hiểu và 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 các tài liệu này, không học sinh mà giáo chưa có kinh nghiệm rất khó khăn? Từ những 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 đề về dãy và hiểu biết sâu sắc cách giải các bài tập dạng này, đã dày công nghiên cứu, phân dạng các bài 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 nhất và dễ hiểu nhất các 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 là - Một số bài toán về dãy liên tiếp - Một số bài toán về 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, đã 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 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, Toán học Trong từng phần xếp và trình bày các bài tập từ dễ đến khó, đồng thời thông qua từng bài tập cố gắng phân tích nhằm đưa số định hướng lời giải bài toán để rèn luyện cho học sinh có kinh nghiệm, kỹ vận dụng số bài 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 các bài toán về dãy nói riêng và các bài tập lập trình nói chung thì 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ác cấp về chuyên đề dãy con, nhiên việc dạy chuyên đề này chủ yếu dựa những 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 các bài toán Chính vì vậy nên các em chủ yếu biết giải các bài toán mà thầy, cô đã dạy mà không hiểu chất thật bài toán, gặp các bài toán dạng có khác chút thì gặp phải rất 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 và tiến học sinh năm học số lớp để có đối chiếu và 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 yê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 các đối tượng học sinh đã nêu trên, đa số các em lúng túng trước những bài toán lập trình Phần lớn các em chưa hứng thú với các bài toán lập trình đặc biệt là với ngôn ngữ pascal Vì vậy quá trình giảng dạy đúc rút số kinh nghiệm để giúp các học sinh tiếp cận nội dung này dễ dàng hơn, tạo nhiều đam mê cho học sinh Để rèn lực và kỹ lập trình cho học sinh khá, giỏi mơn Tin học, có rất nhiều cách mà giáo viên áp dụng đối với các đối tượng học sinh khác Thông thường cho bài toán tin học có dạng tương tự hoặc dạng mở rộng từ bài toán nào sách giáo khoa, hoặc bài toán nào mà các em biết thì các em xây dựng và có hứng thú để xây dựng thuật toán cho bài toán đặt Vì vậy giáo viên chọn các bài tập từ mở rộng và phát triển để rèn luyện kỹ lập trình cho học sinh Dĩ nhiên cách làm này không mới với giáo viên cách chọn các bài toán nào để học sinh vận dụng và gây hưng thú cho học sinh lại là điều đáng quan tâm Và đã hoàn toàn thay ngôn ngữ lập trình pascal ngôn ngứ lập trình C++ và ngôn ngữ lập trình Python để tạo thuận lợi cho các 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 nào thì cần đến quy hoạch động? Đó là câu hỏi rất khó trả lời Khơng có cơng thức nào cho các bài toán vậy Tuy nhiên, có số tính chất bài toán mà bạn nghĩ đến quy hoạch động Dưới là hai tính chất bật nhất số chúng: Bài toán có các bài toán gối Bài toán có cấu trúc tối ưu Thường thì bài toán có đủ hai tính chất này, dùng quy hoạch động Một câu hỏi rất thú vị là khơng dùng quy hoạch động có khơng? Câu trả lời là có, bạn thi code thì kết không cao a Dãy liên tiếp Dãy liên tiếp là dãy gồm các 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 là các 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 là 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 và giữ nguyên thứ tự các 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 là các 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ử nhất dãy Đặc trưng: i) Các phần tử dãy kết xuất lần Vì vậy phương pháp làm là ta dùng vòng For duyệt qua các phần tử dãy ii) Thứ tự các phần tử chọn phải giữ nguyên so với dãy ban đầu Đặc trưng này mất số bài toán khác tùy vào yêu cầu cụ thể 2.3.2 Độ phức tạp của thuật toán Giả sử ta có hai thuật toán P1 và P2 với thời gian thực tương ứng là T1(n) = 100n2 (với tỷ suất tăng là n2) và T2(n) = 5n3 (với tỷ suất tăng là n3) Khi n > 20 thì T1 < T2 Sở dĩ vậy là tỷ suất tăng T nhỏ tỷ suất tăng T2 Như vậy cách hợp lý là ta xét tỷ suất tăng hàm thời gian thực chương trình thay vì xét thân thời gian thực Cho hàm T(n), T(n) gọi là có độ phức tạp f(n) tồn các C, N0 cho T(n) ≤ Cf(n) với mọi n ≥ N0 (tức là T(n) có tỷ suất tăng là f(n)) và kí hiệu T(n) là O(f(n)) (đọc là “ô f(n)”) Các hàm thể độ phức tạp có cá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 toán là 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 là 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 bài tập về dãy đưa bài toán bản, từ bài toán bản, trình bày từ hoặc cách giải (cả cách làm học sinh và 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 bài tập mới mà yêu cầu học sinh làm theo các trình tự sau: Bước 1: Xác định bài toán Bước 2: Suy nghĩ tìm thuật toá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 mình với bạn để tìm cái hay cái dở Bước 4: Sử dụng phần mềm Themis-chấm tự động để chấm cách làm mình (với 10 test hoặc nhiều mà giáo viên đã xây dựng sẵn, test cấu hình là điểm, thời gian chạy không quá 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ác 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ỏ nhất và chương trình ngắn gọn dễ hiểu nhất Bước 9: Lập trình giải các bài tập tương tương với cách đã lựa chọn 2.4 Các toán dãy liên tiếp Các dãy không chung bất kỳ phần tử nào dãy ban đầu nghĩa là những phần tử dãy ban đầu đã thuộc dãy thỏa mãn này thì không thuộc cá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} là các dãy liên tiếp không chung bất kỳ phần tử nào dãy A Lưu ý: Dạng bài tập này áp dụng cho trường hợp phần tử đầu dãy nà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) {a 1, a2,…, aN} Dãy ai, ai+1,…, aj (1≤i≤j≤N) là dãy tạo từ các phần tử liên tiếp dãy A bắt đầu từ phần tử i và 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ố các dãy con, liệt kê giá trị các phần tử dãy thõa mãn điều kiện nào (Độ dài dãy là số lượng phần tử dãy con) Để giải dạng bài tập này ta sử dụng nhiều thuật toán như: thuật toán vét cạn các dãy hoặc duyệt qua các phần tử dãy hoặc sử dụng phương pháp quy hoạch động Đối với dạng bài tập này định hướng cho học sinh lựa chọn thuật toán duyệt qua các phần tử dãy hoặc quy hoạch động Mơ hình thuật tốn: Cách Sử dụng phương pháp duyệt qua các phần tử dãy: - Duyệt qua tất các 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 mới Nếu dãy xét không cần lưu thì: lưu lại độ dài, số đầu dãy mới Cách Sử dụng phương pháp quy hoạch động - Gọi L[i] là độ dài dãy thỏa mãn điều kiện có phần tử cuối là 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ờ các giá trị bài toán đã tính từ trước L[i-1], L[i-2], - Kết bài toán là tổng hợp kết từ các bài toán L[i] (i=1,2, ,n) Từ ta có bài 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) là dãy tạo từ các phần tử liên tiếp dãy A bắt đầu từ phần tử i và kết thúc phần tử j Yêu cầu: Hãy tìm độ dài và liệt kê giá trị phần tử dãy dài nhất 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 nhất - Dòng ghi giá trị các 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 bài toán này thông thường học sinh sử dụng phương pháp vét cạn các dãy sau: Mô hình thuật toán: for (int i=1; i

Ngày đăng: 02/07/2022, 19:35

HÌNH ẢNH LIÊN QUAN

- Bảng số liệu kết quả đạt được khi chưa thực hiện đề tài: năm học 2019 - 2020 STT LớpSĩ sốGiỏiKháTrung bình Không đạt yêu cầu - 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++
Bảng s ố liệu kết quả đạt được khi chưa thực hiện đề tài: năm học 2019 - 2020 STT LớpSĩ sốGiỏiKháTrung bình Không đạt yêu cầu (Trang 4)
So sánh kết quả từ 2 bảng trên và kết quả chấm điểm bài toán 1.6 bằng phần mềm Themis của 2 cách trên như sau (mỗi test đúng và thời gian chạy không quá 1 - 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++
o sánh kết quả từ 2 bảng trên và kết quả chấm điểm bài toán 1.6 bằng phần mềm Themis của 2 cách trên như sau (mỗi test đúng và thời gian chạy không quá 1 (Trang 22)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w