CSP-基础知识点(1)
信息学史及基本知识
一、信息学及计算机史
- 计算机的顶级奖项:图灵奖、冯·诺依曼奖
图灵奖:由ACM(美国计算机协会)设立于1966年。是“计算机界的诺贝尔奖”。
冯·诺依曼奖:由IEEE设立。
对信息科学做出突出贡献的大神:图灵(所以才有个奖),冯 · 诺伊曼
中国获图灵奖的大神:姚期智(清华就有姚班,就是以他的名字命名的)
世界第一台电子计算机:埃尼阿克(ENIACENIAC),于1946年2月14日(够虐狗的)在美国宾夕法尼亚大学诞生。又被叫做电子管计算机。
二、关于编程
- 编程语言:
分两类:面向对象和面向过程。
- 高级语言和低级语言的区别:
高级语言需要编译运行,常数较大,运行速度慢。而低级语言常数极小,运行速度快。此外,高级语言更容易移植。
- 常见低级语言:
汇编
- 面向对象的高级语言:
C++,Java,EIFFEL,Simula 67等。
- 面向过程的高级语言:
C,Fortran语言。
- 递归编程:
递归是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题。简单来讲,就是“自身调用自身”(在函数中)。
- P类/NP类/NPC类问题:
1、P类问题:如果一个问题能找到一个在多项式时间内解决它的算法,那么这个问题就是P问题。
2、NP类问题:注意:NP问题不是非P类问题,而是在多项式时间内验证一个解的问题。或者,我们可以将其理解为在多项式时间内猜出一个解的问题。
3、NPC类问题:定义如下:如果一个问题是NP问题,而且所有的NP问题都可以约化到它。那么它就是NPC类问题。再来介绍一下关于约化的定义:如果一个问题A可以约化为问题B,含义就是这个问题A可以用问题B的解法来解决。
三、关于计算机
先上张大图:
重要设备:
硬件组成:
控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
输入设备(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
输出设备(Output system):输出设备与输入设备同样是计算机的重要组成部分,它把外算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。
CPU及存储:
CPU(中央处理器)=运算器+控制器+寄存器
运算器=算术逻辑运算单元(ALU)及浮点运算单元(FPU)
存储器=内存储器+外存储器
BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
随机存储器RAM的“随机”指“随时访问”
所以,我们记下来以下知识点:
断电后可以保存数据:硬盘,ROM
断电后不可以保存数据:显存(显卡内存),RAM,CPU
- 计算机各存储单位及进位关系:
计算机的存储单位有以下几种:
TB/GB/MB/KB/BTB/GB/MB/KB/B
他们之间的进位关系为1024(这应该是常识,没打过比赛还没玩过手机么?)
特殊地,1B=8(bit)1B=8(bit),这里的bitbit是二进制下的一位内存。
进制及进制转化
十进制转任意进制
将十进制转换成NN进制,只需把十进制数每次除NN求余数,然后把余数逆序写出来。
看不懂就看图:
这是二进制的图,其他进制就类比推一下就可以了。如果这个看不懂的话就不要参加初赛了,50块钱买点啥不好...
任意进制转十进制
简单说就是:按位转,第ii位的数字乘以要转换的进制的n−1n−1次幂即可。
还是上图:
任意进制互相转化
这里考虑用十进制做中转,先把AA进制转十进制,再把十进制转BB进制。
关于小数的进制转换
十进制转任意进制的小数不进行除法运算,而进行乘法运算后取整,取整后从前向后排列。
任意进制转十进制的小数只需要乘上负指数,最后算出来即可。
各进制的字母表达
H(Hexadecimal)H(Hexadecimal)——16进制
D(Decimal)D(Decimal)——10进制
O(Octonary)O(Octonary)——8进制
B(Binary)B(Binary)——2进制
二进制的相关知识
二进制是计算机进行计算所使用的工具,自然也是非常常考的要点。二进制的相关知识有许多,甚至算法中的位运算也是二进制的相关内容,但为了过第一轮初赛,我们只介绍一些理论知识。关于位运算的相关知识请有兴趣的同学自己学习。
- 1、原码
顾名思义,原码就是十进制数直接转换成二进制之后直接形成的二进制编码。
- 2、补码
正数的补码是本身,负数的补码是其反码加一。
- 3、反码
顾名思义:正数的反码是本身,负数的反码是其除符号位之外的所有位按位取反的结果。
附:ASCII码
ASCII码的正规名称是:美国信息交换标准代码,是基于拉丁字母的一套电脑编码系统。是最通用的信息交换标准。一共定义了128个字符。
这里不赋ASCII码的转换表。只给出几种比较常用的转换:
字符0→48
大写字母A→65
小写字母a→97
空格→32
换行→13
位运算
位运算不仅在初赛中是一个知识点分类,在复赛(即真正的程序设计与运用)的时候也有很大的一个应用。而且,位运算的相关知识是计算机运算的灵魂,更是每个程序猿应该理解的一种基本操作。
关于位运算的相关知识,本蒟蒻在另一篇专门的博客中详细的讲解。
常用的位运算技巧
为了应对初赛的笔试题,建议读者在阅读完这篇博客之后至少应该掌握:各种位运算的运算法则以及位运算优先级。
另外,对于位运算的优先级,本蒟蒻在后面的逻辑运算部分还会有详细的解析。
逻辑运算
逻辑运算
逻辑运算一共有三种,每种都有两种写法:
逻辑非:!或 ┐
逻辑与:&& 或 ∧
逻辑或:|| 或 ∨
逻辑运算的优先级
非>>与>>或
位运算+逻辑运算的优先级
逻辑非(!,┐)=按位反(~)>位移运算(<<,>>)>不等号(>=,<=)>等号(==,!=)>按位与(&)>按位异或(^)>按位或(|)>逻辑与(&&,∧)>逻辑或(||,∨)
逻辑表达式
由逻辑运算复合而成,只有两种结果:truetrue和falsefalse,在C/C++中,返回的值以00表示假,以11表示真。
条件表达式
条件表达式的基本形式如下:
<表达式1>?<表达式2>:<表达式3>
其表达意义是:如果表达式1成立,则执行表达式2,否则执行表达式3。其实也等价于if−elseif−else条件语句。例如下:
#define Min(a,b) a<b?a:b
注意:如果条件表达式有多个进行复合,那么在执行的时候需要从由往左依次判断最后得出一个结果。即:右结合性。
比如:
<表达式1>?<表达式2>:<表达式3>?<表达式4>:<表达式5>
那么,在执行的时候是从3开始判断是否为真,然后执行某一个表达式,依次向上回溯。
图论理论知识
基本概念
- 完全图:任意两点都有边相连,我们很容易推出来,一张完全图的边数为(nn为节点个数)
n×(n−1)2n×(n−1)2
连通图:顾名思义,连通图就是连通的图,即任意两点都能直接或间接到达,这就区别于完全图必须直接用边到达的定义。
树:emm...直观来讲,就是一张长得像树的图。定义是任意两点之间的简单路径有且只有一条。树是一棵连通且无环的图。它的边数是n−1n−1。
二叉树的遍历
二叉树有不同的遍历方式,一般来讲,我们将其分成三类:先序遍历(也叫先根遍历)、中序遍历(中根遍历)以及后序遍历(后根遍历)。
先序遍历:遍历方式如下:根—左儿子—右儿子
中序遍历:遍历方式如下:左儿子—根—右儿子
后序遍历:遍历方式如下:左儿子—右儿子—根
我们用一张图来理解一下这几种遍历方式。
这张图的先序遍历:1245367
中序遍历:4251637
后序遍历:4526731
一个推论:
先序遍历+中序遍历=一棵确定的二叉树
后序遍历+中序遍历=一棵确定的二叉树
先序遍历+后序遍历=啥也不是
特殊二叉树及其性质
- 完全二叉树:只有最后一层不是满的,且最后一层的所有节点均集中在左侧。
图例如下:
- 满二叉树:节点个数已满。
图例如下:
- 特殊二叉树的性质:
1、对于一棵完全二叉树来讲,它的叶子节点为nn,则节点总数为2×n−12×n−1。此结论可逆。
2、对于一棵满二叉树来讲,它的层数(深度)为kk,则它的节点总数为2k−12k−1。此结论可逆。
拓扑排序
简单数据结构基本理论
1、栈
想象一个桶,你从上面往里扔砖,然后你想把某一块砖拿出来,你需要先拿出来你后扔进去的砖。这就是栈。栈的基本原则是:后进先出
来一发图示?
附:前、中、后缀表达式
一篇专门的博客
2、队列
想象你在排队买票,这个队伍中的人都非常有素质,都自觉排队而且不会提前离开队伍。这样就只能从队首买完票再离开,从队尾进入队伍。队列的基本原则是:先进先出。
再来一发图示:
3、链表
链表分两种:单向链表和双向链表。关于链表,我有一篇专门讲解的博客。有兴趣的读者请戳:
链表详解
4、字符串
字符串子串的概念:字符串是一串字符(废话),它的子串被定义为:字符串中任意个连续的字符组成的子序列。
字符串子串个数的计算公式:
n×(n+1)2+1n×(n+1)2+1
(就是字符串长度等差数列)
如果是非空子串,就把那个一减去即可(子串个数的公式加一就是考虑空子串的情况)。
时空复杂度的计算
时间复杂度:渐进时间复杂度用符号OO 表示。一个程序的语句执行次数可以用一个代数式表示,那么我们取这个代数式的最高次项且忽略此项系数作为时间复杂度。如果一个程序的语句执行次数为 2n3+3n2+n+72n3+3n2+n+7,那么这个程序的渐进时间复杂度为O(n3)O(n3)。
计算非递归程序的时间复杂度:简单粗暴,数循环。
常数:常数即为我们忽略掉的OO中最高次项的系数与低次项所带来的时间消耗。
空间复杂度:类比时间复杂度。看开空间开了多大。
计算空间占用量:根据我们以上说过的计算机存储单位的知识:一个intint占用的内存是4B4B,所以我们把开的intint乘上4,再除以1024就是KBKB,同理,再除10241024就是MBMB。
公式:nn为元素个数,MM为最终答案(以MBMB为单位)
M=4n1024×1024M=4n1024×1024
PS:一般来讲,比赛中所给的256MB256MB内存可以开6×1076×107个intint类型的变量。另外,大数组必须开全局变量。如果扔在主函数里极容易爆栈。
数学、逻辑学及运筹学知识
- 排列组合:排列组合是每年必考知识点。但是这是一个比较大的课题。不仅是高二数学选修重点,也是数学编程的一个重要分支。
排列组合
- 幻方
题目类型整理
题型 | 知识点类型 | 题目数量 |
---|---|---|
单选 | 信息学史&基本知识 | 8-10 |
单选 | C++语法知识点 | 2-3 |
单选 | 数据结构&算法 | 3-4 |
单选 | 数学&逻辑学&运筹学 | 3-4 |
单选 | 比赛相关知识 | 1-2 |
问题求解 | 数学 | 1 |
问题求解 | 数据结构 | 1 |
模拟程序运行 | C++语法&算法 | 4 |
完善程序 | C++语法&算法 | 2 |
CSP-基础知识点(1)相关推荐
- Python培训教程之Python基础知识点梳理
Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...
- 自然语言处理算法工程师历史最全资料汇总-基础知识点、面试经验
2019年秋招已过,零星的招聘任然在继续.本资源适用于NLP算法工程师面试,也适用于算法相关的其他岗位.整理了算法面试需要数学基础知识.编程语言.深度学习.机器学习.计算机理论.统计学习.自然语言处理 ...
- java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理
原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- 布尔值_Python基础知识点手册——布尔值及布尔运算
布尔值及布尔运算 布尔值有 True 和 False,布尔类型是整数类型的子类型,所以整数的运算都适用布尔值运算. issubclass(bool,int) True True + 1 2 ~True ...
- python基础知识整理-整理了27个新手必学的Python基础知识点
原标题:整理了27个新手必学的Python基础知识点 1.执行脚本的两种方式 Python a.py 直接调用Python解释器执行文件 chomd +x a.py ./a.py #修改a.py文件的 ...
- python基础知识整理-python爬虫基础知识点整理
首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...
- Python2.7基础知识点思维导图
2019独角兽企业重金招聘Python工程师标准>>> 特别感谢廖雪峰官方网站! 这个思维导图是学习Python2.7时罗列的知识点,能够帮助快速回忆基础知识点,分享给各位. 思维导 ...
- 计算机知识必备,小结||计算机基础知识点十(必备)
原标题:小结||计算机基础知识点十(必备) 451.数据库管理系统主要功能: (1)数据定义功能 (2)数据操纵功能 (3)数据库的运行管理 (4)数据库的建立和维护功能 452.数据库不仅要反映数据 ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点
转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...
最新文章
- dbvisualizer查询mysql中文乱码_使用PLSQL Developer和DbVisualizer查询oracle数据库时出现乱码...
- IOS之代理的使用(重点)
- 847. Shortest Path Visiting All Nodes(二)
- 从 40% 跌至 4%,“糊”了的 Firefox 还能重回巅峰吗?
- 免费python自学攻略-自学python二三事
- 18.看板方法---精益的一种经济学模型
- hdoj 4940 强连通图
- Linux下支持的视频文件格式,linux下视频格式转换与视频合并
- iOS App 签名的原理 App 重签名(二)
- word如何快速找到自己需要的符号/特殊符号?(干货满满)
- 信息学奥赛C++编程:计算分数加减表达式的值
- mysql 按照年龄段分组查询
- db2 cmd命令操作
- java 龟兔赛跑预测_Java实现 蓝桥杯VIP 基础练习 龟兔赛跑预测
- 华三模拟器实现DHCP获取地址
- 三只松鼠3次方新品魅力何在?
- 车载系统ce和linux,车载电子操作系统:QNX与Linux未来有望两家独大
- R语言与线性回归分析
- 【散分】庆祝自己的csdn博客突破100万访问量
- 私人定制YX3系列高效节能电动机:这才是大腕儿!
热门文章
- 详解Linux内核红黑树算法的实现 http://blog.csdn.net/npy_lp/article/details/7420689
- Excel 数据透视表教程大全之 03 刷新数据、添加多个字段作为值字段、值显示为总数的百分
- elastic serach学习
- 如何将mac中的资料拷贝到U盘,移动硬盘(实用!!!)
- Lightbox JS 用法
- 蓝桥杯 14校4-回文数字 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制
- 程序员必读的十四本经典书籍
- 电阻、电感和电容的原理
- 用户分层 | 用户画像
- MySQL设计一个图书馆数据库_设计一个图书馆数据库