Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
40,34 KB
Nội dung
MỤC LỤC MỞ ĐẦU 1.1 Lí chọn đề tài 1.2 Mục đích nghiên cứu .2 1.3 Đối tượng nghiên cứu 1.4 Phương pháp nghiên cứu .2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM .3 2.1 Cơ sở lý luận 2.1.1 Thuật toán xếp bọt (bubble sort) 2.1.2 Thuật toán xếp nhanh (quick sort) .4 2.1.3 Thuật toán xếp phân phối .5 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm .6 2.3 Các giải pháp sử dụng để giải vấn đề 2.3.1 Một số tập áp dụng thuật toán xếp bọt .6 2.3.2 Một số tập áp dụng thuật toán xếp nhanh 11 2.3.3 Một số tập áp dụng thuật toán xếp phân phối 16 2.4 Hiệu đề tài 17 KẾT LUẬN .19 3.1 Kết luận .19 3.2 Kiến nghị .19 MỞ ĐẦU 1.1 Lí chọn đề tài Trong trình dạy học trường THPT Tĩnh Gia 1, nhiều năm học nhà trường phân công giảng dạy khối 11 dạy bồi dưỡng học sinh giỏi Tôi nhận thấy để học sinh đạt kết cao việc học bồi dưỡng giáo viên đóng vai trị quan trọng việc định hướng chuyên đề hướng dẫn học sinh thực Một chuyên đề mà học sinh cần học tập rèn luyện nhiều lập trình thuật tốn xếp Bước đầu học sinh lúng túng việc xác định vận dụng cho hợp lý thuật toán xếp để toán giải thuật toán tối ưu Nhằm nâng cao chất lượng dạy học môn Tin học 11, bồi dưỡng học sinh giỏi Vì tơi chọn đề tài: “Vận dụng số thuật toán xếp vào giải tập tin học bồi dưỡng học sinh giỏi” 1.2 Mục đích nghiên cứu - Nghiên cứu tổng quan mơ thuật toán - Trong phạm vi đề tài tơi muốn nghiên cứu số tập có áp dụng thuật toán xếp, nhằm giúp học sinh hình thành kỹ tư duy, phân tích tốn áp dụng thuật tốn xếp giải toán tin học với vấn đề thường gặp lập trình 1.3 Đối tượng nghiên cứu - Học sinh giỏi lớp 11 trường THPT Tĩnh Gia - Một số toán áp dụng thuật toán xếp 1.4 Phương pháp nghiên cứu - Phương pháp nghiên cứu xây dựng sở lý thuyết - Kỹ thuật phân tích thuật tốn - Tham khảo tài liệu tài liệu mở mạng internet phân tích có hệ thống dạng tập theo nội dung đề NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 Cơ sở lý luận 2.1.1 Thuật tốn xếp bọt (bubble sort) Ví dụ tốn: Cho dãy A gồm có N phần tử a 1,a2,…an Hãy xếp dãy A thành dãy không giảm Ý tưởng thuật tốn: Là tìm đổi chỗ cặp phần tử kề chưa thứ tự Có thể tiến hành từ bên trái sang từ bên phải sang không tồn cặp sai thứ tự ( dãy xếp) Mô tả ý tưởng: - Lượt 1: Ta xét từ cuối dãy, gặp hai phần tử kề mà sai thứ tự đổi chỗ chúng cho Sau lượt 1, phần tử nhỏ thứ đưa vị trí - Lượt 2: Ta xét từ cuối dãy ( đến phần tử thứ 2), gặp phần tử kề mà sai thứ tự đổi chỗ chúng cho Sau lượt 2, phần tử nhỏ thứ hai đưa vị trí - Lượt i: Ta xét từ cuối dãy ( đến phần tử thứ i), gặp phần tử kề mà sai thứ tự đổi chỗ chúng cho Sau lượt i, phần tử có khố nhỏ thứ i đưa vị trí i - Xong lượt thứ n -1 dãy xếp xong Chương trình: Procedure boubblesort; Var i,j,tg: integer; Begin For i:=1 to n-1 For j:=n downto i+1 If a[j-1]>a[j] then Begin Tg:=a[j]; A[j]:=a[j-1]; A[j-1]:=tg; End; End; Thuật tốn có độ phức tạp: thời gian thực O(N2) [1] 2.1.2 Thuật tốn xếp nhanh (quick sort) Ví dụ tốn: Cho dãy A gồm có N phần tử a 1,a2,…an Hãy xếp dãy A thành dãy không giảm Ý tưởng thuật toán: - Sắp xếp dãy coi xếp đoạn từ số đến số N - Để xếp đoạn dãy, đoạn có phần tử dãy xếp, ngược lại ta chọn phần tử x đoạn để làm chốt, phần tử nhỏ chốt xếp vào vị trí trước chốt, phần tử lớn chốt xếp vào vị trí đứng sau chốt - Sau phép hốn chuyển đoạn xét chia làm hai đoạn mà phần tử phần đầu đoạn nhỏ chốt phần tử sau đoạn lớn chốt - Tiếp tục kiểu với đoạn ta đoạn cho xếp theo chiều tăng dần Ý tưởng thuật tốn mơ tả cụ thể sau: Giả sử phải xếp đoạn có số từ L đến H: - Chọn x phần tử ngẫu nhiên đoạn L H ( chọn x phần tử đoạn, nghĩa x=a[(L+H) div 2]) - Cho i chạy từ L sang phải, j chạy từ H sang trái; phát cặp ngược thứ tự: i≤j a[i]≥ x≥a[j] đổi chỗ hai phần tử đó; i>j lúc dãy tình trạng: phần tử đoạn L i≤x; phần tử đoạn j H≥x - Tiếp tục xếp với đoạn L j i H Thủ tục Quicksort(L,H) sau dùng để xếp đoạn từ L tới H Để xếp dãy số ta gọi Quicksort(1,n) Procedure Quicksort (L,H:longint); Var i,j: longint; X,tg: longint; Begin i:=L; J:=H; X:=a[(L+H) div 2]; Repeat While a[i]x dec(j); Ij; If L