$\color{salmon}{\texttt {放小球:}}$

$n$ 球, $m$ 盒

小球是否不同 盒子是否不同 是否允许空盒 相应做法
$\surd$ $\surd$ $\surd$ $m^n$
$\surd$ $\surd$ $\times$ $m!\cdot {\small\texttt{斯二林}}(n,m)$
$\surd$ $\times$ $\surd$ $\sum_{i=1}^{m} {\small\texttt{斯二林}}(n,i)$
$\surd$ $\times$ $\times$ $\small\texttt{斯二林}(n,m)$
$\times$ $\surd$ $\surd$ $C_{m+n-1}^{n}$

$\times$|$\surd$|$\times$| $C_{n-1}^{m-1} $


有关斯二林:

$S(N,M)=M\cdot S(N-1,M)+S(N-1,M-1)$


对于该式理解:

有如今已有 $N$ 个球,放置在 $M$ 个盒中。我们是通过放置第 $N$ 球来达成的这一状态。

能转移到这里的有两种情况。

其一:放这个球是在已经放有球的盒子里,这样的话,盒子数没变过,有 $M$ 个。也就是由 $S(N-1,M)$ 转移来,又考虑到第 $N$ 球有 $M$ 个盒子可以放,故需乘上 $M$ 。

其二:放这个球的时候是新开了一个盒子,这样新盒子数是加 $1$ 得来。也就是由 $S(N-1,M-1)$ 得来。

二者结合即有上式。


对第五行的理解:

设第 $i$ 个盒子内球数为 $a_i(a_i\geq 0)$ 可看作是求 $a_1+a_2+\cdots +a_m=n$ 的非负整数解的组数。

求这样的方程的非负整数解的组数的算式为: $num=C^{n}_{m+n+1}$ ,故可将该方法迁移到此处。


对第六行的理解:

插板法天下第一!

看作是 $n$ 个球,现要插板将其分成 $m$ 块即可。

那就有 $n-1$ 个间隙,需插 $m-1$ 块板。 $n-1$ 选 $m-1$ ,有 $C^{m-1}_{n-1}$ 种方法。


$\color{salmon}{\texttt {期望次数:}}$

格式:

对XXX(哈希表/有序数组/链表)进行XXX(二分查找/线性探测),等概率情况下,(成功/失败)的(平均查找长度/平均比较次数)为___

这是什么 要求什么 怎么做
哈希表 线性探测的平均探测次数 $1+\dfrac{\small\texttt{出现冲突的次数之和}}{\small\texttt{元素个数}}$
哈希表 查找成功的平均次数 同上
哈希表 查找失败的平均次数 (下方特讲)
有序数组 二分查找的平均次数 分数形式:分子的递推式为 $D_i=D_{i-1}+\lfloor\log_{2} i\rfloor+1$ ,其中 $D_1$ 为 $1$ 。分母为元素个数。

哈希表查找失败的平均次数:

这里有一种非常易于实现的方法,先把线性探测完了以后的哈希表写下来如这样。

0 1 2 3 4 5 6
7 14 8 11 30

我们要查一个元素,会先看看它本该对应的位置是否有它。

倘若没有,我们会怀疑它是不是因为冲突而顺延了,于是到下一个位置找它。

一直找到一个空位置,我们就可以宣告查找失败了。

可见,查找失败的平均次数和我们 怀疑顺延 的次数有关。

于是,我们可以把一个位置 直到下一个空位的距离 先直接一眼看出,写在数组下方。

0 1 2 3 4 5 6
7 14 8 11 30
2 1 0 1 0 2 1

但是这只是我们怀疑的次数,我们一开始查它 本该对应的位置 的时候其实也应该算一次查找。所以每一位加一:

0 1 2 3 4 5 6
7 14 8 11 30
3 2 1 2 1 3 2

再把下面这些加起来,除上元素个数即可。


为什么查找成功的次数和平均探测次数是一样的:

其实两者中我们的动作可以看作是一样的,都是先查本位,往下找直到一个可以还没有被占用的位置。


有关二分查找的次数:

这个递推式是刚刚花 $5min$ 推出来的,不好证明。


直接定址法是完美哈希

$\color{salmon}{\texttt {进制相关:}}$

X进制转十进制——加权法:


十进制转X进制——短除法:

除以 $base$ 取模,倒序拼接成一个数。


