1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SKKN vận dụng thuật toán sắp xếp và tìm kiếm để tăng tốc độ chương trình của một số bài toán trong đề thi học sinh giỏi môn tin học lớp 11

9 137 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 76 KB

Nội dung

Lý do chọn đề tài Đối với học sinh các trường THPT, chương trình Tin học 10 và Tin học 11 ngoài việc cung cấp cho học sinh cách tư duy và giải các bài toán với sự hỗ trợ của các Ngôn ngữ

Trang 1

Mục lục

1 Mở đầu 2

1.1 Lý do chọn đề tài 2

1.2 Đối tượng và phạm vi nghiên cứu 2

1.3 Phương pháp nghiên cứu 2

2 Nội dung sáng kiến kinh nghiệm 3

2.1 Bài toán 1: 3

2.1.1 Thực trạng 3

2.1.2 Giải pháp 4

2.2 Bài toán 2: 5

2.2.1 Thực trạng 6

2.2.2 Giải pháp 6

2.3 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản thân, đồng nghiệp và nhà trường 9

3 Kết luận, kiến nghị 10

Trang 2

1 Mở đầu

1.1 Lý do chọn đề tài

Đối với học sinh các trường THPT, chương trình Tin học 10 và Tin học 11 ngoài việc cung cấp cho học sinh cách tư duy và giải các bài toán với sự hỗ trợ của các Ngôn ngữ lập trình, cụ thể là Ngôn ngữ lập trình PASCAL, còn cung cấp 2 thuật toán sắp xếp (thuật toán sắp xếp bằng phương pháp tráo đổi) và tìm kiếm (tìm kiếm nhị phân)

Trong các đề thi học sinh giỏi Tin học tỉnh ta theo cấu trúc đề thi 2018 gồm

5 câu, trong đó câu 3, 4, 5 yêu cầu học sinh cần phải vận dụng được các thuật toán sắp xếp và tìm kiếm ở mức độ cơ bản và nâng cao để giải quyết các bài toán Tuy nhiên một số học sinh có tư tưởng chỉ cần giải bài toán này bằng tư duy thông thường với bộ test nhỏ là đã quan niệm thuật toán của mình tối ưu Việc này hoàn toàn sai lầm, khi giới hạn test được tăng cao thì chương trình của các em thường bị mất test khi chương trình chạy quá thời gian (mặc định giới hạn thời gian là 1 giây) Vì vậy muốn giải quyết các test lớn, ở 1 số bài toán các

em phải vận dụng 2 thuật toán sắp xếp hoặc tìm kiếm để tăng tốc độ chương trình, đảm bảo về mặt thời gian khi giải quyết các test lớn

1.2 Đối tượng và phạm vi nghiên cứu

- Môn Tin học lớp 11 ở trường THPT;

- Đội tuyển HSG trường THPT Hàm Rồng;

1.3 Phương pháp nghiên cứu

- Phân tích, tổng hợp, khảo sát

- Đánh giá so sánh kết quả của học sinh;

Trang 3

2 Nội dung sáng kiến kinh nghiệm

2.1 Bài toán 1:

Cho 2 dãy số: dãy A có n phần tử, dãy B có m phần tử

Yêu cầu: In ra m dòng, dòng thứ i là số lượng số trong dãy A nhỏ hơn hoặc

bằng B[i]

Dữ liệu vào: Từ file văn bản SSDAYSO.INP

- Dòng đầu tiên chứa 2 số n, m lần lượt là số lượng phần tử của 2 dãy A, B

- Dòng thứ 2 chứa n số nguyên A[1], A[2], … A[n]

- M dòng tiếp theo mỗi dòng chứa 1 số nguyên B[1], B[2], … B[m]

(1 <= n, m, A[i], B[i] <= 106)

Dữ liệu ra: Ghi ra file văn bản SSDAYSO.OUT: In ra kết quả bài toán,

mỗi kết quả trên 1 dòng

SSDAYSO.INP SSDAYSO.OUT

5 3

1 4 2 5 3 2

3 4

2 3 4

2.1.1 Thực trạng

Với cách tư duy thông thường học sinh sẽ khai báo 2 mảng A và B

- Duyệt từng phần tử trong mảng B, với mỗi phần tử B[i] duyệt toàn bộ mảng A:

+ Nếu a[j]<=b[i] thì tăng biến đếm

+ Sau khi duyệt hết mảng A thì ghi biến đếm lên tệp

Như vậy thì độ phức tạp của thuật toán sẽ là (m x n), mà theo giới hạn đầu bài là: (1 <= n, m, A[i], B[i] <= 106) Suy ra với n,m lớn nhất ta có số phép toán phải thực hiện là 106 x 106 = 1012

Nếu gặp test này thì chắc chắn chương trình không thể thực hiện trong 1 giây

