为了向那些在中学阶段学习的青少年普及计算机科学知识,为了给学校的信息技术教育课程提供动力和新的思路, 为了给那些有才华的学生提供相互交流和学习的机会、也为通过竞赛和相关的活动培养和选拔优秀计算机人才, 教育部和中国科协委托中国计算机学会举办了全国青少年计算机程序设计竞赛,即全国青少年信息学奥林匹克竞赛(简称NOI)。 至2020年已经举行第37届。
信息学奥林匹克竞赛入门阶段课程,能过本阶段的主要是计算机理论知识(包括硬件、软件、操作系统、文件系统、计算机网络等)、计算机基础编程知识(包括工具的使用、C++基本的语法知识及基础的算法)。本阶段的学习时间在28课次左右。建立的学习年龄在4-6年级之间。
第一阶段:学生能准确、完整的理解C++语言的编程环境、语法规则,掌握C++语言丰富的数据类型、数据定义、运算符和相关运算,熟练掌握程序的基本控制语句的使用,包括选择结构语句、循环结构语句等。培养学生良好的编程习惯以及在计算机上利用C++语言编制程序解决简单问题的能力。
第二阶段:学生将学习计算机理论部分知识和计算机编程知识,掌握计算机硬件、软件、操作系统、文件系统以及计算机网络等方面的知识,熟练掌握处理批量数据的方法以及模块化编程,即函数。能够自己根据程序的需要自定义函数,掌握函数的定义以及调用等方法。加强学生对于计算机理论部分的了解和逻辑思维能力,能运用所学知识去解决常见的实际问题。
信息学奥林匹克竞赛普及组阶段,主要的学习目标能够掌握NOIP普及组(CPS-J组)中所需要的计算机理论知识、数学理论知识、算法理论知识与算法编程实现的内容为主。本阶段课时的数量在50课次左右,主要分为三个主体核心部分的学习。建议的学习年级在4-6年级之间。
第一阶段: 主要是数据结构方面和CSP-J组相关算法,数据结构方面包括栈、队列、树、图论,算法包括高精度算法,简单的排序(选择排序、冒泡排序、希尔排序、桶排序、快速排序、插入排序、归并排序),通过学习,学生能够掌握数据结构方面的基础知识,掌握简单的高精度算法和排序算法,能应用所学算法去处理大整数的加法、减法、乘法、除法以及高精度算法中的借位进位问题,以及对数据进行排序。
第二阶段: 主要是数学方面和CSP-J组相关算法,数学方面方面包括基础计算、基础集合、周期问题、统筹规划、组合数学问题,简单算法包括简单枚举算法、模拟算法、递推算法、递归算法。通过学习,学生能够掌握算法中涉及到的数学方面的基础知识和简单枚举算法、模拟算法、递推算法和递归算法,并能应用到实际问题当中,去解决有多种情况以及需要一步步推导得到结果的问题。
第三阶段: 主要是数学方面和CSP-J组相关算法,数学方面包括等差数列、容斥原理、排列组合问题、简单算法包括贪心、分治、简单动态规划。通过学习,学生能够掌握算法设计中涉及到的数学方面的基础知识,掌握贪心、分治、简单动态规划并能应用到实际问题当中,去解决最优解问题以及动态问题。
信息学奥林匹克竞赛提高阶段,主要的学习目标是能够掌握NOIP提高组(CPS-S组)中所需要的计算机理论知识、数学理论知识、算法理论知识与算法编程实现的内容为主。本阶段课时的数量在40课次左右,主要分为三个主体核心部分的学习。
第一阶段: 主要是数据结构方面、数学方面以及算法方面的知识,数据结构方面包括栈和图论的深入学习,数学方面包括幂、统筹规划、排列组合的深入学习,算法包括字符串的处理、二分法以及数学中常用的函数的应用,通过学习,学生能够掌握数据结构方面和数学方面的基础知识,掌握字符串的处理方法、二分查找算法以及数学中常用函数,能应用所学算法去处理字符和文本数据,进行输入、输出、查找、插入、删除等基本操作,利用二分法查找目标以及调用库里面的数学函数解决算法中设计到的数学操。
第二阶段: 主要是数学方面和算法,数学方面包括数学组合、阶乘、最优解,算法包括递推算法、递归算法、搜索算法、数据结构,通过学习,学生能够掌握数学方面的基础知识,掌握递推算法、递归算法、搜索算法以及数据结构的算法,能应用所学算法去处理搜索问题、深入的递推递归问题以及数据结构方面对数据的特殊处理问题。
第三阶段: 要是数学方面和算法,数学方面包括抽屉原理、斐波那契数列、图论、排列组合、最短路径问题,算法包括分治、贪心、动态规划,通过学习,学生能够掌握数学方面的基础知识,掌握分治算法、贪心算法、动态规划,能应用所学算法去从局部到整体求最优解问题以及各种类型的动态规划问题。