CSP初赛知识
为以后参加csp的选手做准备
注:此文中的标记文本为重点
第一天
第一台计算机
时间:1946年2月
地点:美国宾夕法尼亚大学
名称:ENIAC
细节:占地170平方米,重30吨,18000个电子管,耗电150千瓦,保存80个字节,每秒54次加、减运算,价值48万美元。
计算机的四个时代
- 电子管计算机时代(1946~1957)
- 晶体管计算机时代(1957~1964)
- 集成电路计算机时代(1957~1971)
- 超大规模集成电路时代(1971~现在)
计算机的组成
由五大部件组成,也成五大子系统,每一个子系统都有自己相应的功能。
下图可以清晰表现五大子系统的关系:
内存与外存
- 内存:
- 随机存储器(RAM)(主存):存操作系统、正在运行的程序。
- 读写存储器:读取时间与位置无关,可以随时读入、读出。没电信息会丢失(电保存)。
- 只读存储器(ROM):不能修改,配置基本的输入、输出程序。有没有电都一样。
- 高速缓存存储器(Cache):CPU和内存之间的高速小容量存储器。跟RAM一样,没电信息会丢失。
- 外存:放暂时不用的程序和数据,内外交换信息。用磁性介质或光盘,例如硬盘、软盘、磁带、CD等。能长期保存信息,不依赖于电保存信息,但速度比CPU慢很多。
计算机的构成
-
操作系统:ioerating system,OS
-
电脑端:windows,macOS,Linux等
-
手机端:iOS,Android,HarmonyOS等
-
CPU寻址
CPU最大能查询多大范围的地址叫做寻址能力,CPU的寻址能力以字节为单位。例如32位的CPU的可以寻址\(2^{31}字节=4G\)大小的地址。(CPU挨家挨户地找叫做寻址,超出寻址范围,CPU就找不到数据了)
著名人士
-
冯·诺依曼:“现代计算机之父”,冯·诺依曼架构
-
阿兰·图灵:英国人,“计算机科学之父”、“人工智能之父”。发明图灵机,在二战中为破译德军的密码发挥了重要作用。图灵奖是美国计算机协会于1966年设立的,一般只发给一名计算机科学家。
-
姚期智:中国人,2000年图灵奖获得者。
-
戈登·摩尔:摩尔定律(当价格不变,集成电路上的元器件数目月每隔18~24个月增加一倍,性能提升一倍)
-
查尔斯·巴比奇:提出了差分机与分析机的设计概念,被视为计算机先驱,被称为现代计算机的鼻祖。
网络
- IP地址:是IP协议提供的一种统一的地址格式。
- IPv4只有4字节,共32位,在2019年11月25日已经分配完毕;
- IPv6采用128位地址长度,几乎用不完。
- 根据地理位置,网络可分为:
- 局域网(LAN):\(<10km\),一般是有线网络,是组成MAN和WAN的基础。
- 城域网(MAN):\(10\)~\(100km\),一般都加入了广域网
- 广域网(WAN):跨国、洲,全球性的网络。 典型案例是Inerenet网。
- 个人网(WPAN):\(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_2\) | \(a_3\) | \(a_4\) | \(a_5\) | 入队 |
|---|---|---|---|---|---|---|
| 队首 | 队尾 |
- 链表(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表示
- 算法运行的次数可以用常数表示,该算法的时间复杂度就是\(O(1)\)
- 循环\(n\)次,\(O(n)\)
- 循环\(n^2\),\(O(n^2)\)
- 特别的,循环\(n^2+n\)次,时间复杂度依然是\(O(n^2)\)。因为再估算算法的时间复杂度时,只保留最高阶。
- 二分n个数,需\(\log_2n\)次,所以算法复杂度为\(O(\log_2n)\)
-
更多相关知识可以看这里
基本算法详解
-
二分查找法
例:在有序的序列中找一个数的算法过程
在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种办法\(\left\{\begin{array}{ll} 第1类:a_1种\\ 第2类:a_2种\\ 第3类:a_3种\\ ...... \end{array}\right.\),相加得到总方法数
-
乘法原理:有n个步骤\(\left\{\begin{array}{ll} 第1步:b_1种\\ 第2步:b_2种\\ 第3步:b_3种\\ ...... \end{array}\right.\),相乘得到总方法数
-
排列:\(A_n^m=\frac{n!}{(n-m)!}\)(从n个选项中选出m个选项排列,有顺序)
-
组合:\(C_n^m=\frac{n!}{(n-m)!\times m!}\)(从n个选项中选出m个选项组合,无顺序)
图
-
图是由边连接在一起的顶点或结点的集合。
-
无向图:无方向性。
-
有向图:有方向性,有向图中的边叫弧。
-
无向连通图:任意两个顶点都有一条路径(并非直连边),最少有\(顶点数-1\)条边。
-
有向强连通图:任意两个顶点都有一条路径,最少有\(顶点数\)条边。
-
无向完全图:任意两个顶点有一条直连边相连。
-
有向完全图:任意两个顶点有方向相反的两条弧相连。
-
带权图:每个边上有一定权重的图。
-
度(无向图):顶点所具有的边的数目称为顶点的度。
-
出度和入度(有向图):一个顶点入边的数目称为顶点的入度,一个顶点出边的数目称为定点的出度,度=入度+出度。
树
- 树的简介
- 根节点:树层次结构中最高的结点,1
- 父节点:2是5,6的父节点
- 兄弟结点:拥有同一个父节点的两个结点,8,9就是兄弟结点
- 结点的度:拥有子树的数目,4的度是1,2的度是2
- 祖先节点:层次路径上所有的结点,6的祖先有1,2
- 叶子结点:度为0的结点,没有子树的结点,3,8,9都是叶子结点
- 树的深度:所有节点层次值得最大值,上面那棵树的深度为4
- 说明:结点和节点是一个意思
- 二叉树
- 特点
- 每个结点最多有2棵子树
- 二叉树是有序的
- 性质
- 第\(i\)层做多有\(2^{i-1}\)个结点
- 深度为\(k\)的二叉树做多有\(2^k-1\)个结点
- 满二叉树
- 所有分支节点有左右子树,叶子结点在同一层上
- 特点
- 叶子结点都在做下层
- 非叶子节点的度都为2
- 在所有深度相同的二叉树里,它的结点数目最多,叶子结点数目也最多
- 完全二叉树
- 满二叉树的叶子结点可以缺少(从最右边起连续),其他结点不可少
- 满二叉树也是完全二叉树
- 叶子结点个数:\(\lfloor(节点个数+1)/2\rfloor\)
- 树的遍历
- 前序(根)遍历:先遍历根节点,再遍历左子树,再遍历右子树。
- 中序(根)遍历:先遍历左子树,再遍历根节点,再遍历右子树。
- 后序(根)遍历:先遍历左子树,再遍历右子树,再遍历根节点。
第五天
真题训练
补充知识可以看我的这篇随笔
浙公网安备 33010602011771号