procedure process1;

var f:text; i,j,dem:longint;

begin

assign(f,fo);

rewrite(f);

for i:=1 to m do

begin

dem:=0;

for j:=1 to n do

if a[j]<=b[i] then inc(dem);

writeln(f,dem);

end;

close(f);

end;

Trang 4

2.1.2 Giải pháp

Cách tư duy thứ 2 là hướng dẫn học sinh vận dụng thuật toán sắp xếp và tìm kiếm nhị phân để cải thiện thời gian cho chương trình như sau:

- Sắp xếp mảng A thành 1 dãy không giảm (bài giải tham khảo vận dụng thuật toán quicksort)

- Duyệt từng phần tử trong mảng B Với mỗi phần tử B[i] ta thực hiện tìm kiếm nhị phân trên mảng A với cách tìm z>=A[mid]

Như vậy độ phức tạp của thuật toán sẽ là: m x O(logn)

Với n,m đạt giá trị max là 106 chương trình đảm bảo chạy tốt trong 1 giây

Bài giải tham khảo:

const fi='ssdayso.inp';

fo='ssdayso.out';

var n,m:longint;

a,b:array[1 1000000] of longint;

procedure readfile;

var f:text; i:longint;

begin

assign(f,fi);

reset(f);

readln(f,n,m);

for i:=1 to n do read(f,a[i]);

for i:=1 to m do readln(f,b[i]);

close(f);

end;

procedure qs(l,r:longint);

var i,j,k,tg:longint;

begin

i:=l; j:=r;

k:=a[(l+r) div 2];

repeat

while a[i]<k do inc(i);

while k<a[j] do dec(j);

if i<=j then

begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;

inc(i);

dec(j);

end;

until i>j;

if l<j then qs(l,j);

if i<r then qs(i,r);

end;

Trang 5

function tknp(z:longint):longint;

var l,r,mid,pos:longint;

begin

l:=1; r:=n;

while l<=r do

begin

mid:=(l+r) div 2;

if a[mid]<=z then

begin

pos:=mid;

l:=mid+1;

end

else r:=mid-1;

end;

exit(pos);

end;

procedure process;

var f:text; i,vt:longint;

begin

assign(f,fo);

rewrite(f);

for i:=1 to m do

if b[i]<a[1] then writeln(f,0)

else

begin

vt:=tknp(b[i]);

writeln(f,vt);

end;

close(f);

end;

BEGIN

readfile;

qs(1,n);

process;

END

2.2 Bài toán 2: Hẹn gặp

Thành phố Gloaming (Hoàng hôn) nổi tiếng với đường dẫn vào công

viên thành phố Các bức tượng tuyệt đẹp theo chủ đề thần thoại Hy lạp – La mã đặt dọc theo con đường thẳng có một sức hút không cưỡng được với mọi khách

du lịch Còn khi những tia nắng cuối cùng trong ngày miễn cưỡng rời khỏi bầu trời thì sương mù dày đặc, như một tấm voan trắng mềm mại từ từ rũ xuống

Bây giờ đứng cách quá r mét là đã không nhìn thấy mặt nhau và các bức tượng

trở thành nơi lý tưởng cho các đôi nam nữ thanh niên hẹn hò

Trang 6

James Bond cần gặp gấp 2 điệp viên nội tuyến của mình để nhận các mật báo khẩn Không muốn 2 người này nhìn thấy nhau, Bond hẹn gặp mỗi người ở

một bức tượng sao cho khoảng cách giữa chúng lớn hơn r Trên đường có n bức tượng, bức tượng thứ i ở vị trí cách đầu con đường d i mét i = 1 ÷ n, 1 ≤ d 1 < d 2 <

.< d n ≤ 109

Yêu cầu: Hãy xác định James Bond có bao nhiêu cách chọn địa điểm.

Dữ liệu vào: Vào từ file văn bản BAI3.INP:

- Dòng đầu tiên chứa 2 số nguyên n và r (1 ≤ n ≤ 3×105, 1 ≤ r ≤ 109)

- Dòng thứ 2 chứa n số nguyên d 1 , d 2 , , d n

Kết quả: Đưa ra file văn bản BAI3.OUT một số nguyên là số cách chọn

địa điểm tìm được

Ví dụ:

4 4

Rằng buộc:

- Có ½ số test tương ứng với ½ số điểm có n ≤ 104

- Có ½ số test tương ứng với ½ số điểm có 104 < n ≤ 3×105

2.2.1 Thực trạng

Với cách tư duy thông thường học sinh sẽ khai báo mảng A lưu trữ vị trí di

Sử dụng 2 vòng lặp for do để kiểm tra r + d[i] <d[j] thì dừng lại để cộng vào biến đếm

