CSP初赛知识


为以后参加csp的选手做准备
注:此文中的标记文本为重点


第一天

第一台计算机

时间:1946年2月
地点:美国宾夕法尼亚大学
名称:ENIAC
细节:占地170平方米,重30吨,18000个电子管,耗电150千瓦,保存80个字节,每秒54次加、减运算,价值48万美元。

计算机的四个时代

  • 电子管计算机时代(1946~1957)
  • 晶体管计算机时代(1957~1964)
  • 集成电路计算机时代(1957~1971)
  • 超大规模集成电路时代(1971~现在)

计算机的组成

五大部件组成,也成五大子系统,每一个子系统都有自己相应的功能。
下图可以清晰表现五大子系统的关系:

flowchart LR K(02控制器) -. 控制线 .-> I[04输入设备] & O[05输出设备] & Y[01运算器] 1((人))==数据==>I==数据线==>C[03存储器]==数据线==>O==数据==>2((人)) C <--数据线---> Y I & O & Y-. 反馈线 .->K

\[五大子系统 \left\{ \begin{array}{ll} \left. \begin{array}{ll} 01.运算器:算数、逻辑运算,将运算的中间结果暂存 \\ 02.控制器:控制,指挥输入、运行、处理结果 \end{array}\right\}CPU(算数逻辑单元) \\ \ \ 03.存储器:存放数据和程序 \\ \\ \ \ 04.输入设备:人们\xrightarrow[_{_{_{_{信息}}}}]{转化}机器 (键盘、鼠标)\\ \\ \ \ 05.输出设备:机器\xrightarrow[_{_{_{_{信息}}}}]{转化}人们 (显示屏、打印机 ) \end{array} \right. \]

内存与外存

  • 内存:
    • 随机存储器(RAM)(主存):存操作系统、正在运行的程序。
    • 读写存储器:读取时间与位置无关,可以随时读入、读出。没电信息会丢失(电保存)。
    • 只读存储器(ROM):不能修改,配置基本的输入、输出程序。有没有电都一样。
    • 高速缓存存储器(Cache):CPU和内存之间的高速小容量存储器。跟RAM一样,没电信息会丢失。
flowchart LR CPU <--> Cache <--> 主存 <--> 外存
  • 外存:放暂时不用的程序和数据,内外交换信息。用磁性介质或光盘,例如硬盘、软盘、磁带、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}字节=4G\)大小的地址。(CPU挨家挨户地找叫做寻址,超出寻址范围,CPU就找不到数据了)

著名人士

  1. 冯·诺依曼:“现代计算机之父”,冯·诺依曼架构

  2. 阿兰·图灵:英国人,“计算机科学之父”、“人工智能之父”。发明图灵机,在二战中为破译德军的密码发挥了重要作用。图灵奖是美国计算机协会于1966年设立的,一般只发给一名计算机科学家。

  3. 姚期智:中国人,2000年图灵奖获得者。

  4. 戈登·摩尔:摩尔定律(当价格不变,集成电路上的元器件数目月每隔18~24个月增加一倍,性能提升一倍)

  5. 查尔斯·巴比奇:提出了差分机与分析机的设计概念,被视为计算机先驱,被称为现代计算机的鼻祖

    网络

  • IP地址:是IP协议提供的一种统一的地址格式。
    • IPv4只有4字节,共32位,在2019年11月25日已经分配完毕;
    • IPv6采用128位地址长度,几乎用不完。
  • 根据地理位置,网络可分为:
    1. 局域网(LAN):\(<10km\),一般是有线网络,是组成MAN和WAN的基础。
    2. 城域网(MAN):\(10\)~\(100km\),一般都加入了广域网
    3. 广域网(WAN):跨国、洲,全球性的网络。 典型案例是Inerenet网。
    4. 个人网(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):
    • 链式存储结构,随机存储
    • 特点:
      1. 存储灵活,不需要连续的空间
      2. 自适应内存大小,不需要提前开辟空间
