Tải bản đầy đủ (.doc) (14 trang)

SKKN: Hướng dẫn học sinh giải bài toán sắp xếp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.15 MB, 14 trang )

A. ĐẶT VẤN ĐỀ
Hiện nay trong hầu hết các lĩnh vực hệ lưu trữ, quản lý dữ liệu, thao tác tìm
kiếm thường được thực hiện nhiều nhất để khai thác thơng tin một cách nhanh
chóng và chính xác (ví dụ như: tra cứu từ điển, tìm sách trong thư viện, tra cứu
thông tin về nhân viên trong một cơ quan, tra cứu điểm thi của một học sinh
trong một trường học,…). Để đạt được mục tiêu tìm kiếm một cách nhanh chóng
thì dữ liệu cần phải được sắp xếp sẵn, ngăn nắp, khoa học theo một trật tự, một
hệ thống nhất định.
Khi xây dựng một hệ thống quản lý thông tin trên máy tính, bên cạnh các
thuật tốn tìm kiếm, các thuật toán sắp xếp dữ liệu cũng là một trong các chủ đề
được quan tâm hàng đầu.
Trong khi đó, với học sinh bậc THCS, việc lập trình giải quyết các bài toán,
đặc biệt là các bài toán sắp xếp cịn rất lúng túng, phương pháp cịn nghèo nàn,
thuật tốn còn đơn điệu, điều này dẫn đến việc giải quyết các bài tốn sắp xếp
cịn rất nhiều hạn chế.
Xuất phát từ thực trạng của vấn đề trên, sau một thời gian dài tìm hiểu,
nghiên cứu tơi xây dựng chun đề: “Hướng dẫn học sinh giải bài toán sắp xếp”
với mong muốn mang lại cho các em một cái nhìn tổng thể về bài tốn sắp xếp
nói chung, các thuật tốn sắp xếp nói riêng, từ đó có thể tiếp cận được với các
bài tốn quản lý thơng tin sau này.
B. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
I. CƠ SỞ LÝ LUẬN CỦA VẤN ĐỀ
Định hướng đổi mới phương pháp dạy học được xác định trong Nghị quyết
Trung Ương 4 khóa VII, Nghị quyết Trung Ương 2 khóa VIII, Luật Giáo Dục
2005 và các chỉ thị của Bộ Giáo Dục và Đào Tạo, đặc biệt là chỉ thị 14.
Luật Giáo Dục điều 28.2 có ghi “ Phương pháp giáo dục phổ thơng phải
phát huy tính tích cực, tự giác chủ động, sáng tạo của học sinh, phù hợp với từng
đặc điểm lớp học, môn học, bồi dưỡng phương pháp tự học, rèn luyện kỉ năng
vận dụng kiến thức áp dụng thực hành trên máy tính, thực tiễn trong cuộc sống,
tác động đến tình cảm, đem lại niềm vui, hứng thú và lịng say mê trong học tập.



Thiết bị dạy học gắn liền với phương pháp dạy học, phương pháp dạy học
mơn Tin học khơng chỉ có lí thuyết mà phải có thực hành, cập nhập thơng tin,
trang Web, Internet, E-mail. Vận dụng ứng dụng công nghệ thông tin, các kiến
thức đã học ở trên lớp, kĩ năng thực hành trên máy tính mà giáo viên phải trang
bị cho học sinh.
II. THỰC TRẠNG CỦA VẤN ĐỀ
Thực tế hiện nay cơng nghiệp hóa hiện đại hóa đất nước. Việt Nam gia
nhập WTO. Đất nước ngày càng phát triển thì ngành Cơng nghệ thơng tin nói
chung và Tin học nói riêng là một ngành được ứng dụng trong nền kinh tế toàn
cầu đất nước chúng ta.
Muốn một tiết dạy thành cơng thì phụ thuộc vào nhiều vấn đề như: Chuẩn
bị kiến thức, dụng cụ dạy học, các mẫu bài tập về lập trình, những phương tiện
dạy học cơ bản, muốn thành cơng một tiết dạy tại phịng máy vi tính, thì giáo
viên cần chuẩn bị nhiều vấn đề.
Mơn Tin học luôn nhận được sự quan tâm của các cấp giáo dục cũng như
học sinh, với đặc điểm là môn học tiếp cận công nghệ thông tin nên đa phần các
em rất hào hứng với môn này.
Tuy nhiên một bộ phận phụ huynh chưa thật quan tâm đến bộ môn Tin học.
Nhiều học sinh chỉ thấy học Tin để vui trước mắt nhưng quên đi cái lâu dài, và
kiến thức chưa nâng cao. Các kiến thức trong sách giáo khoa chưa thể nâng cao
tư duy lập trình đầy đủ cho các em.
Chuyên đề này được thực hiện đối với môn tin học lớp 8 (phần lập trình cơ
bản) trong phần: Câu lệnh lặp (xác định); Lặp với số lần chưa biết trước; Làm
việc với dãy số và Kiểu dữ liệu mảng.
Qua việc giải quyết bài toán sắp xếp sẽ giúp các em nâng cao kỹ năng lập
trình, hình thành tư duy lập trình “sâu”, nhạy bén, sáng tạo. Đồng thời dạng bài
tốn sắp xếp trong mơn lập trình Pascal Tin học 8 là dạng bài tập lập trình cơ
bản, thường thấy trong các đề thi học sinh giỏi, thông qua việc nâng cao kiến
thức ở phần này có thể tìm ra cũng như rèn luyện đội tuyển mũi nhọn của

