(SKKN mới NHẤT) kinh nghiệm lựa chọn và cài đặt chương trình tối ưu khi giải một số dạng bài tập tìm kiếm, sắp xếp nhằm nâng cao chất lượng học sinh giỏi môn tin ở trường THPT

19 2 0
(SKKN mới NHẤT) kinh nghiệm lựa chọn và cài đặt chương trình tối ưu khi giải một số dạng bài tập tìm kiếm, sắp xếp nhằm nâng cao chất lượng học sinh giỏi môn tin ở trường THPT

Đ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

Đề tài: KINH NGHIỆM LỰA CHỌN VÀ CÀI ĐẶT CHƯƠNG TRÌNH TỐI ƯU KHI GIẢI MỘT SỐ DẠNG BÀI TẬP TÌM KIẾM, SẮP XẾP NHẰM NÂNG CAO CHẤT LƯỢNG HỌC SINH GIỎI MÔN TIN HỌC Ở TRƯỜNG THPT Mở đầu 1.1 Lí chọn đề tài Hiện giới, Tin học ngày phát triển mạnh mẽ, có ứng dụng rộng rãi hầu hết lĩnh vực xã hội, phát triển tin học tính giờ, lại có thêm phiên phần mềm tin học nâng cấp hay có phần mềm tạo Máy tính cơng cụ trợ giúp cho phát triển Tin học, đáp ứng nhu cầu tính tốn, lưu trữ, tìm kiếm, xử lý thơng tin cách có hiệu Máy tính có tốc độ xử lý nhanh (hàng tỉ lệnh giây) có giới hạn Tất máy tìm kiếm (ví dụ google, yahoo hay gmail…) lập trình đoạn lệnh Ngơn ngữ lập trình máy sử dụng thuật tốn tối ưu (tốt ) Với toán vậy, tốn có nhiều thuật tốn để giải ta nên lựa chọn thuật toán tối ưu (có số phép tính nhất) Do đó, viết chương trình ta nên tìm cách viết cho chương trình thực phép tốn tốt Xuất phát từ thực tế tơi đưa đề tài: “KINH NGHIỆM LỰA CHỌN VÀ CÀI ĐẶT CHƯƠNG TRÌNH TỐI ƯU KHI GIẢI MỘT SỐ DẠNG BÀI TẬP TÌM KIẾM, SẮP XẾP NHẰM NÂNG CAO CHẤT LƯỢNG HỌC SINH GIỎI MÔN TIN HỌC Ở TRƯỜNG THPT” nhằm định hướng cho em học sinh biết phân tích, lựa chọn thuật tốn tối ưu trước lập trình giải tốn máy tính TIEU LUAN MOI download : skknchat@gmail.com 1.2 Mục đích nghiên cứu: Đề tài nghiên cứu nhằm giúp học sinh giải quyết tốt các bài toán xếp, tìm kiếm từ đó đởi mới cách tư lập trình, để đứng trước một bài toán cần giải quyết ngoài việc tìm thuật toán để cài đặt chương trình thì học sinh biết cách so sánh, đánh giá hiệu thời gian thực chương trình (hay cịn gọi độ phức tạp thuật toán) lựa chọn được chương trình phù hợp nhằm nâng cao chất lượng học sinh giỏi 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à các bài toán xếp, tìm kiếm, nghiên cứu nhiều cách làm, xét nhiều phương diện 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 quả thực nghiệm, … phù hợp với môn học tḥc lĩnh vực Tin học NỢI DUNG NGHIÊN CỨU 2.1 Cơ sở lý luận Căn vào mục tiêu môn Tin học, phải cung cấp tri thức bản, làm tảng để học sinh tiếp tục sâu vào tìm hiểu xây dựng khoa học Tin học tiếp thu tri thức lĩnh vực kĩ thuật công nghệ tiên tiến, lĩnh vực công nghệ thông tin Môn Tin học, môn học khác, vào mục tiêu để xác định nhiệm vụ cụ thể môn học, tổ chức hoạt động đào tạo góp phần thực mục tiêu giáo dục mà Đảng nhà nước đề TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT Nếu học sinh thực hiện tốt việc lựa chọn cài đặt chương trình tới ưu giải các bài tập xếp, tìm kiếm nói riêng 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 Những năm đầu dạy bồi dưỡng học sinh giỏi chưa trọng nhiều đến cải tiến chương trình tới ưu để chương trình chạy nhanh chủ yếu định hướng cho học sinh tìm được thuật toán (cách làm) để chương trình cho kết mà thơi Chính giải tốn nói riêng tập lập trình pascal khác nói chung, học sinh giáo viên thường làm việc với input có liệu nhỏ dễ nhìn thấy kết output thường khơng xét đến trường hợp input đặc biệt hay input có liệu lớn Dẫn đến bị điểm thi học sinh giỏi Đối với thi học sinh giỏi, dù kết output thí sinh có giống hệt với input, việc chênh lệch thời gian định thí sinh chiến thắng hay thất bại (yêu cầu thời gian xử lí chương trình khơng q giây/1 test) Trong kì thi học sinh giỏi gần đây, với cấu trúc đề câu tương ứng với số điểm 6, 5, 4,3,2 có khơng q 50% liệu input nhỏ vừa tầm việc thí sinh dù có làm hết câu đề nguy thất bại cao Bảng điểm lần thi khảo sát chất lượng học sinh giỏi về chuyên đề số học (do tự tổ chức) năm học 2018 – 2019 chưa thực đề tài: Họ tên Phạm Minh Đức Võ Lê Phương Điểm lần 2/10 3/10 Điểm lần 3/10 3/10 Điểm lần 2/10 4/10 Điểm lần 3/10 4/10 Do kết học sinh giỏi năm 2018- 2019 chưa mong muốn, có em học sinh tham gia thi học sinh giỏi Tin trường thất bại khơng có em đạt giải (mặc dù thi về các em rất phấn khởi vì nghỉ mình làm bài tốt, đúng vậy bài làm các em đều cho kết quả đúng khoảng thời gian cho phép nhỏ giây với bộ input có dữ liệu nhỏ còn bộ input có dữ liệu lớn thì bài làm vẫn cho kết quả đúng thời gian chạy chương trình quá 1giây, nghĩa là bộ test có dữ liệu lớn các em bị mất điểm) TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT Vấn đề đặt ra, là làm thế nào để lấy được điểm với các input có dữ liệu lớn Muốn cần phải lựa chọn cài đặt chương trình hiệu (tối ưu) Chương trình hiệu chương trình giải input có liệu lớn, xác, dung lượng sử dụng nhớ nhỏ, thời gian thực chương trình ngắn, Nhưng phạm vi sáng kiến kinh nghiệm mình, chỉ nghiên cứu về tiêu chí thời gian thực hiện chương trình để lựa chọn chương trình tối ưu, tiêu chí quan trọng người ta quan tâm nhiều Ngồi ra, tơi ưu tiên lựa chọn chương trình ngắn gọn, dễ hiểu phù hợp với lực học sinh trường Thời gian thực chương trình khơng phụ thuộc vào thuật tốn mà cịn phụ thuộc vào cấu hình máy tính, kĩ xảo người lập trình, kích thước tính chất liệu vào, Để cụ thể tường minh tơi có sử dụng phần mềm Themis để đo thời gian thực chương trình với test cụ thể (có file test kèm theo) Các kết tơi thử nghiệm máy tính laptop ASUS, Ram 2GB, Processor AMDE-450 APU 1.65HZ 2.3 Các giải pháp 2.3.1 Kiến thức trọng tâm +Việc giải tốn máy tính thường tiến hành qua bước sau: + Bước 1: Xác định toán; + Bước 2: Lựa chọn thiết kế thuật toán; + Bước 3: Viết chương trình; + Bước 4: Hiệu chỉnh; + Bước 5: Viết tài liệu Trong bước giải toán máy tính bước lựa chọn thiết kế thuật tốn đặc biệt quan trọng để em phân tích đề bài, tìm hướng giải, thuật tốn phù hợp + Thuật tốn Thuật tốn để giải toán dãy hữu hạn thao tác xếp theo trình tự xác định cho sau thực dãy thao tác từ Input toán, ta nhận Output cần tìm TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT + Các tính chất thuật tốn - Tính dừng: Thuật tốn phải kết thúc sau số hữu hạn thao tác - Tính xác định: Sau thực thao tác thuật tốn kết thúc có thao tác xác định để thực - Tính đắn: Sau thuật tốn kết thúc, ta nhận Output cần tìm + Vì phải lựa chọn thuật toán tối ưu Sau xây dựng thuật tốn chương trình tương ứng, cài đặt theo thuật tốn đáp ứng tính chất thuật tốn khơng cho kết mong muốn liệu địi hỏi q nhiều thời gian, khơng có đủ nhớ để lưu giữ liệu biến chương trình Vì ta cần phân tích thuật tốn để đưa thuật toán tối ưu + Căn vào đâu để xác định thuật toán tối ưu Với toán, khơng có thuật tốn, vào đâu để nói thuật tốn nhanh thuật tốn kia? Ta vào thời gian nhớ cần thiết để thực thuật toán Trong đề tài ta quan tâm đến thời gian thực thuật toán Việc đánh giá thời gian thực thuật toán dẫn tới khái niệm “độ phức tạp thời gian thuật toán” chứng minh thường gọi tắt độ phức tạp thuật tốn, kí hiệu O( ) Độ phức tạp thuật toán nhỏ thuật tốn chạy nhanh khả thi Thời gian thực thuật toán phụ thuộc vào nhiều yếu tố như: kích thước liệu đưa vào, lựa chọn, bố trí kiểu liệu có hợp lý khơng… Vậy để tính tốn thời gian thực thuật tốn ta đếm số câu lệnh mà thực hiện, số trường hợp đếm cụ thể phép tính số học, so sánh, gán…mà thuật tốn địi hỏi thực chạy trực tiếp chương trình ngơn ngữ lập trình cụ thể thử nghiệm nhờ số liệu so sánh kết thử nghiệm với kết mà ta biết TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT + Ngơn ngữ thuật tốn - Ngơn ngữ dùng để miêu tả thuật tốn gọi ngơn ngữ thuật tốn - Thuật tốn thường mơ tả dãy lệnh Bộ xử lý thực lệnh theo trật tự định gặp lệnh dừng kết thúc - Ngơn ngữ thuật tốn bao gồm: + Ngơn ngữ liệt kê bước; + Sơ đồ khối; + Ngơn ngữ lập trình - Trong đề tài ưu tiên sử dụng ngôn ngữ liệt kê bước ngôn ngữ lập trình Pascal 2.3.2 Một số thuật tốn xếp, tìm kiếm 2.3.2.1 Thuật toán xếp *Bài toán: Cho số nguyên dương N dãy A gồm N số nguyên: a 1, a2,…, aN Sắp xếp dãy A thành dãy không giảm (tức số hạng trước không lớn số hạng sau) * Ví dụ: Cho N=10, dãy A: 10 => Dãy sau xếp: 5 10 * Thuật tốn Có nhiều thuật toán xếp xếp: lựa chọn, thêm dần, phân đoạn, vun đống, hòa nhập hai đường trực tiếp, tuần tự, tráo đổi, xếp nhanh Quick sort… Tuy nhiên q trình dạy học tơi giới thiệu cho học sinh thuật toán: tráo đổi Quick sort Thuật toán xếp tráo đổi dễ hiểu có số hạn chế, cịn quick sort có thời gian thực Trong đề tài tơi đưa hai thuật tốn xếp là: xếp tráo đổi xếp nhanh Quick sort để độc giả có so sánh sử dụng linh hoạt trường hợp cụ thể TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT 2.3.2.1.1 Thuật toán xếp tráo đổi Ý tưởng phương pháp: Với cặp số hạng đứng liền kề dãy, số trước lớn số sau ta đổi chỗ chúng cho Việc lặp lại khơng có đổi chỗ Thuật toán: Procedure sapxeptraodoi; Var i, j, tg: integer; begin For i:=1 to n-1 For j:= n downto i+1 If a[j]< a[j-1] then Begin Tg:=a[j]; A[j]:=a[j-1]; A[j-1]:=tg; End; End; Nhận xét: Thuật toán sử dụng vòng lặp for… => lần duyệt i phải thực n-1 phép so sánh để tìm giá trị lớn đẩy cuối dãy Vậy số phép toán cần thiết là: (n-1)+(n-2)+…+1= => Độ phức tạp thuật toán xấp xỉ cỡ O(n2) 2.3.2.1.2 Thuật toán xếp nhanh Quick-sort Ý tưởng phương pháp: Ý tưởng: Chọn phần tử làm chốt (ở ta chọn phần tử vị trí giữa) Từ trái sang tìm phần tử có vị trí i lớn phần tử chốt, từ phải sang tìm phần tử có vị trí j bé phần tử chốt Nếu i j Lúc chia nhóm cần xếp Làm tương tự với nhóm xếp hết dãy procedure quicksort(l,r: longint); var i,j,tg,mid: longint; begin i:=l; j:=r; mid:= a[(l+r) div 2]; repeat while a[i]< mid inc(i); while a[j] > mid dec(j); if i j; if il then quicksort(l,j); end; Độ phức tạp thuật toán O(NlogN) * Nhận xét chung So sánh hai thuật toán ta thấy thuật toán xếp bọt dễ cài đặt có độ phức tạp cỡ O(n2) cịn thuật tốn Quick-sort có độ phức tạp cỡ O(nlogn), có nghĩa thời gian thực Quick-sort nhanh nhiều Vậy tùy vào toán cụ thể mà ta nên lựa chọn phương pháp xếp phù hợp Nếu tập liệu đưa vào nhỏ ( aGiua việc tìm kiếm k dãy gồm số hạng aGiua+1, aGiua+2,…, aN; + Nếu k < aGiua việc tìm kiếm k thực dãy gồm số a1, a2,…, aGiua-1 Trong trường hợp k = a Giua việc tìm kiếm kết thúc q đơn giản cịn khơng hai trường hợp hai ba đưa đến tốn tìm kiếm bảng không lớn [n/2] phần tử Quá trình thực bảng liệt kê 10 TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT phần tử so sánh k với số hạng Việc tìm kiếm giúp thu hẹp nhanh phạm vi tìm kiếm Ta mơ tả thuật tốn tìm kiếm nhị phân sau: Giải thuật TIM_KIEM_NHI_PHAN: function binary_search(A, n, T) is L := R := n − while L ≤ R Giua := floor((L + R) / 2) if A[Giua] < T then L := Giua + else if A[Giua] > T then R := Giua - else: return Giua return không_thành_công Nhận xét: Trong giải thuật trường hợp tốt tìm thấy khóa k = a Giua việc tìm kiếm kết thúc đơn giản (chỉ cần phép so sánh) Cịn khơng trường hợp xấu người ta chứng minh thời gian thực giải thuật ~ O(log2n) * Nhận xét chung So với thuật tốn tìm kiếm tuần tự, thuật tốn tìm kiếm nhị phân thực tìm kiếm bảng không lớn [n/2] phần tử Vậy trường hợp bảng liệt kê thứ tự thuật tốn tìm kiếm nhị phân tốt thuật tốn tìm kiếm nhiều, cịn trường hợp dãy khóa chưa xếp thời gian chi phí cho xếp phải kể đến Vì tùy trường hợp đề ta nên cân nhắc lựa chọn thuật toán cho phù hợp để chi phí thực 2.3.3 Một số ví dụ minh chứng 11 TIEU LUAN MOI download : skknchat@gmail.com (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT (SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT(SKKN.moi.NHAT).kinh.nghiem.lua.chon.va.cai.dat.chuong.trinh.toi.uu.khi.giai.mot.so.dang.bai.tap.tim.kiem sap.xep.nham.nang.cao.chat.luong.hoc.sinh.gioi.mon.tin.o.truong.THPT Bài tốn 1: cho dãy số A a1,a2, an có n phần tử xếp dãy số A theo chiều tăng dần Yêu cầu: Sắp xếp dãy A tăng dần thời gian chạy 1s Dữ liệu: Vào file DAYSO.inp - Dòng số nguyên n với n

Ngày đăng: 18/12/2023, 04:26

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

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

Tài liệu liên quan