- Sử dụng kết hợp các thuật toán: Sử dụng kĩ thuật mảng nhớ tổng tiền tố;
5. Tổ chức thi thử, đánh giá, kinh nghiệm làm bài thi.
5.1 Tổ chức thi thử, đánh giá học sinh:
1) Tổ chức thi thử.
Hàng năm đơn vị chúng tôi đều kết hợp các trường trong huyện tổ chức thi thử, chung đề chung địa điểm để tập duyệt từ tâm lý đến kiến thức cho học sinh, đồng thời đánh giá mức độ của học sinh so với tổng quan các trường trong huyện.
Ngoài ra, trường chúng tôi thường tổ chức thi thử mỗi tháng một lần. Giáo viên trực tiếp bồi dưỡng hoặc đồng nghiệp cùng bộ môn của trường ra đề thi, chấm thi. Các khâu thực hiện đều đảm bảo đúng quy trình tổ chức thi.
* Ra đề thi:
- Đề thi phải bám sát cấu trúc đề mà Sở GD&ĐT ban hành.
- Đề thi cần phải có độ phân hóa tốt để đánh giá năng lực học sinh.
- Độ khó của đề thi phụ thuộc vào từng giai đoạn ôn tập và tăng dần theo quá trình đào tạo.
* Viết chương trình tham khảo và tạo bộ test chấm.
- Để tạo ra bộ test chấm cần có chương trình chuẩn giải quyết bài tốn. - Sau khi có chương chuẩn, ta sử dụng chương trình tạo test tự động. Lưu ý phần code để tạo test đầu vào phải đúng cấu trúc tệp inp như đề ra.
- Chỉnh sửa tệp đầu vào để quét hết tất cả các tình huống của bài toán, đảm bảo số lượng test đúng như ràng buộc dữ liệu đầu vào cho trong bài toán, chạy chương trình để tạo tệp đầu ra tương ứng.
* Chấm thi: Sử dụng phần mềm Themis chấm bài tự động theo bộ test đáp áp đã
tạo. Lưu ý cấu hình bài thi đúng đề ra.
2) Đánh giá học sinh..
Để đánh giá đúng năng lực của học sinh, chúng ta cần theo dõi cả quá trình học tập và rèn luyện. Ta có thể đánh giá năng lực lập trình của học sinh ở mức độ cơ sở và nâng cao, thể hiện ở các mặt:
Tiêu chí
đánh giá Mức cơ sở Mức nâng cao
Kiến thức về thuật toán:
- Nắm được các thuật tốn cơ bản: tìm max, min, tính ước chung lớn nhất, kiểm tra tính nguyên tố, sắp xếp, tìm kiếm…
- Biết kết hợp nhiều loại thuật toán cho một lớp bài toán với độ phức tạp khác nhau Kiến thức về cấu trúc dữ liệu - Hiểu các cấu trúc dữ liệu cơ sở mà NNLT lập trình cung cấp. - Biết vận dụng các cấu trúc dữ liệu cơ sở để tổ chức dữ liệu đặc thù cho từng lớp bài toán.
- Biết cách tổ chức và xử lý mảng, xâu, vecto, pair…
Lập trình giải quyết các bài
tốn.
- Tổ chức vào / ra chuẩn.
- Biết cách triển khai các thuật toán khơng địi hỏi hiệu quả thuật toán cao.
- Có khả năng đọc, hiểu tốt đề bài và đoán nhận đúng thuật toán cần áp dụng.
- Giải được các bài tốn địi hỏi tổ chức dữ liệu phức tạp.
- Biết cách hiện thực hóa các thuật tốn có độ phức tạp thấp.
- Khơng địi hỏi kết hợp các loại thuật toán và tiểu xảo lập trình hoặc CTDL đặc biệt.
- Biết thiết kế chương trình một cách có cấu trúc
- Biết cách hiệu chỉnh, tự kiểm tra và đánh giá chương trình của mình.
Trong thi thử, cần căn cứ bảng tiêu chí này để ra đề thi phù hợp với trình độ học sinh ở các giai đoạn bồi dưỡng khác nhau.
Khi đánh giá kết quả bài thi của học sinh, nếu chỉ dựa vào điểm số trong bài thi thử là chưa đủ. Chúng ta cần đọc code của học sinh để phân tích, đánh giá bài làm của học sinh, để thấy được ưu điểm, nhược điểm rồi hướng dẫn học sinh bổ sung, khắc phục để ngày càng tiến bộ.
5.2 Một số kinh nghiệm làm bài thi.
Chuẩn bị tốt kiến thức và tâm lý:
Để đạt kết quả cao trong kỳ thi trước tiên chúng ta cần chuẩn bị tốt về mặt kiến thức và tâm lý. Các kỳ thi học sinh giỏi thường có lượng kiến thức trong một miền giới hạn nhất định, hãy chuẩn bị tốt những kiến thức đó, điều này sẽ giúp các em cảm thấy thoải mái và tự tin hơn trong kỳ thi. Khi gặp đề thi khó, đừng vội lo sợ, vì mọi thí sinh đều bình đẳng trước đề thi. Nếu dễ thì tất cả đều dễ, nếu khó thì ai cũng khó như nhau. Cho nên trong bất cứ hoàn cảnh nào, các em cũng phải luôn tự tin vào năng lực của bản thân và biết cách phát huy tiềm năng vốn có của mình để làm bài một cách linh hoạt và hiệu quả nhất.
Kinh nghiệm làm bài thi.
1) Đọc kỹ đề bài, xác định mức độ khó của mỗi bài.
Nên dành một khoảng thời gian để suy nghĩ tất cả các bài tốn, nhận định các bài có khả năng giải được, sắp xếp theo thứ tự từ dễ đến khó, ước lượng thời gian cần thiết để làm mỗi bài từ đó quyết định làm bài nào trước, bài nào sau. Nên ưu tiên làm bài dễ, tốn ít thời gian trước, bài khó làm sau.
2) Giải lần lượt các bài theo thứ tự đã sắp xếp.
Khi tiến hành giải các bài toán cụ thể, phải đảm bảo làm câu nào chắc câu đó. Cẩn thận từng bước, tuân thủ tốt các bước thiết kế và xây dựng chương trình.
Bước 1. Xác định bài toán:
- Đề tin học thường được phát biểu gắn với các tình huống thực tiễn khác nhau, nên việc đọc đề, phân tích đề để xác định bài tốn khơng hề dễ. Chúng ta cần chú trọng bước này vì nếu khơng làm kỹ có thể dẫn đến sai cả bài toán.
- Đọc kỹ đề nhiều lần, đưa ra càng nhiều bộ test càng tốt. Mỗi lần bám đề để tìm đầu ra là một lần giúp mình hiểu rõ hơn về đề bài. Rất có thể trong quá trình này chúng ta phát hiện ra mình đã từng hiểu nhầm đề để kịp thời chỉnh sửa.
- Cần để ý rằng các test tiêu biểu khơng chỉ là các test về các tình huống của bài tốn mà ngồi ra trong q trình triển khai giải thuật cũng có thể dẫn đến các trường hợp đặc biệt mà chương trình khơng chưa giải quyết được, cần giám sát được những trường hợp này.
- Các test tạo ra trong q trình phân tích bài tốn cần ghi chép lại để khi viết code xong ta dùng để kiểm thử giúp tiết kiệm thời gian.
Bước 2. Lựa chọn, thiết kế thuật toán
Các đề thi học sinh giỏi mơn Tin học có u cầu ngày càng cao cả về độ khó lẫn thời gian thực hiện chương trình. Chúng ta thường thấy trong các bài thi có ghi yêu cầu thời gian thực hiện là 1 giây và việc cho điểm ứng với miền giá trị của tham số. Ví dụ:
Lưu ý: Có 50% số test ứng với 50% số điểm của bài có n < 1000. Hay ràng buộc: 60% số tests ứng với 30% số điểm của bài có 1 < n ≤ 103
40% số tests ứng với 40% số điểm của bài có 103 < n ≤ 108. Cùng một bài tốn, có thể có rất nhiều thuật tốn giải khác nhau để giải, có thuật tốn chỉ giải được bài toán ở mức cơ sở (tương ứng với miền giá trị tham số nhỏ), có thuật tốn giải được ở mức nâng cao (ứng với miền giá trị tham số lớn). Vì vậy việc phân tích và lựa chọn thuật tốn là vơ cùng quan trọng.
- Nên tìm ra nhiều ý tưởng giải quyết cho bài tốn, sau đó phân tích, đánh giá xác suất đúng đắn của thuật toán, ước lượng và so sánh độ phức tạp của các ý tưởng đó để tìm ra thuật tốn tối ưu.
- Nếu khơng tìm được thuật tốn tối ưu giải được với miền giá trị lớn thì chuyển sang hướng cài đặt thật toán giải bài toán ở mức cơ sở. Sau đó nếu cịn dư thời gian có thể quay lại cải tiến tiếp.
- Trong một số trường hợp, nếu ta khơng tự tin về việc cài đặt thuật tốn tối ưu thì nên lựa chọn các thuật toán khác nhau cho các miền dữ liệu đầu vào. Việc làm này để đảm bảo an tồn khi có thuật tốn tối ưu mà việc triển khai giải thuật chưa tốt cũng không ảnh hưởng đến điểm thi ở các test nhỏ.
Bước 3. Viết chương trình.
- Việc viết chương trình bao gồm cả việc lựa chọn cấu trúc dữ liệu để diễn tả thuật tốn. Có những thuật tốn chỉ thích ứng và hiệu quả với một số cách tổ chức dữ liệu nhất định, đối với các cách tổ chức dữ liệu khác thì khơng có hiệu quả, thậm chí khơng thể thực hiện được.
- Sau khi xác định cấu trúc dữ liệu cần dùng, chúng ta nên viết sơ đồ cấu trúc chương trình. Sử dụng bí kíp TTNV (Tách, Tìm, Nhìn, Viết) để giải quyết vấn đề.
- Khi có sơ đồ cấu trúc chương trình, ta sẽ có được một cái nhìn tổng qt về bố cục, đảm bảo để làm bài nhanh, sửa lỗi nhanh, giảm xác suất sai của chương trình và giảm xác suất nhầm lẫn cho người viết. Sơ đồ cấu trúc chương trình giúp ta dễ dàng linh hoạt, cải tiến và nâng cấp chương trình để có một phiên bản hiệu quả hơn.
- Viết code: Khi suy nghĩ thì phải cẩn thận, nhưng khi đặt tay xuống làm bài thì phải làm bài thật nhanh, khơng chần chừ do dự. Nên nhớ đây là một yếu tố rất quan trọng, nếu không nhiều khả năng sẽ bị thiếu thời gian.
Bước 4. Kiểm thử và hiệu chỉnh.
- Sau khi làm xong mỗi bài, cần phải kiểm tra lại tên tệp Input, Output vì nếu tên tệp sai có thể dẫn đến mất điểm bài làm hồn toàn.
- Việc kiểm thử nên bắt đầu bằng các bộ test đã cho trong đề ra. Sau đó, thử với các test tiêu biểu là các test đã được dùng trong việc phân tích bài tốn. Ngồi ra có thể dưạ vào các tình huống của bài tốn để tạo ra các test cần thử.
- Trong q trình triển khai giải thuật cũng có thể dẫn đến các trường hợp đặc biệt của cách cách xử lý mà chương trình chưa giải quyết được chúng ta cần để ý giám sát các test trong trường hợp này.
- Phải luôn ln cải tiến chương trình cho đến khi nào hết thời gian, cố gắng ăn càng nhiều test, đúng càng nhiều trường hợp càng tốt. Lưu ý, sao lưu chương trình sang nơi khác trước khi cải tiến, phịng trường hợp cải tiến khơng thành cơng thì ta sử dụng lại bản sao lưu này.