X进制小数转十进制:


十进制小数转X进制:

短乘法,乘 $base$ 取整数部分,正序拼接成一个数。


任意的十进制有限小数,未必也是八进制有限小数。

$\color{salmon}{\texttt{ccf}}\color{salmon}{\texttt{赞歌:}}$

  • NOI全称:全国青少年信息学奥林匹克竞赛。

  • 今年是第 32 届IOI,中国队获得了 4 金。

  • 1984年,邓小平 指出:“计算机的普及要从娃娃做起。” CCF 于 1984 年创办全国青少年计算机程序设计竞赛(简称:NOI)。故今年是第 37 届,在 长沙 举行。

  • NOIP的创办时间:1995 年,故今年是第 26 届。

  • 2020年 开始, 除NOIP以外 的NOI系列其他赛事(包括冬令营、CTSC、APIO、NOI)将不再支持 Pascal语言和C语言

  • 2022年 开始,NOIP竞赛也将不再支持 Pascal语言 。即以后只有 C++ 一个了。

  • 竞赛费:0元 。但本着 谁受益谁承担成本 原则,参加竞赛所需的餐饮、住宿、交通、保险等费用由参加者自行承担。

  • 2011年 起,复赛提高组由 一试改为两试 ,分由两天进行。每天竞赛试题由原来的 4题改为3题

  • 第一届 APIO 于 2007 年在 澳大利亚 举办。中国第一次承办是在 2010 年。

  • 第一届 NOI 网络同步赛于 1999 年举办。


$\color{salmon}{\texttt{图论相关:}}$

概念 定义 判定
欧拉通路 过图中所有边 恰好一次行遍所有顶点 的通路 1.连通 2.恰有 0个或2个 奇度顶点
欧拉回路(欧拉闭迹) 过图中所有边 恰好一次行遍所有顶点 的回路 1.连通 2. 奇度顶点
哈密顿通路 过图中所有顶点 恰好一次 的通路 对于每对不相邻点,$d(u)+d(v)\geq N-1$ ($N$ 为顶点数, $d$ 为度数)
哈密顿回路 过图中所有顶点 恰好一次 的回路 所有顶点的度数大于等于 $\frac{N}{2}$ ($N$ 为顶点数)

二分图|能把顶点分成两个集合,且两个集合 内部没有边 的图|没有 奇环的图


有关欧拉回路和欧拉通路:

实则可理解为是 从任意一点都能一笔画全图 还是 得从某个特定的起点开始才能一笔画全图


有关欧拉回路和哈密顿回路:

欧拉回路:需一笔经过全边。

哈密顿回路:只需一笔能串起所有节点即可。


$\color{salmon}{\texttt{存图方式:}}$

$N$ 点, $M$ 边, $d$ 为一点出度。

存图方式 遍历一点出边 遍历全图 查询单边 跑拓扑/ $dfs$ 效率
邻接矩阵 $O(N)$ $O(N^2)$ $O(1)$ $O(N^2)$
邻接表 $O(d(N))$ $O(M)$ $O(d(N))$ $O(N+M)$
链式前向星 同上 同上 同上 同上

为什么邻接表和前向星一样:

因为前向星就是一种邻接表。


邻接矩阵中的无效元素个数:有向: $N^2-M\;$ 无向:$N^2-2M$

$\color{salmon}{\texttt{树相关:}}$

题型一:

在一棵树中,度为 $1$ 的结点数有 $a_1$ 个,度为 $2$ 的结点数有 $a_2$ 个, $\dots\dots$ ,度为 $n$ 的结点数有 $a_n$ 个,则度为 $0$ 的结点数为()个。

树上的度数指的是其出度。可理解为度为 $K$ 的结点会贡献出 $K$ 个出度。而除根结点外,每个结点都会消耗掉一个出度。要求最后出度消到 $0$ 。则有:

$a_0\cdot 0+a_1\cdot 1+\cdots +a_n\cdot n-(a_0+a_1+\cdots+a_n-1)=0$

被减数即贡献出的出度之和,减数即消耗掉的出度之和(这里减 $1$ 是因为根结点不消耗出度)。


题型二:

一棵 $K$ 叉树的结点数为 $N$ ,则它的最小高度为()。(设根结点深度为 $1$)

$K$ 叉树,则第 $x$ 层最多有 $K^{x-1}$ 个结点。