trường, lớp.


III. CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH ĐỀ GIẢI QUYẾT VẤN ĐỀ
Bài tốn sắp xếp đã được trình bày trong các tiết học mơn lập trình Pascal
lớp 8, tuy nhiên bên cạnh kiểu sắp xếp cơ bản cịn có những kiểu sắp xếp khác,
các cách này vừa giúp học sinh nâng cao kỹ năng, vừa tạo tư duy lập trình tốt
hơn:
Một số thuật toán sắp xếp:
1. Sắp xếp nổi bọt (Bubble Sort)
2. Sắp xếp với bước giảm dần (Shell Sort)
3. Sắp xếp vun đống (Heap Sort)
1. Sắp xếp nổi bọt (Bubble Sort)
Ý tưởng:
Xuất phát từ đầu dãy hay cuối dãy và tiến hành đổi chỗ cặp phần tử kế cận
nhau để đưa phần tử nhỏ hơn hoặc lớn hơn về vị trí cao nhất hay thấp nhất trong
dãy. Sau khi đã chuyển vị trí này khơng xét nữa => Lặp lại q trình này khi dãy
khơng cịn phần tử nào nữa
 Thuật toán:
Bước 1: i = 0
Bước 2: j = n-1 //duyệt từ cuối đến ptử thứ i
Trong khi j>i thực hiện
nếu a[j] < a[j-1] thì hốn đổi hai phần tử
j=j-1
Bước 3: i=i+1
Nếu i>=n-1 => Hết dãy và dừng thuật toán
Ngược lại lặp lại bước 2
 Cài đặt:

Type mang = array[1..20] of integer;



Function BubbleSort(a:mang, n:integer): integer;
Var i, j, tg: integer;
Begin
Writeln(‘----SAP XEP NOI BOT ----’);
For i≔1 to n do
For j≔n downto i+1 do
If a[j]Begin
Tg≔a[j];
A[j]≔a[j-1];
A[j-1]≔tg;
End;
End;
 Ví dụ minh họa:
 Cho dãy số a:
a=

2

12

8

5

Yêu cầu: Sắp xếp dãy tăng dần

1


6

4

15



2. Sắp xếp với bước giảm dần (Shell Sort)
 Ý tưởng:
Dựa trên ý tưởng sắp xếp theo phương pháp chèn
- Phân chia dãy ban đầu thành những dãy con các phần tử ở cách nhau h vị trí
- Dãy ban đầu : a1 a2 … an được xem như sự xen kẽ các dãy con sau :
- Dãy con thứ nhất : a1 ah+1 a2h+1 …
- Dãy con thứ hai : a2 ah+2 a2h+2 …
….
- Dãy con thứ h

: ah a2h a3h …

 Giải thuật:
Bước 1 : Chọn k khoảng cách h[1], h[2],…,h[k] và i=1.
Bước 2 : Phân chia dãy ban đầu thành các dãy con cách nhau h[i] khoảng
cách. Sắp xếp từng dãy con bằng phương pháp chèn trực tiếp.
Bước 3 : i=i+1;
Nếu i>k : dừng.
Nếu i<=k : lặp lại bước 2.

 Cài đặt:

