SKKN một số phương pháp tiếp cận bài toán, làm giảm độ phúc tạp của thuật toán

20 99 0
SKKN một số phương pháp tiếp cận bài toán, làm giảm độ phúc tạp của thuật toán

Đ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

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc  SÁNG KIẾN KINH NGHIỆM: MỘT SỐ PHƯƠNG PHÁP TIẾP CẬN BÀI TOÁN, LÀM GIẢM ĐỘ PHỨC TẠP CỦA THUẬT TOÁN -1- MỤC LỤC MỤC LỤC I MỞ ĐẦU Lý chọn đề tài Điểm đề tài .3 Phạm vi áp dụng đề tài II NỘI DUNG Thực trạng vấn đề cần nghiên cứu Biện pháp tiến hành .4 Dạng 1: Một số toán duyệt .5 Bài 1: Sắp xếp Bài 2: Tích lớn Bài 3: Tổng số lớn Dạng 2: Sử dụng thuật toán chia để trị để giảm độ phức tạp toán .14 Bài 1: Chọn dãy số 14 Bài 2: Hieu 16 Đánh giá kết thực nghiệm .18 III KẾT LUẬN 19 IV TÀI LIỆU THAM KHẢO 20 -2- I PHẦN MỞ ĐẦU Lý chọn đề tài Bài toán tin học toán xuất phát từ toán thực tế, việc xây dựng giải thuật để giải tốn tin học máy tính phải bảo đảm tính chất thuật tốn, tính chất chất u cầu thuật toán sau cài đặt chương trình máy tính ngơn ngữ lập trình thuật tốn phải chạy nhanh, tốn thời gian nhớ Đây yêu cầu quan trọng học sinh tham gia đội tuyển học sinh giỏi Điều thể rõ nhiều toán qua đề thi học sinh giỏi Tỉnh năm gần Trong toán thường yêu cầu chia thành nhiều mức nhằm mục đích phân loại trình độ học sinh Mức độ khó tốn phụ thuộc nhiều vào vào độ lớn liệu đầu vào nên vấn đề việc chọn giải thuật kết đòi hỏi chương trình phải chạy hết test lớn đơn vị thời gian quy định toán đạt mức điểm tối đa Để đảm bảo u cầu đó, đòi hỏi giải thuật để giải tốn phải có độ phức tạp tính toán nhỏ tốt Khi tiếp cận với tốn, tùy theo trình độ học sinh mà học sinh có cách phân tích tốn lựa chọn thuật tốn khác để giải Đối với học sinh có trình độ chưa cao, chưa có khả phân tích tốn tốt thường lựa chọn thuật tốn đơn giản, có độ phức tạp lớn đồng nghĩa với số điểm nhận thấp Để có kết tốt hơn, đòi hỏi học sinh phải có trình độ cao hơn, kỹ phân tích tốn tốt để tìm thuật tốn tốt có độ phức tạp tính tốn nhỏ Đây vấn đề mà giáo viên tin học tham gia bồi dưỡng đội tuyển học sinh giỏi coi trọng Đòi hỏi giáo viên phải tìm phương pháp phù hợp cho đối tượng học sinh để giúp học sinh bước tiếp cận toán tin học từ đơn giản đến phức tạp phù hợp với lực để dành điểm số cao Với lý tơi chọn đề tài sáng kiến kinh nghiệm với nhan đề: “Một số phương pháp tiếp cận toán, làm giảm độ phức tạp thuật toán” Điểm đề tài: Tính đề tài thể việc thu thập số toán sữ dụng bồi dưỡng học sinh giỏi số đề thi cấp tỉnh từ phân loại tốn theo dạng, phân tích dạng tốn theo chủ đề dựa thuật toán đến nâng cao để tìm cách xây dựng giải thuật tốt cho việc giải dạng toán giống dạng tương tự Phạm vi áp dụng đề tài: Đề tài áp dụng bồi dưỡng HSG 11 năm học 2017-2018 -3- II NỘI DUNG 1.Thực trạng vấn đề cần nghiên cứu: Trong trình bồi dưỡng học sinh gỏi vấn đề phát triển kỹ cho học sinh đòi hỏi người giáo viên phải thường xuyên tìm tòi phương pháp, phải có hệ thống tập từ đơn giản đến nâng cao để phát triển kỹ thường xuyên cho học sinh đáp ứng yêu cầu ngày cao toán tin học Khi tiếp xúc với toán tin học, học sinh thường cố gắng tìm thuật tốn tốt để giải trọn vẹn toán, tốn đơn giản học sinh tìm thuật tốn tốn khó đặc biệt tốn có liệu đầu vào lớn việc tìm thuật tốn tối ưu để đạt số điểm tối đa thường khó Học sinh khơng nghĩ sử dụng giải thuật đơn giản để giải tốn khó cho dù khơng đạt số điểm tối đa có điểm số mức độ phù hợp với khả để tránh điểm khơng Đây kinh nghiệm cần thiết học sinh giỏi tham gia ký thi HSG môn tin học Trước áp dụng sáng kiến kinh nghiệm kết khảo sát cho học sinh giỏi khối 11 là: - Mức điểm giỏi: 0% - Mức điểm khá: 30% - Mức điểm TB: 55% - Mức điểm yếu: 15% Để rèn luyện kỹ tiếp cận toán nhằm giúp học sinh có kinh nghiệm tiếp cận tốn khó nhiều thuật tốn theo bước từ đơn giản đến phức tạp phù hợp với khả để có điểm số tốt đòi hỏi người giáo viên cần rèn luyện kỹ tiếp cận toán để làm giảm độ phức tạp toán Biện pháp tiến hành Để giải tốn tin học máy tính thường phải thực theo bước: Bước bước quan trọng hiểu rõ nội dung toán Đây yêu cầu quen thuộc người làm toán Để hiểu toán theo cách tiếp cận tin học ta phải gắng xây dựng số ví dụ phản ánh yêu cầu đề đầu thử giải ví dụ để hình thành dần hướng thuật tốn Bước thứ hai dùng ngơn ngữ quen thuộc, tốt ngơn ngữ tốn học đặc tả đối tượng cần xử lí mức độ trừu tượng, lập tương quan, xây dựng hệ thức thể quan hệ đại lượng cần xử lí để có thuật tốn tốt -4- Bước thứ ba xác định cấu trúc liệu để biểu diễn đối tượng cần xử lí cho phù hợp với thao tác thuật toán Trong bước ta tiếp tục làm mịn dần đặc tả theo trình tự từ xuống, từ trừu tượng đến cụ thể, từ đại thể đến chi tiết Bước cuối sử dụng ngơn ngữ lập trình chọn để viết chương trình hồn chỉnh Ở bước ta tiến hành theo kĩ thuật từ lên, từ thao tác nhỏ đến thao tác tổ hợp Sau nhận chương trình ta cho chương trình chạy thử với liệu lấy từ ví dụ xây dựng bước Chúng ta vận dụng cách tiếp cận để giải số toán cụ thể chủ yếu bước thứ hai để tìm thuật tốn tốt Sau số phương pháp cụ thể để tối ưu độ phức tạp tính tốn giải thuật Dạng 1: Một số toán duyệt Bài 1: Sắp xếp Cho dãy X gồm N số nguyên phạm vi từ -10000 đến 10000 (1 N  65000) Hãy xếp dãy số theo thứ tự giảm dần Dữ liệu vào cho file văn SORT.INP dòng đầu chứa số N Dòng thứ chứa N số i dãy X, số cách khoảng trắng Kết ghi file văn với tên SORT.OUT ghi phần tử dãy X xếp Ví dụ: SORT.INP SORT.OUT 5433 3435 Lời giải: + Nếu sử dụng thuật tốn xếp thơng thường Quick Sort độ phức tạp tính tốn O(Nlog2N) + Đối với này, để thuật toán chạy nhanh ta sử dụng phương pháp xếp đếm phân phối với độ phức tạp giảm tới O(N) số dãy đôi khác Gọi Di số lần xuất số có giá trị i dãy Như lần đọc số có giá trị i dãy ta tăng Di lên đơn vị Đoạn chương trình sau đọc tất số dãy để tạo mảng D chứa tần suất xuất số dãy số cho: For i:=1 to N Begin Read(x); D[x]:=D[x]+1; End; -5- Vấn đề lại dựa vào mảng D để in số dãy theo thứ tự giảm dần Đoạn chương trình sau in dãy số cho theo thứ tự giảm dần For i:=10000 downto -10000 If D[i]>0 then For j:=1 to D[i] writeln(i); Chương trình: Const fi='sort.inp'; fo='sort.out'; Var D: array[-10000 10000] of Word; n, i: longint; f, f1: text; BEGIN Assign(f,fi); Reset(f); Assign(f1,fo); Rewrite(f1); Fillchar(D,sizeof(D),0); Readln(f,n); For i:=1 to n Begin Readln(f,x); Inc(D[x]); End; For i:=10000 downto -10000 If D[i]>0 then For j:=1 to D[i] write(f1,i,' '); Close(f); Close(f1); END Bài 2: Tích lớn Cho dãy gồm N số nguyên Hãy tìm số dãy với tích T chúng lớn Dữ liệu: Vào từ file văn TICHMAX.INP: - Dòng đầu ghi số N (3 N 10000) - Dòng thứ hai chứa N số nguyên có giá trị tuyệt đối không vượt 1000 Kết quả: Ghi file văn TICHMAX.OUT số T -6- Ví dụ: TICHMAX.INP 9 -3 10 TICHMAX.OUT 810 Lời giải: + Cách tiếp cận tầm thường: Sử dụng thuật toán duyệt vét cạn với độ phức tạp O(n3) sau: KQ:=MinInt; For i:=1 to n-2 For j:=i+1 to n-1 For k:=1 to n If a[i]*a[j]*a[k] > KQ then KQ:=a[i]*a[j]*a[k]; + Chúng ta có cách tiếp cận sau đưa độ phức tạp thuật tốn O(n) Nếu tích lớn phần tử bao gồm: - Ba số dương: Ba số phải số lớn nhất, nhì, ba dãy - Một số âm hai số dương: Dãy phải gồm hai số dương, khơng ta lấy tích ba số dương để đạt giá trị lớn Ta suy ba số phải ba số lớn nhất, nhì, ba dãy - Hai số âm số dương: Số dương phải số lớn hai số âm phải hai số nhỏ nhất, nhì dãy - Ba số âm: Dãy phải gồm toàn số âm, có số dương ta lấy tích số dương hai số âm để thu tích dương Ta suy ba số cần tìm phải ba số lớn nhất, nhì, ba dãy Vậy suy ra, T=max(max1*max2*max3,min1*min2*max1), với max1, max2, max3, min1, min2 số lớn nhất, nhì, ba số nhỏ nhất, nhì dãy Ta đọc qua số dãy cập nhật max1, max2, max3, min1, min2 mà không cần lưu lại dãy số Đoạn lệnh cập nhật min1, min2 đọc vào số x: If (x=max1) then Begin max3:=max2; max2:=max1; max1:=x; End Else If (x>=max2) then Begin max3:=max2; max2:=x; End Else if (x>=max3) then max3:=x; If (x

Ngày đăng: 13/11/2019, 11:00

Từ khóa liên quan

Mục lục

  • CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

    • 1. Lý do chọn đề tài

    • Bài toán trong tin học là bài toán xuất phát từ bài toán thực tế, việc xây dựng giải thuật để giải bài toán tin học bằng máy tính phải bảo đảm những tính chất cơ bản của thuật toán, trong các tính chất chất cơ bản đó thì yêu cầu về thuật toán sau khi đã được cài đặt chương trình trên máy tính bằng ngôn ngữ lập trình thì thuật toán phải chạy nhanh, tốn ít thời gian và bộ nhớ. Đây là yêu cầu rất quan trọng đối với những học sinh tham gia đội tuyển học sinh giỏi. Điều này được thể hiện rất rõ trong nhiều bài toán qua các đề thi học sinh giỏi Tỉnh trong những năm gần đây. Trong những bài toán này thường yêu cầu của nó được chia thành nhiều mức nhằm mục đích phân loại được trình độ của học sinh. Mức độ khó của bài toán phụ thuộc rất nhiều vào vào độ lớn của dữ liệu đầu vào nên ngoài vấn đề về việc chọn được giải thuật để cho kết quả đúng đòi hỏi chương trình phải chạy hết các bộ test lớn bằng một đơn vị thời gian đã được quy định trong từng bài toán mới đạt được mức điểm tối đa. Để đảm bảo được yêu cầu đó, đòi hỏi giải thuật để giải quyết bài toán phải có độ phức tạp tính toán càng nhỏ càng tốt.

    • 2. Biện pháp tiến hành

    • Dạng 1: Một số bài toán duyệt cơ bản

      • Bài 1: Sắp xếp

      • Bài 2: Tích lớn nhất

      • Bài 3: Tổng 2 số lớn:

      • Cho số nguyên X có M chữ số, số nguyên Y có N chữ số

      • Yêu cầu:

      • Tính tổng của X và Y

      • Dữ liệu vào: Cho trong tệp SUM.INP với cấu trúc.

      • Dòng 1: Ghi hai số M, N (1<M,N<30000), hai số cách nhau một dấu cách

      • Dòng 2: Ghi số X

      • Dòng 3: Ghi số Y

      • Dữ liệu ra: Ghi ra tệp SUM.OUT với cấu trúc

      • Dòng 1: Ghi tổng của X và Y

      • Ví dụ:

      • SUM.INP

      • SUM.OUT

      • 3 4

      • 123

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

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

Tài liệu liên quan