前 $x$ 层就最多有 $\lfloor\dfrac{K^x}{K-1}\rfloor$ 个结点。

则在最后一个结点之前高度就有 $\lfloor\log_{K}N(K-1)\rfloor$ 层。

那他这一层就是第 $\lfloor\log_{K}N(K-1)\rfloor+1$ 层。

_其他的题型都还简单(bushi)_


先序序列和中序序列相同的二叉树的特征为:空树 或者 任一结点均无左孩子的非空二叉树
中序序列和后序序列相同的二叉树的特征为:空树 或者 任一结点均无右孩子的非空二叉树
先序序列和后序序列相同的二叉树的特征为:空树 或 仅有一个结点的二叉树

$\color{salmon}{\texttt{刚学的几个式子(还不会证):}}$

$\sum_{i=1}^{n} i^3=\dfrac{n^2(n+1)^2}{4}$

$\sum_{i=1}^{n} i^4=\dfrac{n(n+1)(2n+1)(3n^2+3n-1)}{30}$

错排:$D(n) = n! [(-1)^2/2! + … + (-1)^{n-1}/(n-1)! + (-1)^n/n!]$


$\color{salmon}{\texttt{计算机知识:}}$

  • 冯诺伊曼的计算机结构的核心思想:

    1. 单处理机结构,机器以运算器为中心;

    2. 采用程序存储思想;

    3. 指令和数据一样可以参与运算;

    4. 数据以二进制表示;

    5. 将软件和硬件完全分离;

  • 在微机系统中,最基本的输入输出模块BIOS存放在 ROM 里。

  • 想不到吧,RAM 和 外存 也是 输出 设备!

  • 显存断电后是 不会 保存的。

  • 存储程序工作原理的特点是: 事先编制程序从存储器中依次取出程序自动执行

  • Fortran 是历史上的 第一种 高级语言,它面向 科学计算

  • Simula 67 是历史上的第一个支持 面向对象 的语言

  • Smalltalk 是历史上的第一个 完善的 支持 面向对象 的语言

  • 根据汉字国际GB2312-80的规定,一个汉字的内码码长为 16 bit

  • 汉字区位码 $+2020(H)$ 得国标码,国标码 $+8080(H)$ 得机内码。

  • 一级汉字以 拼音 排序,二级汉字以 偏旁部首 排序

  • 图像分辨率指图像中存储的 信息量

  • 显示分辨率是显示器在 显示图像 时的分辨率

  • 调色板中的颜色数依 颜色深度 而定


$\color{salmon}{\texttt{排序相关:}}$

时间复杂度分类:

$\qquad n^2\qquad $ $\qquad n\log n\qquad $ $\qquad n\qquad $ $\qquad$ 奇怪的复杂度$\;$
冒、插、选 归(严格)、堆(严格)、快(最优 $O(n)$ ,最劣 $O(n^2)$ ) 计 ( $O(n+w)$ ,$w$ 为值域),希尔(最优 $O(n)$ ,最劣 $O(n\log^2 n)$,基

_注:也有称希尔平均为 $O(n^{1.5}$)的说法_


稳定性分类:

$\qquad$稳定$\qquad$ $\qquad$不稳定$\qquad$
插、冒、计、归、基、桶 选、堆、快、希

即:

$n^2$ 除选择都为稳定。

$n\log n$ 除归并都为不稳定。

$n$ 都为稳定。


就地性分类:

$\qquad$就地$\qquad$ $\qquad$不就地$\qquad$
插、选、冒、希、快、堆 归、计、基、桶

_注:有的写法的归并是就地的_

即:

$n^2$ 都为就地。

$n\log n$ 除归并都为就地

$n$ 都为不就地。


其他知识:

  • C++ 的 $\operatorname{sort}$ 在数据较小的时候能自动转换为 堆排

  • 希尔排序的最后一趟是 插入排序 ,因为希尔本质上就是插入排序的优化算法。

  • 数据几乎有序时:插入、希尔、归并、冒泡 快于 快排

  • 平均 比较次数最少 的是快排。

  • 求第 $k$ 大最低的算法时间复杂度为 $O(n)$ ,由 快排 思想实现。

  • 堆排天下第一!(bushi


优先级:

$(\; ) > \lnot > \bigwedge > \bigvee$