Giả sử chọn được dãy độ dài h[1], h[2],…,h[k],

Procedure ShellSort (a: mang, n:integer, h:mang, k: integer);
Var

step, i, j, x, len: integer;

Begin
for step:=0 to k-1 do
Begin
Len:=h[step];
for i:=len to n-1 do


Begin
X:=a[i];
J:=i-len;
while (x<a[j]) and (j>-1)do //sắp xếp dãy con chứa x
Begin {bằng phương pháp chèn trực tiếp}
a[j+len]:=a[j];
j:=j-len;
End;
a[j+len]:=x;
End;
End;
End;


3. Sắp xếp vun đống (Heap Sort)
 Định nghĩa Heap:

- Giả sử sắp xếp giảm dần, khi đó Heap được định nghĩa là một dãy các phần tử
a1, a2, ..., an thỏa các quan hệ :
ai <= a2i.
ai <= a2i+1
{(ai, a2i), (ai, a2i+1) là các cặp phần tử liên đới}
- Và có các tính chất sau :
Tính chất 1: Phần tử a1 (đầu Heap) ln là phần tử nhỏ nhất trong
Heap
Tính chất 2: Cắt bỏ một số phần tử về phía phải của Heap thì dãy
con còn lại vẫn là một Heap.


 Ví dụ:

 Thuật tốn:
Giải thuật Heapsort trải qua 2 giai đoạn:
- Giai đoạn 1:Hiệu chỉnh dãy số ban đầu thành heap;
- Giai đoạn 2:Sắp xếp dãy số dựa trên heap:
Bước 1: Ðưa phần tử nhỏ nhất về vị trí đúng ở cuối dãy.
Hoán vị(a1,aN);
Bước 2:Loại bỏ phần tử nhỏ nhất ra khỏi dãy:
N = N-1;
Hiệu chỉnh phần còn lại của dãy từ a1, a2,…, an thành một
heap.
Bước 3: Nếu N > 1 (heap còn phần tử ): lặp lại bước 1.
Ngược lại: Dừng



* Cài đặt:


Type mang = array[1..20] of integer;
{----Thủ tục hỗ trợ----}
Procedure Shift(a: mang; l,r: integer);
Var

x, i, j, cont: integer;


I: = l; j: = 2*i+1;
cont : = 1;

//(ai,aj),(ai,aj+1)là các phần tử liên đới

