SKKN 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 37 0
SKKN 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

1 Đề 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 toán tối ưu (tốt ) Với toán vậy, tốn có nhiều thuật toá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 1.2 Mục đích nghiên cứu: Đê tai nghiên cưu nhằm giup hoc sinh giai qut tơt cac bai toan xếp, tìm kiếm tư đo đổi mơi cach tư lâp trinh, để đưng trươc môt bai toan cân giai quyêt ngoai viêc tim thuât toan để cài đặt chương trình thi học sinh biết cách so sánh, đanh gia hiệu thời gian thực chương trình (hay cịn gọi độ phức tạp thuật tốn) lưa chon đươ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: Sang kiên kinh nghiêm co đôi tương nghiên cưu la cac bai toan 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 Đê trinh bay sang kiên kinh nghiêm nay, đa sư dung phôi kêt hơp nhiêu phương phap như: nghiên cưu tai liêu, thuyêt trinh, quan sát, điều tra bản, thưc nghiêm so sanh, phân tich kêt qua thưc nghiêm, … phu hơp vơi môn hoc thuôc linh vưc Tin hoc 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 đề Nêu hoc sinh thưc hiên tôt viêc lưa chon cài đặt chương trình tơi ưu giai cac bai tâp xếp, tìm kiếm nói riêng tập lâp trinh nói chung thi 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 cai tiến chương trình tơi ưu để chương trình chạy nhanh chủ yếu đinh hương cho hoc sinh tim đươc thuât toan (cach lam) để 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 trinh khơng q giây/ 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 hoc sinh gioi 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 hoc sinh gioi Tin trường thất bại khơng có em đạt giải (măc du thi vê cac em rât phân khơi vi nghi minh lam bai tôt, đung vây bai lam cac em đêu cho kêt qua đung khoang thơi gian cho phep nho giây vơi bô input co dư liêu nho bô input co dư liêu lơn thi bai lam vân cho kêt qua đung thơi gian chay chương trinh qua 1giây, nghia la bô test co dư liêu lơn cac em bi mât điêm) Vân đê đăt ra, la lam thê nao đê lây đươc điêm vơi cac 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, tơi chi nghiên cưu vê tiêu chi thơi gian thưc hiên chương trình đê lưa chon chương trình tối ưu, tiêu chí quan trọng người ta quan tâm nhiều Ngoà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 tơi 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 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 tố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 tốn máy tính bước lựa chọn thiết kế thuật toá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 + Tḥậ̣t toáá́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 tốn, ta nhận Output cần tìm + Cáá́c tính chất thuậậ̣t toáá́n - Tính dừng: Thuật toá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 toá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 toá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 toá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 tố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 tố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 + Ngôn ngữ thuậậ̣t toáá́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 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ố tḥậ̣t toáá́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 * Tḥậ̣t toáá́n Có nhiều thuật tố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 trình dạy học tơi giới thiệu cho học sinh thuật tốn: tráo đởổ̉i Quick sort Thuật tố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ể 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= n * (n 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 nởổ̉i 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 = aGiua 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 toá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ê 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: 11 function binary_search(A, n, T) is L:=0 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 Bài toáá́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: 10/07/2020, 12:11

Từ khóa liên quan

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

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

Tài liệu liên quan