flowchart LR 1[DATA1 NEXT]-->2[DATA2 NEXT]-->3[DATA3NEXT]-->N[NULL]
区别 链表 数组
存储方式 储存地址不连续 储存地址连续
遍历 速度稍慢 速度快
插入、删除 较为方便 不方便

进制

  • 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\)(最后算)

      表达式

  1. 中缀表达式就是常见的运算表达式。例:(5-2)*4+1
  2. 前缀表达式又称波兰式,前缀表的式的运算符位于操作数之前从右到左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符是,弹出栈顶的两个数用运算符(从顶到底)对它们做相应的计算。与例子中缀表达式对应的前缀表达式:+ 1 * 4 - 2 5
  3. 后缀表达式又称逆波兰式,与前缀表达式相似,后缀表的式的运算符位于操作数之后,但要从左到右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符是,弹出栈顶的两个数用运算符(从顶到底)对它们做相应的计算。与例子中缀表达式对应的后缀表达式: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
  1. 首先,找到下边区间的中间位置:mid=(1+9)/2=5
  2. 判断中间位置mid所对应的数m与要找的数find的关系
    1. m>find
      找mid左边的数
    2. m<find
      找mid右边的数
    3. m==find
      找到了,停止
  3. 重复执行2,直到找到

这样每次去掉一半的数比一个一个找要快,但是有前提:有序

  • 分治:分而治之(典型案例:归并排序)

  • 递归:程序自己调用自己的编程技巧称为递归(recursion)
    递归需满足的两个条件:

    1. 有边界值
    2. 一直向边界值靠拢

    第四天

    排列组合

  • 加法原理:有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. 树的简介
flowchart LR subgraph 树 direction TB subgraph 1 end subgraph 2 end subgraph 3 end subgraph 4 end subgraph 5 end subgraph 6 end subgraph 7 end subgraph 8 end subgraph 9 end subgraph 10 end subgraph 11 end end 1---2 & 3 & 4 2---5 & 6 4---7 5---8 & 9 6 --- 10 7---11
  • 根节点:树层次结构中最高的结点,1
  • 父节点:2是5,6的父节点
  • 兄弟结点:拥有同一个父节点的两个结点,8,9就是兄弟结点
  • 结点的度:拥有子树的数目,4的度是1,2的度是2
  • 祖先节点:层次路径上所有的结点,6的祖先有1,2
  • 叶子结点:度为0的结点,没有子树的结点,3,8,9都是叶子结点
  • 树的深度:所有节点层次值得最大值,上面那棵树的深度为4
  • 说明:结点和节点是一个意思
  1. 二叉树
  • 特点
    1. 每个结点最多有2棵子树
    2. 二叉树是有序的
  • 性质
    1. \(i\)层做多有\(2^{i-1}\)个结点
    2. 深度为\(k\)的二叉树做多有\(2^k-1\)个结点
  • 满二叉树
    • 所有分支节点有左右子树,叶子结点在同一层上
    • 特点
      1. 叶子结点都在做下层
      2. 非叶子节点的度都为2
      3. 在所有深度相同的二叉树里,它的结点数目最多,叶子结点数目也最多
  • 完全二叉树
    • 满二叉树的叶子结点可以缺少(从最右边起连续),其他结点不可少
    • 满二叉树也是完全二叉树
    • 叶子结点个数:\(\lfloor(节点个数+1)/2\rfloor\)
  1. 树的遍历
    • 前序(根)遍历:先遍历根节点,再遍历左子树,再遍历右子树。
    • 中序(根)遍历:先遍历左子树,再遍历根节点,再遍历右子树。
    • 后序(根)遍历:先遍历左子树,再遍历右子树,再遍历根节点。

第五天

真题训练

  • 题目在洛谷有题上有许多,可以直接查看。(推荐从进几年的做起,2019年以后题型有改革)
  • 如果怕自己查答案 ,也可以下载打印做题(密码:csptmu)

补充知识可以看我的这篇随笔

posted @ 2024-08-03 20:42  mike_666  阅读(54)  评论(0)    收藏  举报