Khi đó độ phức tạp của thuật toán sẽ là n2, mà theo giới hạn đầu bài 1 ≤ n ≤

3×105 nên với n max thì số lượng phép toán phải thực hiện là: 3×105 x 3×105 Nếu gặp test này thì chắc chắn chương trình không thể thực hiện trong 1 giây

procedure process1;

var i,j:longint;

begin

dem:=0;

for i:=1 to n do

for j:=i to n do

if r+d[i]<d[j] then inc(dem,n-j+1);

end;

2.2.2 Giải pháp

Cách tư duy thứ 2 là hướng dẫn học sinh vận dụng thuật toán tìm kiếm nhị phân để cải thiện thời gian (do dãy di đã sắp xếp theo thứ tự tăng dần) cho chương trình như sau:

Duyệt 1 vòng lặp for do từ 1 đến n, trong đó thực thi tìm kiếm nhị phân r+d[i]

Như vậy độ phức tạp của thuật toán sẽ là: n x O(logn)

Với n đạt giá trị max là 3 x 105 chương trình đảm bảo chạy tốt trong 1 giây

Trang 7

Bài giải tham khảo:

program Hengap;

const fi='Gloaming.inp';

fo='Gloaming.out';

var dem:int64;n,r:longint;

d:array[1 300000] of longint;

procedure readfile;

var f:text; i:longint;

begin

assign(f,fi);

reset(f);

read(f,n,r);

for i:=1 to n do read(f,d[i]);

close(f);

end;

function np(x,a,b:longint):longint;

var t,p,m:longint;

begin

t:=a; p:=b;

while t<=p do

begin

m:=(t+p)div 2;

if d[m]=x then

exit(m+1)

else

if d[m]<x then t:=m+1

else p:=m-1;

end;

exit(t);

end;

procedure process;

var a,i,j:longint;

begin

dem:=0;

for i:=1 to n do

begin

a:=np(r+d[i],i,n);

if a>n then break;

inc(dem,n-a+1);

end;

end;

procedure writefile;

var f:text;

begin

assign(f,fo);

rewrite(f);

Trang 8

write(f,dem);

close(f);

end;

BEGIN

readfile;

process;

writefile;

END

2.3 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với

bản thân, đồng nghiệp và nhà trường

- Sau khi áp dụng sáng kiến kinh nghiệm này cho đội tuyển HSG trường THPT Hàm Rồng năm học 2017-2018 từ tháng 12/2017 đến tháng 2/2018 đạt được kết quả như sau:

* Đối với học sinh: 100% học sinh đội tuyển khi gặp các bài toàn cùng dạng đã nhận thức được thực trạng không giải quyết hết test chương trình, đồng thời biết vận dụng thuật toán sắp xếp và tìm kiếm nhị phân để giải quyết bài toán

* Đối với bản thân, đồng nghiệp:

- Nhận thức được cách giải quyết bài toán của đề thi học sinh giỏi Tin học theo hướng mới để đạt được 100% test khi áp dụng thuật toán sắp xếp và tìm kiếm nhị phân trên 1 lớp các bài toán cùng dạng

- Chia sẻ cách thức vận dụng trong toàn bộ nhóm Tin trường THPT Hàm Rồng, đồng thời cùng thực hiện trên 1 lớp các bài toán để đưa ra cách thức áp dụng tối

ưu nhất

* Đối với nhà trường: Chất lượng học sinh đội tuyển học sinh giỏi của trường được nâng cao

Trang 9

3 Kết luận, kiến nghị

Với cách tư duy thông thường của học sinh khi giải quyết các bài toán trong đề thi HSG Tin học 11 thì rất khó giải quyết khi gặp các Test lớn về giá trị

và về mặt thời gian chương trình sẽ không tối ưu Do đó học sinh nên vận dụng

2 thuật toán sắp xếp và tìm kiếm nhị phân để cải thiện chương trình Tuy nhiên, không phải bài toán nào ta cũng áp dụng 2 thuật toán này mà phải tùy vào nội dung bài toán để có hướng áp dụng cho phù hợp Việc này đòi hỏi học sinh phải được tiếp xúc với rất nhiều các bài toán tương tự, khi đó kỹ năng áp dụng 2 thuật toán vào các bài tập mới hoàn thiện

Mặc dù bản thân đã cố gắng nhiều, song trong đề tài còn nhiều khiếm khuyết, tôi rất mong nhận được sự đóng góp ý kiến của các đồng nghiệp, để được hoàn thiện hơn và đạt hiệu quả trong giảng dạy và học tập của học sinh./

XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ Thanh Hóa, ngày 05 tháng 5 năm 2018

Tôi xin cam đoan đây là SKKN của mình viết, không sao chép nội dung của người khác

Người viết

Nguyễn Thành Nam

Ngày đăng: 21/11/2019, 08:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w