SKKN sử dụng thuật toán lùa bò vào chuồng để giải các bài toán đếm

25 21 0
SKKN sử dụng thuật toán lùa bò vào chuồng để giải các bài toán đếm

Đ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

I ĐẶT VẤN ĐỀ I.1 Lý chọn đề tài Sự phát triển vũ bão Công nghệ Thông tin Truyền thơng đóng vai trị khơng nhỏ phát triển chung nhân loại Đảng nhà nước xác định rõ ý nghĩa tầm quan trọng tin học, Công nghệ Thông tin Truyền thông yêu cầu đẩy mạnh ứng dụng Công nghệ Thông tin, đào tạo hệ trẻ động, sáng tạo, nắm vững tri thức khoa học công nghệ để làm chủ hồn cảnh cơng tác hoạt động xã hội thời kỳ công nghiệp hóa đại hóa đất nước Chính xác định tầm quan trọng nên nhà nước đưa môn tin học vào nhà trường từ tiểu học học sinh tiếp xúc môn tin học để làm quen dần với lĩnh vực công nghệ thơng tin, tạo móng ban đầu để học phần nâng cao Đối với em học sinh, nói hành trang để giúp em vững bước tới tương lai - tương lai thời đại công nghệ thông tin bùng nổ! Trong chương trình Tin học THPT lớp 10 học sinh giới thiệu kiến thức đại cương tin học, lớp 11 học sinh giới thiệu lập trình, lớp 12 học sinh học sở liệu Đặc biệt, chương trình Tin học lớp 11 phần cho khó cho Thầy Cơ giáo học sinh, phải làm để học sinh hiểu ngơn ngữ lập trình, để từ lựa chọn thiết kế thuật tốn Chương trình tin học lớp 11 nhằm rèn luyện tư thuật toán cho học sinh, rèn luyện kĩ lập trình, tính kiên trì, tỉ mỉ cẩn thận Đối với học sinh phải làm quen với lối suy nghĩ logic với hoạt động máy tính, mà lại lối suy nghĩ hồn tồn khác với mơn học khác Từ thực tiễn giảng dạy học sinh đại trà học sinh đội tuyển học sinh giỏi Tin học trường THPT tơi thấy rằng, học sinh gặp khó khăn chuyển lời giải toán từ toán sang ngơn ngữ lập trình Đặc biệt việc phân tích tốn, nhận biết tốn giải phương pháp nào, cỏ lời giải tối ưu hay không? Để hệ thống lại chuyên đề bồi dưỡng học sinh giỏi (HSG) Tin học mà dạy nhiều năm qua, đồng thời qua trình nghiên cứu, giảng dạy, tham khảo ý kiến đồng nghiệp, tơi thấy số tốn tin học có liên quan đến việc đếm Chính tơi chọn viết đề tài chuyên đề “Sử dụng thuật toán “lùa bị vào chuồng” để giải tốn đếm” I.2 Mục tiêu nghiên cứu "Đếm" công việc quan trọng đơn giản mà làm thường ngày, điều khơng cần phải bàn đến làm gì? Điều đáng nói cơng việc nhàm chán lại chứa bao điều thú vị, gặp toán yêu cầu ta phải "đếm" "Đếm" đơn đếm 1, 2, 3, mà cần người đếm khéo léo có chút kỹ thuật Bên cạnh để giúp em học sinh có kiến thức khoa học bản, đại, tiến tiến, có tính tự lập khả sáng tạo, nhận thức mức độ cao, tư tốt lập trình Các phương pháp đếm đơn giản vấn đề mà người lập trình tin học cần phải nắm vững I.3 Nhiệm vụ nghiên cứu Trước hết thực đổi phương pháp giảng dạy Tin học làm cho học sinh tìm kết sáng tạo, lời giải hay số “dạng tốn tin có liên quan đến việc đếm”; giúp thân nắm vững tư thuật tốn, khả lập trình, đồng thời để trao đổi học tập kinh nghiệm với q thầy giáo nhóm Tin học nhà trường nói riêng q thầy giảng dạy mơn Tin học ngành nói chung I.4 Đối tượng nghiên cứu Trong nghiên cứu này, học sinh chọn em học sinh học môn Tin học khối 10, khối 11, học sinh thành viên đội tuyển HSG môn Tin học, số giáo viên đứng lớp dạy Tin học trường THPT địa bàn I.5 Các phương pháp nghiên cứu * Phương pháp suy luận, tổng hợp: kết hợp từ nhiều nguồn tài liệu tham khảo tác giả tra cứu mạng internet với đề thi HSG rút kinh nghiệm, hệ thống lại kiến thức, mở hướng * Phương pháp trị chuyện – vấn: trao đổi tâm tình với nhiều HSG để nắm tình hình việc giải toán tin dãy số (mảng) * Phương pháp khảo sát: thân tham gia giảng dạy lớp, đội tuyển HSG, kỳ tập huấn; tham khảo thầy cô, đồng nghiệp giảng dạy đội tuyển nhiều năm nên có tìm hiểu thêm phương pháp làm em học sinh * Phương pháp phân tích lý luận: phân tích giúp học sinh nắm thật rõ chất vấn đề, lựa chọn phương pháp giải cho phù hợp AI NỘI DUNG ĐỀ TÀI II Lịch sử vấn đề nghiên cứu Trong năm liên tiếp dạy bồi dưỡng HSG môn Tin Học lớp 10, 11, 12 thi HSG cấp Tỉnh, tham khảo ý kiến đồng nghiệp chuyên dạy bồi dưỡng đội tuyển trường, ngành Tỉnh bạn, trường THPT Chuyên, rút điều “công việc đếm quan trọng dạy lập trình”, tơi mạnh dạn chọn viết đề tài: Sử dụng thuật toán “lùa bị vào chuồng” để giải tốn đếm II Cơ sở lý luận đề tài Kết hợp giảng chuyên đề bồi dưỡng HSG cá nhân tài liệu tham khảo để phân tích, tổng hợp, hệ thống II Thực trạng vấn đề nghiên cứu Đa số HSG tin ngại, sợ giải tốn tin có liên quan đến việc đếm; lúng túng trình phân tích, tổ chức liệu, tìm thuật tốn hiệu để hiểu chất vận dụng kiến thức cách thích hợp AI Nội dung nghiên cứu kết nghiên cứu A NỘI DUNG NGHIÊN CỨU Tư tưởng thuật toán xây dựng dựa suy nghĩ thực tế để đếm số lượng bò vùng xác định người ta phải tìm cách lùa chúng vào chuồng (để chúng khỏi chạy rơng) cho dễ đếm Đương nhiên bị loại phải lùa vào chuồng để dễ phân biệt lùa vào chuồng tốt Tương tự vậy, muốn giải tốn đếm đối tượng ta dùng cấu trúc liệu hợp lý (thường dùng kiểu mảng kiểu trỏ) với ý nghĩa giống “chuồng” để lưu đối tượng, phần tử mảng tương ứng với chuồng Trên sở ta dễ dàng thực mục đích thực thao tác đếm Để hiểu rõ thuật tốn ta xét ví dụ sau: “Viết chương trình nhập từ bàn phím xâu ký tự S thơng báo hình số lần xuất chữ tiếng Anh S (không phân biệt chữ hoa hay chữ thường)” – Bài Bài tập thực hành sách Tin học 11 - trang 73 Rõ ràng với tốn ta duyệt toàn xâu S lần duyệt ta thực thao tác đếm chữ Sau 26 lần duyệt tương ứng với 26 chữ ta thu tồn kết Tuy nhiên, việc duyệt xâu tương đối chậm xâu văn cho dài nên thời gian không chấp nhận Ta vận dụng thuật tốn “lùa bị vào chuồng” cách sử dụng mảng tĩnh A:array[′A′ ′Z′] of Longint; với ý nghĩa sau: giá trị A[c] c thuộc [′A′ ′Z′] lưu số lần xuất ký tự c file văn Mảng A khởi tạo với tất giá trị 0, duyệt xâu ta đọc ký tự xâu biến trung gian ch đó, tăng giá trị mảng vị trí tương ứng có số ch lên đơn vị qua câu lệnh: A[ch]:=A[ch] + Như vậy, toán giải với lần duyệt xâu Sau khảo sát số ví dụ điển hình vận dụng thuật tốn Bài 1: Đếm bị Tên chương trình: DEMBO.* Bài tốn đặt giả sử cánh đồng rộng thả nhiều bò (N con), bị đeo thẻ có số hiệu ngun dương (là số tháng tuổi nó) Tất nhiên, hai bị tháng tuổi đeo thẻ có số hiệu Làm để đếm loại bị có nhiều nhất? Bài tốn phát biểu lại sau: + Nhập từ bàn phím số nguyên dương N (0 < N ≤ 200) phần tử mảng chiều A(N) có giá trị nguyên dương (0 < A[i] ≤ 100) + Giá trị xuất nhiều A xuất lần? + Ví dụ: A(12) = {2, 3, 2, 4, 5, 6, 2, 6, 7, 1, 6, 2} A(12) có số phần tử giá trị nhiều Số lượng phần tử Thuật tốn “Lùa bị vào chuồng” Để giải tốn người ta dùng thuật tốn “lùa bị vào chuồng” gồm bước: Bước 1: Đóng dãy chuồng bị đánh số chuồng số tự nhiên liên tiếp từ đến max (max số tháng tuổi bò già nhất), ban đầu chuồng chưa có bị - Bước 2: Lùa bị vào chuồng có số hiệu số thẻ - Bước 3: Duyệt dãy chuồng bị tìm chuồng có nhiều bị Áp dụng thuật tốn vào tập: + Bước 1: Giả sử bò thứ i có tháng tuổi a[i] (1 ≤ i ≤ n) Coi mảng b(n) dãy chuồng bò, b[x] số lượng bị (có x tháng tuổi) chuồng có số hiệu x, ban đầu phần tử mảng b(n) + Bước 2: Con bị có tháng tuổi a[i] phải vào chuồng bị có số hiệu a[i] Thêm bò vào chuồng a[i] tương ứng với lệnh inc(b[a[i]]) + Bước 3: Duyệt mảng b, tìm số phần tử lớn Chương trình tham khảo: Code Pascal Const max = 200; Var N: integer; A: array[1 max] of byte; B: array[1 max] of byte; maxsl, i, li: integer; BEGIN Write('Nhap N = '); Readln(N); For i := to N Begin Write('A[', i, ' ] = '); Readln(A[i]); End; Fillchar(B, sizeof(B), 0); maxsl := 0; {Tao day chuong bo rong chua co bo} For i := to N inc(B[A[i]]); {Tang them bo vao chuong co so hieu A[i]} For i := to max {Duyet day chuong tim chuong co nhieu bo nhat} if B[i] > maxsl then Begin maxsl := B[i]; li := i; End; Write('So ', li, ' co so luong lon nhat la ', maxsl); return 0; } Readln; END Bài 2: Nhập vào số nguyên dương N (2 ≤ N ≤ 10000) dãy a1, a2,….an phần tử nguyên dương (ai ≤ 32000) Cho biết dãy có phần tử khác Ý tưởng: Để làm ta dùng thuật tốn “lùa bị vào chuồng”, phần tử nhốt chung chuồng, có chuồng có nhiêu phần tử khác dãy ban đầu Ta đóng dãy chuồng C, đánh số chuồng từ 1, 2….32000 ( số nguyên dương, ai

Ngày đăng: 02/08/2021, 22:31

Từ khóa liên quan

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

Tài liệu liên quan