x: = a[i ];
while ((j<=r) and (cont)) do
Begin
If (j
{nếu có đủ 2 phần tử liên đới}

If (a[j]>a[j+1) then {xác định phần tử liên đới nhỏ nhất
a[j]}
J:=j+1;
{thỏa quan hệ liên đới ,dừng hiệu chỉnh}
if (a[j]>x) then
cont: = 0
else
Begin
hoanvị(a[i],a[j]);

i: = j;

{xét tiếp khả năng hiệu chỉnh lan truyền}

j:=2*i+1;
End;
End;
End;
Thủ tục hiệu chỉnh dãy ban đầu a[1], a[2],…, a[n] thành Heap:
Procedure CreateHeap(a:mang, n:integer);
Var i:integer;
Begin
i := n div 2;
while (i > 0) do


Begin
Dec(i);
Shift(a,i,n-1);
End;
• Sắp xếp dãy a[1], a[2], …,a[n] bằng Heap.
void Heapsort(float a[ ],int N)
Var r: integer;
Begin
r := n-1;
while (r > 0) do
Begin
Hoanvi(&a[0],&a[r]);
Dec(r);
Shift(a,0,r);

End;
End;
Trên đây là một số phương pháp sắp xếp thông dụng được áp dụng trên
tập dãy số. Mỗi phương pháp đều có ưu, nhược và độ phức tạp điểm riêng, tùy
theo khả năng, theo sở thích và đặc biệt tùy theo từng bài tốn cụ thể các em có
thể chọn cho mình một cách giải ngắn gọn mà hiệu quả nhất.
IV. KẾT QUẢ ĐẠT ĐƯỢC
Sau 1 năm học thực hiện chuyên đề (năm học 2017–2018), kinh nghiệm
Hướng dẫn học sinh giải bài tốn sắp xếp đã giúp tơi có được những kết quả
đáng ghi nhận như:


- Đại đa số học sinh biết cách thực hiện và thực hiện được bài toán sắp
xếp dữ liệu trên kiểu dữ liệu mảng
- Học sinh khơng cịn sợ bài tốn sắp xếp nữa, nhiều học sinh cịn mở
rộng áp dụng sắp xếp Họ và tên theo nguyên tắc sắp xếp a, b, c,… và trong một
số bài toán quản lý thông tin khác.
- Đặc biệt các em nhận thấy rõ một chân lí: Máy tính là một cơng cụ lao
động tuyệt với nhưng tất cả những khả năng mà máy tính có được đều do con
người chỉ dẫn cho nó thơng qua các câu lệnh. Và bây giờ chính các em là người
viết ra các câu lệnh đó. Đây là thành cơng lớn nhất mà tơi thu được vì đó chính
là niềm say mê của các em đối với môn học.
Sau một thời gian thực hiện chuyên đề kiến thức và kỹ năng thực hành
của học sinh tiến bộ lên rõ rệt, điều này được thể hiện rõ nhất trong các bài kiểm
tra (lý thuyết và thực hành), kết quả kiểm tra ngày một nâng lên.
Kết quả cụ thể như sau:
Giỏi

Khá


Trung bình

Yếu

30%

50%

18%

2%

Năm học 2017 - 2018
(Trong, sau khi thực
hiện chuyên đề)

C. PHẦN KẾT LUẬN
Vấn đề giải bài tập cho học sinh ở tại trường THCS hiện nay còn nhiều vấn
đề cần quan tâm, thực trạng giáo viên chỉ chú trọng một số đối tượng học sinh
học giỏi còn phần nhiều các đối tượng khác thì cần có sự quan tâm, cũng như
người giáo viên chưa chỉ cho các em học sinh phương pháp làm thế nào để phát
triển được tính tư duy, sáng tạo trong cách làm bài tập trong bảng tính điện tử
Excel.
Ngồi việc ln bồi dưỡng bản thân nâng cao trình độ chun mơn nghiệp
vụ, tơi xin đề xuất một số kiến nghị:
- Các cấp quản lí Giáo Dục cần mở các chuyên đề bồi dưỡng cho giáo viên
học tập và rút kinh nghiệm.


- Cần cung cấp trang thiết bị dạy học kịp thời để dạy học cho tốt.

- Mở nhiều chuyên đề hoặc hình thức sinh hoạt câu lạc bộ thực hành tin
học để giáo viên tham gia và học hỏi lẫn nhau.
- Giáo viên cho nhiều dạng bài tập, tuỳ tình hình đối tượng học sinh trình
độ của học sinh, tuỳ đối tượng mà có các dạng bài tập để tác dụng tính tư duy, tị
mị, sáng tạo của học sinh nhằm đem lại hiệu quả cao nhất.
- Dạng bài tập đi từ dễ đến khó, từ khách quan sinh động đến tư duy trừu
tượng , làm cho học sinh khắc sâu và tái hiện kiến thức một cách thiết thực và
nhanh chóng.
- Lồng ghép các dạng bài tập, nhằm rèn kỹ năng phát triển tư duy, logic,
suy luận
- Đưa phương tiện trực quan trong dạy học để học sinh có thể tự tìm tịi,
khai thác, lĩnh hội kiến thức phát huy vai trò chủ động, đặc biệt tạo những ấn
tượng, ghi nhớ, khắc sâu, nhớ kĩ, tái hiện kiến thức đảm bảo tính khoa học, khéo
léo nhằm khơi dậy lịng ham học, kham phá khoa học của học sinh.
-Trong quá trình giảng dạy có thể kết hợp việc lồng ghép các trò chơi
nhằm tạo cho học sinh hứng thú trong học tập, đồng thời khắc sâu kiến thức,
nắm bắt thông tin tốt hơn.
Trên đây là một số kinh nghiệm nhỏ của bản thân. Kính mong sự góp ý
của các bạn đồng nghiệp và quý thầy cô giáo.
Lùng Sui, ngày 05 tháng 4 năm 2018
NGƯỜI VIẾT



×