菠萝🍍の初赛订正&笔记

T1

\(mkdir\)-创建目录 (make directory)
\(touch\)-创建文件(touch-触碰、创建)
\(cat\)-展示文件,查看文件内容(Concatenate)
\(cd\)-切换当前工作目录(Change Directory)
\(ls\)-列出当前目录内容(list)

T2

当用\(time\)命令运行一个程序,可以得到这三个时间指标:
1.\(real\):从程序开始到结束的实际经过时间
2.\(user\):程序自己代码执行占用的\(cpu\)时间
3.\(sys\):程序调用系统占用的\(cpu\)时间

关系:\(real=user+sys+等待时间\)

T3

冒泡排序:相邻比较,最好时间复杂度为\(O(n)\),最差时间复杂度为\(O(n^2)\),平均之间复杂度为\(O(n^2)\)

选择排序:每轮选择最小值放到最前面,最好、最差、平均时间复杂度均为\(O(n^2)\)

直接插入排序:将每个元素插入已经排序部分的合适位置,最好时间复杂度为\(O(n)\),平均、最坏时间复杂度为\(O(n^2)\)

归并排序:非常稳定,时间复杂度均为\(O(nlogn)\)

堆排序:使用堆数据结构,时间复杂度为\(O(nlogn)\)

快速排序:随机化选择基准,分左右,递归排序。最好、平均时间复杂度\(O(nlogn)\),最坏时间复杂度为\(O(n^2)\)

基数排序:按位桶排序,是一个稳定的算法。时间复杂度为\(O(d*(n+k))\),其中\(d\)是最大位数,\(k\)是基数(通常为\(10\))

总结:时间复杂度较为稳定的算法是归并排序、堆排序、基数排序、桶排序、选择排序(其他稳定排序时间复杂度均为\(O(nlogn)\),但是选择排序的时间复杂度为\(O(n^2)\))。
时间复杂度较为不稳定的算法是冒泡排序、直接插入排序、快速排序(快速排序的最好时间复杂度并不是\(O(n)\),最好时间复杂的为\(O(nlogn)\),最坏时间复杂度为\(O(n^2)\))

归并排序的过程:

T4

堆是一种完全二叉树,通常用数组去实现。
堆分为小根堆和大根堆。
大根堆的父节点的值大于等于所有子节点的数值。根节点是最大值。
小根堆的父节点的值小于等于所有子节点的数值。根节点是最小值。

堆的父子节点之间有大小关系,但是兄弟节点之间并没有。

堆相关的操作:
1.插入新元素:新元素放在最末尾的位置,并开始和父节点比较并交换,知道满足堆性质。时间复杂度\(O(logn)\)
2.弹出新元素:弹出堆顶,将堆顶于最后一个元素交换位置,删除最后一个元素,并从堆顶开始向下调整。时间复杂度为\(O(logn)\)
3.建堆:从一个无序数组的最后一个非叶子节点开始,依次向下调整,时间复杂度\(O(n)\)

建堆的更详细解释:自底向上(调整顺序,从树的第一个非叶子节点开始,逐步向树根移动)地向下调整(调整动作,处理某个节点的时候,如果它不满足堆性质,就让它和它的子节点进行交换)

T5

二进制:前缀\(0b\) (binary)
八进制:前缀\(0\)(Octal)
十六进制:前缀\(0x\)

任何一个\(r\)进制数都可以按照位权展开成十进制。
公式:\(ans=\sum(每一位数字*r^{(该位所在位置)})\)
改为所在位置:从小数点向左依次为\(0,1,2…\),小数点向右依次为\(-1,-2…\)

十进制转换为其他进制可以使用除以基数取余法(余数倒序排序)。

T6

欧拉路径:一条经过图中每条边恰好一次的路径
欧拉回路:一条经过图中每条边恰好一次,且起点和终点相同的路径
欧拉图:具有欧拉回路的图称为欧拉图
半欧拉图:具有欧拉路径但不具有欧拉回路的图

一个图是否存在欧拉路径或回路,取决于度数为奇数的顶点的个数:
当所有顶点的度数均为偶数,那么存在欧拉回路(一笔画)。当有两个顶点的度数为奇数,那么存在欧拉路径,但不存在欧拉回路。当有超过两个奇数顶点,那么图中既不存在欧拉路径,也不存在欧拉回路。

连通图的定义:在一个无向图中,如果任意两个顶点都存在一条路径,那么这个图就是联通的。
平凡图的定义:只由一个孤立顶点组成、且没有边的图。(平凡在数学中指的是最简单,最特殊,不需要考虑的情况)
非平凡图的定义:除了上述平凡图之外的所有其他图

哈密顿路径:一条经过图中每个顶点恰好一次的路径
哈密顿回路:一条经过途中每个顶点恰好一次,并且最终回到起点的回路。
哈密顿图:具有哈密顿回路的图

哈密顿图的判断没有充分必要条件,用搜索判断即可。

T7

连通图:无向图中的任意两个顶点之间都存在一条路径
强连通图:有向图的任意两个顶点之间都存在两条双向路径

一个\(n\)个顶点的连通图最少有\(n-1\)条边,最多有\(n(n-1)/2\)条边
要保证一个图是联通的,至少需要\((n-1)(n-2)/2+1\)条边

