(SKKN 2022) áp dụng kĩ thuật tham lam để giải một số bài toán trong tin học góp phần nâng cao tư duy, kĩ năng lập trình và chất lượng bồi dưỡng học sinh giỏi
Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
72,56 KB
Nội dung
MỤC LỤC Trang PHẦN I MỞ ĐẦU……………………………………………… ……… 1 Lí chọn đề tài Mục đích nghiên cứu Nhiệm vụ đề tài Đối tượng nghiên cứu Phạm vi nghiên cứu………………………… …………… Phương pháp nghiên cứu………………………………………… 2 PHẦN II NỘI DUNG……………………………………………… … Cơ sở lí luận Thực trạng ……………………………………………… … Biện pháp 3.1 Cơ sở lí thuyết…………………………… 3 3 3.2 Bài tập vận dụng 4 Hiệu đề tài BÀI TẬP THAM KHẢO.………………… …………….……… PHẦN III KẾT LUẬN…………………………………….……… 17 17 20 3.1 Kết luận 20 3.2 Kiến nghị Tài liệu tham khảo Danh mục đề tài SKKN đạt giải cấp tỉnh 20 22 23 PHẦN I MỞ ĐẦU Lí chọn đề tài Chúng ta kỷ nguyên kỹ thuật số với cách mạng công nghiệp 4.0 Ứng dụng công nghệ thông tin hữu nơi, lúc phương diện xã hội Trong bối cảnh đó, việc dạy học lập trình cho học sinh việc tất yếu, nhằm tạo tiền đề kiến thức công nghệ thông tin cho hệ trẻ, chủ nhân tương lai xã hội Tuy nhiên, đặc thù môn học, môn học mới, em tiếp cận Năng lực tư thuật tốn khó, nên việc triển khai đồng địa phương, vùng miền khó khăn từ cấp độ đại trà chưa nói đến mũi nhọn Công tác bồi dưỡng học sinh giỏi công tác mũi nhọn việc nâng cao chất lượng giáo dục, tạo nguồn lực, bồi dưỡng nhân tài cho nhà trường nói riêng xã hội nói chung Đây cơng việc khó khăn lâu dài, địi hỏi nhiều cơng sức thầy trò Là giáo viên đứng đội tuyển nhiều năm, tơi dành nhiều thời gian để tìm kiếm, sưu tầm, phân loại số tập lập trình nhằm phân loại theo chuyên đề chọn tập phù hợp để đưa vào dạy học sinh Từ lý tơi xin trình bày sáng kiến kinh nghiệm “Áp dụng kĩ thuật tham lam để giải số tốn Tin học góp phần nâng cao tư duy, kĩ lập trình chất lượng bồi dưỡng học sinh giỏi ”, để học sinh dễ dàng làm quen, tiếp thu hình thành kĩ việc tiếp cận số toán thực tế lập trình, nhằm giúp em phát huy tính tích cực, yêu thích nâng cao tư duy, kỹ lập trình Mục đích nghiên cứu Mục đích đề tài cung cấp phương pháp/ kỹ thuật việc giải số tốn thực tế mang tính chất lựa chọn tối ưu Đồng thời đưa ví dụ để học sinh làm quen, hình thành kĩ việc tiếp cận lựa chọn kĩ thuật tham lam Nhiệm vụ đề tài -Tham khảo tập tin học, tập nâng cao, tài liệu ôn luyện học sinh giỏi số đề thi học sinh giỏi môn Tin học - Nghiên cứu tài liệu liên quan đến kĩ thuật tham lam lập trình rút phương pháp làm quen vận dụng kĩ thuật - Hướng dẫn cho học sinh làm quen hình thành kĩ để giải số toán cụ thể - Kiểm tra, đánh giá kết học sinh trình triển khai đề tài để từ có điều chỉnh, bổ sung hợp lí Đối tượng nghiên cứu - Kỹ thuật tham ăn lập trình tập Tin học liên quan đến kỹ thuật Phạm vi nghiên cứu - Học sinh lớp 11 trường THPT Thọ Xuân - Các tập, đề thi Tin học Phương pháp nghiên cứu Sáng kiến kinh nghiệm trình bày tơi dựa theo luận khoa học hướng đối tượng, vận dụng linh hoạt phương pháp: quan sát, thuyết trình, vấn đáp, điều tra bản, kiểm thử, phân tích kết thực nghiệm sư phạm…vv phù hợp với học môn học thuộc lĩnh vực cấu trúc liệu PHẦN II NỢI DUNG Cơ sở lí luận Chúng ta thấy giáo dục bước triển khai chương trình giáo dục phổ thơng mới, mơn Tin học ngày khẳng định vai trị chủ đạo việc trang bị cho người học khả tìm kiếm, tiếp cận, mở rộng tri thức sáng tạo thời đại cách mạng công nghiệp 4.0 Tin học đưa vào dạy khóa cấp trung học phổ thơng từ năm 2005 Ngồi việc trang bị kiến thức, kĩ Tin học cho tồn học sinh nhu cầu phát hiện, bồi dưỡng học sinh giỏi môn Tin học ngày trọng Các thi tin học dành cho học sinh có quy mơ lớn, nhiều lứa tuổi khác nhau, thu hút đông đảo bạn trẻ tham gia trở thành mối quan tâm chung nhà trường Thực trạng Tuy nhiên, lượng sách tham khảo, sách tập dạy lập trình cho học sinh phổ thông nghèo nàn, thiếu đa dạng, dẫn đến việc tiếp cận với việc học lập trình học sinh gặp nhiều khó khăn chưa nói đến phân loại, phân dạng tập theo chuyên đề để ôn luyện nâng cao chất lượng mũi nhọn Bên cạnh đó, giáo viên dạy mơn Tin thiếu nguồn tài liệu tham khảo phục vụ cho dạy học lập trình Với chút kinh nghiệm thân, tơi sưu tầm, phân loại số tập lập trình liên quan đến kĩ thuật tham lam, làm nguồn tài liệu giảng dạy cho thân muốn chia sẻ đến thầy cô bạn học sinh quan tâm Biện pháp 3.1 Cơ sở lý thuyết Kĩ thuật tham lam ? Tham lam (hay tham ăn) phương pháp phổ biến để thiết kế giải thuật Nếu bạn đọc truyện dân gian có câu chuyện này: mâm cỗ có nhiều ăn, ngon ta ăn trước, ăn hết ta chuyển sang ngon thứ hai, chuyển tiếp sang thứ ba, … Rất nhiều giải thuật tiếng thiết kế dựa ý tưởng tham lam, ví dụ giải thuật khung nhỏ Dijkstra, giải thuật khung nhỏ Kruskal, … Kỹ thuật tham lam lựa chọn giải pháp cho tốt thời điểm sau giải tốn nảy sinh từ việc thực lựa chọn Lựa chọn kỹ thuật tham lam phụ thuộc vào lựa chọn trước Việc định sớm thay đổi hướng giải thuật với việc không xét lại định cũ dẫn đến kết phương pháp khơng tối ưu để tìm giải pháp toàn cục Chúng ta theo dõi toán đơn giản để thấy cách thực giải thuật tham lam lại nói giải thuật khơng tối ưu Ví dụ: Xét toán đếm số đồng tiền Yêu cầu lựa chọn số lượng đồng tiền nhỏ cho tổng mệnh giá đồng tiền với lượng tiền cho trước Nếu tiền đồng có mệnh giá 1, 2, 5, 10 xu lượng tiền cho trước 18 xu giải thuật tham lam thực sau: • Bước 1: Chọn đồng 10 xu, cịn 18 – 10 = xu • Bước 2: Chọn đồng xu, cịn xu • Bước 3: Chọn đồng xu, cịn lại xu • Bước 4: Cuối chọn đồng xu giải xong toán Bạn thấy cách làm ổn, số lượng đồng tiền cần phải lựa chọn đồng tiền Nhưng thay đổi toán chút hướng tiếp cận khơng đem lại kết tối ưu Chẳng hạn, hệ thống tiền tệ khác có đồng tiền có mệnh giá 1, 10 xu lượng tiền cho trước thay đổi thành 15 xu theo giải thuật tham lam số đồng tiền cần chọn nhiều Với giải thuật tham lam thì: 10 + + +1 + + 1, tổng cộng đồng tiền Trong toán xử lý việc chọn đồng tiền (7 + +1) Do kết luận rằng, giải thuật tham lam tìm kiếm giải pháp tối ưu bước lại thất bại việc tìm giải pháp tối ưu toàn cục Ưu điểm tham lam • Thuật tốn tham lam dễ dàng tiếp cận với toán đặc biệt toán đồ thị NP-đầy đủ không đảm bảo tìm lời giải tối ưu nhiên trở nên hữu ích việc dễ dàng thiết kế lời giải ước lượng (tương đối xác) • Độ phức tạp tham lam rõ ràng từ bạn xem xét độ phù hợp tham lam thời gian chạy tốn cần giải • Nếu chứng minh thuật tốn tham lam cho kết tối ưu toàn cục cho lớp tốn đó, thuật tốn thường trở thành phương pháp chọn lựa, chạy nhanh phương pháp tối ưu hóa khác quy hoạch động Nhược điểm • Rất khó để hiểu hay chứng minh lời giải tham lam kết tối ưu kể đưa lời giải tối ưu 3.2 Bài tập vận dụng Bài Đĩa CD Tên file: CD.*** Bạn An có N file nhạc mp3, có dung lượng A1, A2, , AN Bạn An muốn ghi số file nhạc vào đĩa CD có dung lượng S Hãy giúp bạn An cần chọn nhiều file nhạc để ghi vào đĩa CD Input: - Dòng chứa hai số N (1 n>>s; for (int i=1; i>a[i]; sort(a+1,a+n+1); int d=0; // số file nhạc ban đầu; int t=0; // tổng dung lượng file nhạc có đĩa for (int i=1;is) break; t=t+a[i]; d++; } cout m >> n; for (int i=1; i> a[i].soluong >> a[i].gia; a[i].id = i; } sort(a+1,a+n+1,cmp); int p; for (int i=1; i m) { p = i; break; } somay += a[i].soluong; tien += a[i].soluong * a[i].gia; x[a[i].id] = a[i].soluong; } tien += (m - somay) * a[p].gia; x[a[p].id] = m - somay; cout 0) kq+=1; cout>n; int res=0; while (n>0) { int x= GTLN(n); n-=x; res++; } coutn; for (int x,i=1;i>x; pq.push(x);} while (pq.size()>1) { int a=pq.top(); pq.pop(); int b=pq.top(); pq.pop(); int x=a+b; res +=x*0.05; pq.push(x); } cout a[i] >> b[i]; sort(a+1,a+n+1); sort(b+1,b+n+1); for (int i=1; i1; i ) if (k % i == 0) { x.push_back(i); k = k / i; ok = true; break; } if (!ok) { cout =0; i ) cout >n; for (int i=1; i>l>>r; a[++d]=pii(l,0); a[++d]=pii(r,1); } sort(a+1,a+2*n+1); d=0; int s=0; for (int i=1;i0) s+=a[i].first-a[i-1].first; if (a[i].second==0)d++; else d ; if(d==0) { ans=max(s,ans); s=0; } } cout