CSP初赛知识-五天积累
为以后参加csp的选手做准备
注:此文中的 标记文本为重点
第一天
第一台计算机
时间:1946年2月
地点:美国宾夕法尼亚大学
名称:ENIAC
细节:占地170平方米,重30吨,18000个电子管,耗电150千瓦,保存80个字节,每秒54次加、减运算,价值48万美元。
计算机的四个时代
- 电子管计算机时代(1946~1957)
- 晶体管计算机时代(1957~1964)
- 集成电路计算机时代(1957~1971)
- 超大规模集成电路时代(1971~现在)
计算机的组成
由五大部件组成,也成五大子系统,每一个子系统都有自己相应的功能。
下图可以清晰表现五大子系统的关系:
五大子系统 { 01. 运算器:算数、逻辑运算,将运算的中间结果暂存 02. 控制器:控制,指挥输入、运行、处理结果 } C P U ( 算数逻辑单元 ) 03. 存储器:存放数据和程序 04. 输入设备:人们 → 信息 转化 机器 ( 键盘、鼠标 ) 05. 输出设备:机器 → 信息 转化 人们 ( 显示屏、打印机 ) 五大子系统 \left\{ \begin{array}{ll} \left. \begin{array}{ll} 01.运算器:算数、逻辑运算,将运算的中间结果暂存 \\ 02.控制器:控制,指挥输入、运行、处理结果 \end{array}\right\}CPU(算数逻辑单元) \\ \ \ 03.存储器:存放数据和程序 \\ \\ \ \ 04.输入设备:人们\xrightarrow[_{_{_{_{信息}}}}]{转化}机器 (键盘、鼠标)\\ \\ \ \ 05.输出设备:机器\xrightarrow[_{_{_{_{信息}}}}]{转化}人们 (显示屏、打印机 ) \end{array} \right. 五大子系统⎩ ⎨ ⎧01.运算器:算数、逻辑运算,将运算的中间结果暂存02.控制器:控制,指挥输入、运行、处理结果}CPU(算数逻辑单元) 03.存储器:存放数据和程序 04.输入设备:人们转化信息机器(键盘、鼠标) 05.输出设备:机器转化信息人们(显示屏、打印机)
内存与外存
- 内存:
- 随机存储器(RAM)(主存):存操作系统、正在运行的程序。
- 读写存储器:读取时间与位置无关,可以随时读入、读出。没电信息会丢失(电保存)。
- 只读存储器(ROM):不能修改,配置基本的输入、输出程序。有没有电都一样。
- 高速缓存存储器(Cache):CPU和内存之间的高速小容量存储器。跟RAM一样,没电信息会丢失。
- 外存:放暂时不用的程序和数据,内外交换信息。用磁性介质或光盘,例如硬盘、软盘、磁带、CD等。能长期保存信息,不依赖于电保存信息,但速度比CPU慢很多。
计算机的构成
计算机系统 { 硬件部分 { 主机 { 中央处理器 { 运算器 控制器 内存储器 { 随机存储器 只读存储器 外部设备 { 输入设备 输出设备 外存储器 软件部分 { 系统软件 < < 操作系统(中间件,承硬件启应用) 应用软件 计算机系统 \left \{\begin{array}{ll} 硬件部分\left \{ \begin{array}{ll} 主机\left \{ \begin{array}{ll} 中央处理器\left \{ \begin{array}{ll} 运算器\\ 控制器 \end{array}\right.\\ 内存储器\left \{ \begin{array}{ll} 随机存储器\\ 只读存储器 \end{array}\right. \end{array}\right.\\ 外部设备\left \{ \begin{array}{ll} 输入设备\\ 输出设备\\ 外存储器 \end{array}\right. \end{array}\right.\\ 软件部分\left \{ \begin{array}{ll} 系统软件 <<操作系统(中间件,承硬件启应用)\\ 应用软件 \end{array}\right. \end{array}\right. 计算机系统⎩ ⎨ ⎧硬件部分⎩ ⎨ ⎧主机⎩ ⎨ ⎧中央处理器{运算器控制器内存储器{随机存储器只读存储器外部设备⎩ ⎨ ⎧输入设备输出设备外存储器软件部分{系统软件<<操作系统(中间件,承硬件启应用)应用软件
- 操作系统:ioerating system,OS
- 电脑端:windows,macOS,Linux等
- 手机端:iOS,Android,HarmonyOS等
CPU寻址
CPU最大能查询多大范围的地址叫做寻址能力,CPU的寻址能力以字节为单位。例如32位的CPU的可以寻址 2 31 字节 = 4 G 2^{31}字节=4G 231字节=4G大小的地址。(CPU挨家挨户地找叫做寻址,超出寻址范围,CPU就找不到数据了)
著名人士
- 冯·诺依曼:“现代计算机之父”,冯·诺依曼架构
- 阿兰·图灵:英国人,“计算机科学之父”、“人工智能之父”。发明图灵机,在二战中为破译德军的密码发挥了重要作用。图灵奖是美国计算机协会于1966年设立的,一般只发给一名计算机科学家。
- 姚期智:中国人,2000年图灵奖获得者。
- 戈登·摩尔:摩尔定律(当价格不变,集成电路上的元器件数目月每隔18~24个月增加一倍,性能提升一倍)
- 查尔斯·巴比奇:提出了差分机与分析机的设计概念,被视为计算机先驱,被称为现代计算机的鼻祖。
网络
- IP地址:是IP协议提供的一种统一的地址格式。
- IPv4只有4字节,共32位,在2019年11月25日已经分配完毕;
- IPv6采用128位地址长度,几乎用不完。
- 根据地理位置,网络可分为:
- 局域网(LAN): < 10 k m <10km <10km,一般是有线网络,是组成MAN和WAN的基础。
- 城域网(MAN): 10 10 10~ 100 k m 100km 100km,一般都加入了广域网
- 广域网(WAN):跨国、洲,全球性的网络。 典型案例是Inerenet网。
- 个人网(WPAN): 10 m 左右 10m左右 10m左右,无限个人局域网
- 域名:IP地址标记网上唯一的计算机,但是IP地址太长,不好记,于是又发明了另一套字符型的地址方案,及域名地址。IP地址和域名是一一对应的。
后缀 | 描述 |
---|---|
.com | company,表示公司企业 |
.cn | 中国的国家顶级域名 |
.edu | 教育机构 |
.gov | 政府部门 |
.net | 网络组织,现在任何人都可以注册 |
.org | 非营利组织,任何人都可以注册 |
第二天
其他基本知识简介
- 1984年创办NOI(全国青少年计算机程序设计竞赛)
- 全球两大个人电脑处理器厂商:Intel和AMD
- 赛扬(低端)、奔驰(中端)、酷睿(高端,i5、i7是主流)是CPU型号(Intel的)
- 一些协议
- FTP文件传输协议
- SMTP简单邮件传输协议
- HTTP超文本传输协议
- POP邮局协议
简单数据结构
- 栈(stack):先进后出表(FILO表),入栈:放元素,出栈:取元素。
- 队列(queue):线性表,先进先出表(FIFO表)
出队 | a 1 a_1 a1 | a 2 a_2 a2 | a 3 a_3 a3 | a 4 a_4 a4 | a 5 a_5 a5 | 入队 |
---|---|---|---|---|---|---|
队首 | 队尾 |
- 链表(list):
- 链式存储结构,随机存储
- 特点:
- 存储灵活,不需要连续的空间
- 自适应内存大小,不需要提前开辟空间
区别 | 链表 | 数组 |
---|---|---|
存储方式 | 储存地址不连续 | 储存地址连续 |
遍历 | 速度稍慢 | 速度快 |
插入、删除 | 较为方便 | 不方便 |
进制
- 10进制转n进制:除以n取余,逆序排列(短除法)
- n进制转10进制:从末位一次乘n的0、1、2…次方,再相加(位值原理)
- 8为二进制最大的数是255
计算机的存储
- 存储单位:
- 位(bit):1个二进制位,计算机存储的最小单位
- 字节(byte,B):8bit=1byte,计算机存储的基本单位
- 1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB
- 各种数据类型的存储长度
类型 | 字节数 | 位数 |
---|---|---|
char | 1 | 8 |
bool | 1 | 8 |
short int | 2 | 16 |
int | 4 | 32 |
float | 4 | 32 |
double | 8 | 64 |
long | 4或8 | 32或64(电脑位数不同各不一样) |
long long | 8 | 64 |
位运算
位运算符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两个位都是1,结果才是1 |
| | 或 | 两个位都是0,结果才是0 |
^ | 异或 | 两个位同0异1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 各二进制位全部左移若干位,高位丢弃,低位补0(对于有符号数,最高位不变) |
>> | 右移 | 各二进制位全部右移若干位,对于无符号数,高位补0(对于有符号数,太复杂不需掌握) |
- 运算优先级
- ~ 最高
- ^ 第二
- | 和 & 第三
- 考题中也会这样写:
- 并且 ∧ \wedge ∧(先算)
- 或者 ∨ \vee ∨(再算)
- 取反 ¬ \neg ¬(最后算)
表达式
- 中缀表达式就是常见的运算表达式。例:(5-2)*4+1
- 前缀表达式又称波兰式,前缀表的式的运算符位于操作数之前,从右到左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符是,弹出栈顶的两个数用运算符(从顶到底)对它们做相应的计算。与例子中缀表达式对应的前缀表达式:+ 1 * 4 - 2 5
- 后缀表达式又称逆波兰式,与前缀表达式相似,后缀表的式的运算符位于操作数之后,但要从左到右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符是,弹出栈顶的两个数用运算符(从顶到底)对它们做相应的计算。与例子中缀表达式对应的后缀表达式:5 2 - 4 * 1 +
第三天
算法初解
排序算法
- 桶排序(计数排序):非基于比较的排序方法,时间复杂度 O ( n + k ) O(n+k) O(n+k),快于任何基于比较的排序算法,但是它牺牲空间换时间
- 更多排序算法:冒泡排序、插入排序、选择排序、快速排序、基数排序、归并排序等
算法时间复杂度
- 时间复杂度用来度量一个算法的运行时间,一般用大写字母O表示
- 算法运行的次数可以用常数表示,该算法的时间复杂度就是 O ( 1 ) O(1) O(1)
- 循环 n n n次, O ( n ) O(n) O(n)
- 循环 n 2 n^2 n2, O ( n 2 ) O(n^2) O(n2)
- 特别的,循环 n 2 + n n^2+n n2+n次,时间复杂度依然是 O ( n 2 ) O(n^2) O(n2)。因为再估算算法的时间复杂度时,只保留最高阶。
- 二分n个数,需 log 2 n \log_2n log2n次,所以算法复杂度为 O ( log 2 n ) O(\log_2n) O(log2n)
- 更多相关知识可以看这里
基本算法详解
- 二分查找法
例:在有序的序列中找一个数的算法过程
在3 5 9 10 12 14 20 84 98中找find=10
数组 | 3 | 5 | 9 | 10 | 12 | 14 | 20 | 84 | 98 |
---|---|---|---|---|---|---|---|---|---|
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- 首先,找到下边区间的中间位置:mid=(1+9)/2=5
- 判断中间位置mid所对应的数m与要找的数find的关系
- m>find
找mid左边的数 - m<find
找mid右边的数 - m==find
找到了,停止
- m>find
- 重复执行2,直到找到
这样每次去掉一半的数比一个一个找要快,但是有前提:有序
- 分治:分而治之(典型案例:归并排序)
- 递归:程序自己调用自己的编程技巧称为递归(recursion)
递归需满足的两个条件:- 有边界值
- 一直向边界值靠拢
第四天
排列组合
- 加法原理:有n种办法 { 第 1 类: a 1 种 第 2 类: a 2 种 第 3 类: a 3 种 . . . . . . \left\{\begin{array}{ll} 第1类:a_1种\\ 第2类:a_2种\\ 第3类:a_3种\\ ...... \end{array}\right. ⎩ ⎨ ⎧第1类:a1种第2类:a2种第3类:a3种......,相加得到总方法数
- 乘法原理:有n个步骤 { 第 1 步: b 1 种 第 2 步: b 2 种 第 3 步: b 3 种 . . . . . . \left\{\begin{array}{ll} 第1步:b_1种\\ 第2步:b_2种\\ 第3步:b_3种\\ ...... \end{array}\right. ⎩ ⎨ ⎧第1步:b1种第2步:b2种第3步:b3种......,相乘得到总方法数
- 排列: A n m = n ! ( n − m ) ! A_n^m=\frac{n!}{(n-m)!} Anm=(n−m)!n!(从n个选项中选出m个选项排列,有顺序)
- 组合: C n m = n ! ( n − m ) ! × m ! C_n^m=\frac{n!}{(n-m)!\times m!} Cnm=(n−m)!×m!n!(从n个选项中选出m个选项组合,无顺序)
图
- 图是由边连接在一起的顶点或结点的集合。
- 无向图:无方向性。
- 有向图:有方向性,有向图中的边叫弧。
- 无向连通图:任意两个顶点都有一条路径(并非直连边),最少有 顶点数 − 1 顶点数-1 顶点数−1条边。
- 有向强连通图:任意两个顶点都有一条路径,最少有 顶点数 顶点数 顶点数条边。
- 无向完全图:任意两个顶点有一条直连边相连。
- 有向完全图:任意两个顶点有方向相反的两条弧相连。
- 带权图:每个边上有一定权重的图。
- 度(无向图):顶点所具有的边的数目称为顶点的度。
- 出度和入度(有向图):一个顶点入边的数目称为顶点的入度,一个顶点出边的数目称为定点的出度,度=入度+出度。
树
- 树的简介
- 根节点:树层次结构中最高的结点,1
- 父节点:2是5,6的父节点
- 兄弟结点:拥有同一个父节点的两个结点,8,9就是兄弟结点
- 结点的度:拥有子树的数目,4的度是1,2的度是2
- 祖先节点:层次路径上所有的结点,6的祖先有1,2
- 叶子结点:度为0的结点,没有子树的结点,3,8,9都是叶子结点
- 树的深度:所有节点层次值得最大值,上面那棵树的深度为4
- 说明:结点和节点是一个意思
- 二叉树
- 特点
- 每个结点最多有2棵子树
- 二叉树是有序的
- 性质
- 第 i i i层做多有 2 i − 1 2^{i-1} 2i−1个结点
- 深度为 k k k的二叉树做多有 2 k − 1 2^k-1 2k−1个结点
- 满二叉树
- 所有分支节点有左右子树,叶子结点在同一层上
- 特点
- 叶子结点都在做下层
- 非叶子节点的度都为2
- 在所有深度相同的二叉树里,它的结点数目最多,叶子结点数目也最多
- 完全二叉树
- 满二叉树的叶子结点可以缺少(从最右边起连续),其他结点不可少
- 满二叉树也是完全二叉树
- 叶子结点个数: ⌊ ( 节点个数 + 1 ) / 2 ⌋ \lfloor(节点个数+1)/2\rfloor ⌊(节点个数+1)/2⌋
- 树的遍历
- 前序(根)遍历:先遍历根节点,再遍历左子树,再遍历右子树。
- 中序(根)遍历:先遍历左子树,再遍历根节点,再遍历右子树。
- 后序(根)遍历:先遍历左子树,再遍历右子树,再遍历根节点。
第五天
真题训练
补充知识可以看我的这篇文章
感谢阅读!如有错别字,请联系我。