Skkn xây dựng thuật toán tối ưu cho một số bài toán thường gặp trong tin học 11 sử dụng ngôn ngữ lập trình c++

22 3 0
Skkn xây dựng thuật toán tối ưu cho một số bài toán thường gặp trong tin học 11 sử dụ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 SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT YÊN ĐỊNH 2 SÁNG KIẾN KINH NGHIỆM XÂY DỰNG THUẬT TOÁN TỐI ƯU CHO MỘT SỐ BÀI TOÁN THƯỜNG GẶP TRONG TIN HỌC 11 SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++ Người th[.]

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT YÊN ĐỊNH SÁNG KIẾN KINH NGHIỆM XÂY DỰNG THUẬT TOÁN TỐI ƯU CHO MỘT SỐ BÀI TOÁN THƯỜNG GẶP TRONG TIN HỌC 11 SỬ DỤNG NGƠN NGỮ LẬP TRÌNH C++ Người thực hiện: Triệu Thị Mai Chức vụ: Giáo viên SKKN thuộc lĩnh mực (mơn): Tin THANH HỐ NĂM 2022 skkn MỤC LỤC PHẦN MỞ ĐẦU .3 1.1 LÝ DO CHỌN ĐỀ TÀI 1.2 MỤC ĐÍCH NGHIÊN CỨU 1.3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU .4 1.4 PHƯƠNG PHÁP NGHIÊN CỨU PHẦN NỘI DUNG 2.1 CƠ SỞ LÝ LUẬN 2.2 THỰC TRẠNG VẤN ĐỀ 2.3 HƯỚNG DẪN HỌC SINH XÂY DỰNG THUẬT TOÁN TỐI ƯU CHO MỘT SỐ BÀI TOÁN CƠ BẢN 2.3.1 Định nghĩa thuật toán tối ưu 2.3.2 Bài toán nhặt sỏi: .9 2.3.3 Bài tốn số hồn hảo .12 2.3.4.Bài toán số nguyên tố .15 2.3.5.Bài toán cổ: [1] 17 2.4 HIỆU QUẢ ĐẠT ĐƯỢC 19 2.4.1 Kết sau áp dụng vào thực tế 19 2.4.2 Điều kiện để áp dụng sáng kiến .20 PHẦN KẾT LUẬN, KIẾN NGHỊ 20 3.1 KẾT LUẬN 20 3.2 KIẾN NGHỊ .20 TÀI LIỆU THAM KHẢO 22 skkn PHẦN MỞ ĐẦU 1.1.LÝ DO CHỌN ĐỀ TÀI Hiện công nghệ thơng tin phát triển, ứng dụng tất lĩnh vực từ kinh tế, trị, xã hội Nhờ có khối óc người trợ giúp đắc lực máy tính điện tử mà tất tốn tưởng chừng khó nhất, phức tạp giải cách nhanh nhất, xác nhất, lưu trữ lâu Để đẩy mạnh phát triển đó, mơn Tin học đưa vào giảng dạy nhà trường lâu Tuy nhiên, môn tin học Tin học bậc Trung học phổ thông, đặc biệt chương trình Tin học khối 11 khó cho học sinh hiểu ngơn ngữ lập trình, vận dụng ngơn ngữ lập trình với tư thân để viết chương trình giải tốn Có thể nói, học sinh cần phải làm quen với lối suy nghĩ logic, cần phải có tư tốn học cần phải hiểu hoạt động máy tính, mà lại cách học hoàn toàn khác với mơn học cịn lại Bộ mơn Tin học học sinh trường Trung học phổ thơng n Định quan tâm, u thích khơng thuộc tổ hợp mơn thi Đại học Nhất Tin học lớp 11, nội dung kiến thức cần nhiều tư sâu khả sáng tạo Trong đó, hướng dẫn học sinh giải toán định nghĩa thơng thường chưa tối ưu chạy chương trình em thấy chẳng có thú vị để thơi thúc hứng thú tìm tịi sáng tạo em Nhưng niềm đam mê, tình yêu nghề buộc thân không ngừng học hỏi trau dồi kiến thức để nghiên cứu vấn đề nảy sinh trình giảng dạy, hướng dẫn học sinh tìm cách giải tối ưu cho tốn, tìm phương pháp khích lệ học sinh hứng thú học tập với môn Tin học Mục tiêu đặt thu hút học sinh khối 11 dành nhiều thời gian tìm hiểu dạng tập xây dựng thuật toán tối ưu cho tốn đặt Tơi xâu chuỗi vài dạng tập liên quan đến nội dung để hướng dẫn cho học sinh tìm hiểu giải như: Bài tập sử dụng vòng lặp, tập kiểu mảng, tập với dãy số, tập kiểu xâu…Khi hướng dẫn em học sinh tìm xây dựng thuật tốn tối ưu cho tốn thường gặp, tơi nhận thấý em có hứng thú đặc biệt Các em dành nhiều thời gian để trăn trở cách giải cho tốn mà đưa Khi tốn giải xong, em lại có nhu cầu giải tốn khác Điều động lực để tơi u nghề hơn, u học sinh Với sáng kiến kinh nghiệm “ XÂY DỰNG THUẬT TOÁN TỐI ƯU CHO MỘT SỐ BÀI TOÁN THƯỜNG GẶP TRONG TIN HỌC 11 SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++ ” tơi muốn gửi tới bạn đồng nghiệp chút kinh nghiệm thân việc hệ thống lại tập cho học sinh thực u thích lập trình skkn 1.2 MỤC ĐÍCH NGHIÊN CỨU - Giới thiệu số tốn thường gặp, đặc biệt phần có cung cấp thêm số hàm, thủ tục chưa giới thiệu tài liệu sách giáo khoa tin học 11 dịch C++ sửa, đồng thời định hướng cách xây dựng thuật toán tối ưu để học sinh dễ dàng vận dụng - Hệ thống toán dạng số dạng tập thường gặp giúp cho giáo viên học sinh phần nhận dạng giải số tập liên quan - Nâng cao chất lượng dạy học môn Tin học trường phổ thông, đặc biệt dạy học lập trình Tin học lớp 11 - Góp phần đổi phương pháp dạy học trường phổ thơng nói chung mơn Tin học nói riêng - Góp phần khơi dậy lịng đam mê, u thích hứng thú học mơn Tin học học sinh Đặc biệt định hướng nghề nghiệp cho đối tượng học sinh có lịng đam mê hứng thú Tin học thực Giúp em nhìn thấy vận dụng kiến thức học môn học vào tư giải tốn thực tế, gần gũi, thiết thực mơi trường học tập thân 1.3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU - Một số toán Tin học 11 - Lập trình tập thực nghiệm, sử dụng ngơn ngữ lập trình C++ để tiến hành - Kỹ thực hành giải tập, hệ thống kiến thức với tập thuật toán tối ưu học sinh - Phạm vi thực nghiệm: Học sinh lớp 11C1, 11C2 trường Trung học phổ thông Yên Định năm học 2021-2022 1.4 PHƯƠNG PHÁP NGHIÊN CỨU - Dựa toán thực tiễn sống giải ngôn ngữ lập trình C++ Nhất tốn vận dụng lập trình với thuật tốn tối ưu - Dựa sở lý thuyết Ngơn ngữ lập trình C++ Cách khai báo truy xuất đến kiểu liệu chuẩn hoạt động bước máy tính thực chương trình - Thu thập liệu thông qua việc hỏi học sinh mức độ biết, hiểu vận dụng ngơn ngữ lập trình C++ vào giải tốn mơn học khác - Phân tích đánh giá mức độ học sinh hứng thú với môn học - Tổng kết rút kinh nghiệm skkn PHẦN NỘI DUNG 2.1 CƠ SỞ LÝ LUẬN Tạo hứng thú, khơi gợi niềm đam mê môn học cho người học vấn đề quan trọng hoạt động dạy - học Bởi vì, biết, dạy - học hoạt động phức tạp, chất lượng, hiệu phụ thuộc vào người học Và điều lại phụ thuộc vào nhiều yếu tố, như: lực nhận thức, động học tập, tâm ; cịn phụ thuộc vào: môi trường học tập, người tổ chức trình dạy học, hứng thú học tập ‘Các nhà nghiên cứu tâm lý học cho rằng, hứng thú thái độ đặc biệt cá nhân đối tượng đó, có ý nghĩa sống có khả mang lại khối cảm cá nhân trình hoạt động Sự hứng thú biểu trước hết tập trung ý cao độ, say mê chủ thể hoạt động Sự hứng thú gắn liền với tình cảm người Trong cơng việc gì, có hứng thú làm việc, người có cảm giác dễ chịu với hoạt động, làm nẩy sinh khát vọng hành động cách có sáng tạo Ngược lại, khơng có hứng thú, dù hoạt động không đem lại hiệu cao Đối với hoạt động nhận thức, sáng tạo, hoạt động học tập, khơng có hứng thú, kết khơng hết, chí xuất cảm xúc tiêu cực.’[3] Việc học có tính chất đối phó, miễn cưỡng, người học may tiếp thu lượng kiến thức ít, khơng sâu, khơng chất Vì dễ quên Khi có hứng thú, đam mê nghiên cứu, học tập thì việc lĩnh hội tri thức trở nên dễ dàng hơn; ngược lại, nắm bắt vấn đề, tức hiểu người học lại có thêm hứng thú đam mê Trên thực tế, người khơng thích, khơng hứng thú, khơng đam mê học mơn học thường người khơng học tốt mơn học Chính vậy, việc tạo hứng thú, khơi gợi niềm đam mê cho người học xem yêu cầu bắt buộc làm công tác giảng dạy, môn khoa học 2.2 THỰC TRẠNG VẤN ĐỀ Đặc điểm môn Môn Tin học đến không cịn mơn học mẻ học sinh phổ thơng, học sinh làm quen cấp học Đây thuận lợi cho học sinh, học sinh học từ đầu để làm quen với môn học Trong mục 2.1: Đoạn “các nhà nghiên cứu… tiêu cực” trích dẫn TLTK số skkn Sự liên quan môn Tin học với môn học khác nhiều, học sinh phải vất vả để xem lại, tìm kiếm lại kiến thức mơn học khác Đặc biệt nội dung lập trình mơn học Tin học lại có liên quan nhiều đến kiến thức môn khoa học tự nhiên, liên quan nhiều đến tư Toán học Nếu học sinh yếu tư Tốn học khó khăn lập trình Nếu học sinh có tư Tốn học không hứng thú với môn Tin học, học cho biết, học để đối phó, thường em không nghiên cứu kĩ học dẫn đến gặp phải số khó khăn lập trình Nếu học sinh yếu tư không hứng thú với mơn học khó cho thầy Muốn giải việc giáo viên cần phải dẫn dắt học sinh tiếp cận với môn học cách tự nhiên, hào hứng thông qua dạng tập thực tiễn liên quan đến vấn đề mà em yêu thích Giáo viên Nhiều giáo viên cịn hạn chế trình độ, khả cập nhật thông tin Không vậy, số giáo viên chưa hiểu rõ thuật toán để diễn đạt việc dạy lập trình Ngơn ngữ lập trình C++ đời sớm dạy học nhà trường vài năm gần đây, nhiều giáo viên với tư tưởng ngại thay đổi, ngại tìm hiểu dẫn đến không hiểu rõ chế hoạt động câu lệnh Đơi giáo viên cịn thờ ơ, cảm thấy chán nản học sinh khơng có hứng thú, đam mê học tập Chính điều làm cho giáo viên không trọng việc đổi phương pháp Dẫn đến học sinh khả tìm hiểu tư giải tốn, hứng thú việc học lập trình Chưa kể, mơn Tin học khơng thuộc nhóm mơn tổ hợp thi tốt nghiệp Trung học phổ thơng, nên ngồi bồi dưỡng cho học sinh tham gia đội tuyển học sinh giỏi khơng trọng bồi dưỡng cho đối tượng học sinh khác Giáo viên cần phải biết nhóm đối tượng học sinh nguồn nhân lực dồi cho ngành Cơng nghệ thơng tin, nhóm đối tượng cần giáo viên truyền lửa, truyền đam mê nhiều Học sinh Khi bước vào học phổ thơng học sinh bắt đầu định hình học theo khối để thi đại học Thời gian học chủ yếu dành cho mơn học Tốn, Lý, Hóa, Văn, Anh Tin học mơn xem môn hỗ trợ nên thời gian để học tiết học lớp Đối với Tin học 10, 12 tính ứng dụng mơn học thực tế em dễ dàng nhìn thấy thực ln Cịn với Tin học 11 thuộc lĩnh vực lập trình, khó có sản phẩm để em nhìn thấy Hơn việc tư thuật tốn nội dung khó em Điều dẫn đến nhiều học sinh không thích học mơn học Từ thực tế muốn minh chứng thật rõ nét cho em thấy giải tốn máy tính khơng khó, có hứng thú, tích cực chủ động em mà Đặc biệt học sinh nhận việc học Tin học lập trình khơng q khó u thích mơn học skkn Xây dựng thuật tốn tối ưu để lập trình tốn Qua việc giảng dạy học sinh học lập trình lớp 11, tơi nhận thấy học sinh cịn nhiều bỡ ngỡ tiếp cận với lập trình xây dựng thuật tốn tối ưu cho tốn Thơng thường em thường dựa vào định nghĩa nhận biết toán để xây dựng nên thuật toán giải tốn Với số tốn em giải tối ưu hơn, nhiên em gặp khó khăn: + Sử dụng biến điều khiển + Tác động đến biến điều khiển vòng lặp + Sử dụng kiểu liệu khác kiểu liệu chuẩn + Sử dụng Hàm Thủ tục để giải toán phức tạp + Thơng báo kết vịng lặp dẫn đến tình trạng lặp lại việc thơng báo kết thực chương trình 2.3 HƯỚNG DẪN HỌC SINH XÂY DỰNG THUẬT TOÁN TỐI ƯU CHO MỘT SỐ BÀI TỐN CƠ BẢN 2.3.1 Định nghĩa thuật tốn tối ưu Để xử lý toán bản, C++ đưa định nghĩa tương ứng cho tốn Tuy nhiên, để giải tốn theo định nghĩa thuật tốn thường khơng tối ưu Vậy có cách để khắc phục điều đó, nhiệm vụ giáo viên phải giới thiệu thêm cho học sinh hiểu độ phức tạp thuật tốn bigO Để học sinh lập trình tốn với thuật tốn tối ưu giáo viên hướng dẫn em tìm hiểu thêm nội dung liên quan như:  Độ phức tạp thuật tốn [3] Thơng thường giải tốn, đưa giải thuật khác phải chọn giải thuật tốt Thơng thường ta vào tiêu chuẩn sau:  Giải thuật đắn  Giải thuật đơn giản  Giải thuật thực nhanh Để kiểm tra tính đắn giải thuật, ta thường phải thử với liệu so sánh kết thu với kết biết Tuy nhiên điều khơng chắn giải thuật với liệu lại khơng với liệu khác Tính đắn giải thuật cần chứng minh toán, tạm thời không đề cập Trong mục 2.3.1: Độ phức tạp thuật tốn trích dẫn TLTK số skkn Đối với chương trình dùng vài lần yêu cầu giải thuật đơn giản ưu tiên cần giải thuật dễ hiểu, dễ cài đặt, không đề cao vấn đề thời gian chạy chạy vài lần Khi chương trình sử dụng nhiều lần, yêu cầu tiết kiệm thời gian đặc biệt ưu tiên Tuy nhiên, thời gian thực chương trình lại phụ thuộc vào nhiều yếu tố như: cấu hình máy tính, ngơn ngữ sử dụng, trình biên dịch, liệu đầu vào, … Do ta so sánh giải thuật implement, chưa chương trình chạy nhanh có giải thuật tốt “Độ phức tạp thuật toán” sinh để giải vấn đề Cách để tính độ phức tạp thuật tốn Độ phức tạp thuật toán hàm phụ thuộc vào độ lớn liệu đầu vào Tìm xem đối tượng có danh sách N phần tử hay không?, xếp tăng dần dãy số gồm N số, … N độ lớn liệu đầu vào Để ước lượng độ phức tạp thuật toán, người ta thường dùng khái niệm bậc O-lớn bậc Theta (Θ) Ở giáo viên xét giới thiệu cho học sinh Big O Ta dùng đại lượng tổng quát tài nguyên cần dùng R(n) Đó số lượng phép tính (có thể tính số lần truy nhập nhớ, ghi vào nhớ); thời gian thực chương trình (độ phức tạp thời gian) dung lượng nhớ cần phải cấp để chạy chương trình (độ phức tạp không gian) Định nghĩa: Giả sử f(n) g(n) hàm thực không âm đối số nguyên không âm n Ta nói “g(n) O f(n)” viết là: g(n) = O(f(n)) tồn số dương C n0 cho g(n) = n0 Cách tính: Độ phức tạp tính tốn giải thuật: O(f(n)) • Việc xác định độ phức tạp tính tốn giải thuật thực tế tính số quy tắc đơn giản sau: – Quy tắc bỏ số: T(n) = O(c.f(n)) = O(f(n)) với c số dương – Quy tắc lấy max: T(n) = O(f(n)+ g(n)) = O(max(f(n), g(n))) skkn – Quy tắc cộng: T1(n) = O(f(n))                     T2(n) = O(g(n)) T1(n) + T2(n) = O(f(n) + g(n)) – Quy tắc nhân: Đoạn chương trình có thời gian thực T(n)=O(f(n)) Nếu thực k(n) lần đoạn chương trình với k(n) = O(g(n)) độ phức tạp O(g(n).f(n)) Ví dụ: Ví dụ 1: s=n*(n-1) /2; Trong ví dụ trên, độ phức tạp thuật tốn O(1) Ví dụ 2: s = 0;                        // O(1) for (int i=0; i

Ngày đăng: 02/02/2023, 09:00

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

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

Tài liệu liên quan