一个\(n\)个顶点的强连通图最少有\(n\)条边(形成一个有向环),最多有\(n*(n-1)\)条边(完全图)。要保证一个图是强连通图,至少需要\((n-1)(n-2)+1\)条边

T8

勾股定理推论:在三角形中,如果\(a^2+b^2<c^2\),则该三角形为钝角三角形。

T9

加法原理:分类,各类方法相互独立
乘法原理:分步,各步骤依次完成
排列:有序选数
组合:无序选数

常见题型与解题方法:

1.相邻问题

\(A,B,C,D,E\)五人排成一排,\(A\)和\(B\)必须相邻,询问有多少种排列方法

使用捆绑法,将必须要相邻的元素看做是一个整体,先内部排列,再与其他元素排列。
所以本题答案是\(A(2,2)*A(4,4)\)

2.不相邻问题

\(A,B,C,D,E\)五人排成一排,要求\(A,B\)不能相邻

使用插空法,先将其他元素进行排列,然后将不能相邻的哪些元素插入空隙。
最终答案是:\(A(3,3)*A(4,2)\)

3.定序问题

\(A,B,C,D\)四个人排成一列,要求\(A\)必须排在\(B\)的前面。

使用除法消序,先全排列,再除以固定顺序元素的全排列数。
对于\(A\)和\(B\)这两个人,她们的相对位置只可能是:\(A\)在\(B\)的前面,\(A\)在\(B\)的后面。
所以最后的答案是\(4!/2\)

4.分组分配问题

将4人分成两组,每组两人,询问有多少种分法

先分组(只考虑把元素分成几堆,不考虑这些堆的归属):
在分组的世界里,\((a,b)(c,d)\)和\((c,d)(a,b)\)是相同的。
所以入宫只考虑分组,那么将4人分成两组的方案数是:\(C(4,2)/2!\)

再分配(把分好的堆,给到具体的对象)
比如说,要把两组人分别派去参加初赛和复赛。因此最终的方案数=分组数*组数的阶乘(排列)

初赛模考总结

还是不太好,连去年上海的分数线都到不了。做个总结吧。

前两道题目还是考的计算机基础常识,昨天总结过的和今天考的不一样,重新做总结就好了。
线性数组比较和二叉树的深入理解确实没有复习过,做个笔记就好了。
最小生成树没弄过但是做对了,比较侥幸。
排列组合都做错了,得多练一练,把总结出来的笔记吸收掉。
对于哈希构造的方法也不太熟,得做笔记。

其他的阅读程序和补全程序题似乎是状态不太好。题目读错了很多。应该要好好休息,认真刷题。
好的,那接下来就把一些知识漏洞补上即可。

回头看了一下,发现实际上昨天已经复习过了。但是记得不太清楚了。

T1

\(mkdir\)-创建目录 (make directory)
\(touch\)-创建文件(touch-触碰、创建)
\(cat\)-展示文件,查看文件内容(Concatenate)
\(cd\)-切换当前工作目录(Change Directory)
\(ls\)-列出当前目录内容(list)

T2

给定一个长度为8的数组,若要得到其中最小值与次小值,至少要经过多少次比较?

使用锦标赛法。8个元素两两比较,在第一轮中选出四个最小值,四个最小值再选出两个,两个选一个(4+2+1)。
接下来我们要找次小值,次小值只有可能在最小值的手下败将中,手下败将一共有三个,那么进行两次比较就可以选出这三个次小值中的最小值。

T3

在任意二叉树中,存在一个恒等式:\(n_0=n_2+1\)(度为零的节点个数=度为二的节点个数+1)
度的定义:(度在树和图中的定义是不一样的)
1.二叉树:节点的子树个数(即有几个孩子)
2.图(有向图):出度+入度(出去的边+进来的边)
3.无向图:与节点相邻的节点个数

T4

1.生成树的定义:包含图中所有顶点,且边数=顶点数-1的连通子图
2.最小生成树:所有生成树中,边权值和最小的那一颗
性质:
1.最小生成树不一定唯一(权值相等的边可能导致多解)
2.最小生成树的边权和是唯一确定的

两种经典求最小生成树算法:

1.kruskal 按边权从小到大选边,不形成环就加入
时间复杂度\(O(mlogm)\)(瓶颈在边的排序)

2.Prim 从某个点出发,不断选择最近的点加入集合
时间复杂度\(O(mlogn)\)(优先队列优化)

如何判断最小生成树是否唯一:

1.如果图中所有边的权值都不同,则最小生成树唯一
2.如果存在权值相等的边,最小生成树可能唯一

T5

小明在练习中做到 4 道选择题,每个的选项都是(A,B,C,D),已知这四题的答案恰好A、B、C、D各出现一次,小明每次填完一题可以知道自己这题是否正确,请问在小明运气最差情况下至少试几次可以知道这四题的答案?

这道题目有个坑。
它不认为最后一次正确答案的选择是需要比较的。比如说,第一次比较有四个选项,那么只需要比较三次就可以得到正确答案。

T6

站台上已经有3个小朋友,现在想不改变这3个小朋友的相对位置的情况下,再安排上2个小朋友,请问有多少种方法?

posted @ 2026-07-26 11:20  Baltic  阅读(14)  评论(0)    收藏  举报