- 分享
2028 届选拔考试
- @ 2025-9-12 18:17:29
二分与猜数
二分是解决很多问题的核心思想,在信息学奥赛中被广泛应用。
一个广为人知的问题是: 在 至 里猜一个整数 , 每次问一个整数 ,不能问两次相同的 , 会告诉他 与 的大小关系,直到 猜中为至,问 用什么策略猜最好呢?
答案是, 每次猜 可能存在区间的中间数,那么这个区间每次都会减小一半,比如最开始我们猜 ,那么 要么比 大,要么比 小,要么等于 ,这下 可能存在的区间大小都变成原来的一半,又因为 ,所以最多减半 7 次后, 可能存在的区间都只有 个数,那自然 也就被确定了。
假如问题推广到在 区间,那么容易发现猜的次数是 次的,这里 代表猜的次数的渐进数量级,如:
给 个同学点名的复杂度是 的,给 个同学点名也是 的,给 个同学点名的复杂度的还是 的,因为只要我们多找一个老师同时点,那么每个老师需要点的次数还是不超过 次。而给 个同学点名的复杂度是 的,因为假如你请 个老师点名, 为常数,那么当 时每个老师点名次数依旧超过了 。如果把老师看做计算机单元,点名学生看成计算,那么我们仅仅需要考虑增加计算机单元解决不了的问题。
给出 函数的定义: 。
那么怎么证明这个策略最优呢?我们先定义最优的策略为最大猜到答案次数最小的策略,那么每一次猜测相当于我们把问题分成了两支,就可以画成一个树形图:

这是一个 时画出的最优决策之一下的树形图。
这样的树叫做决策树,每个决策下一步是两个不同的决策,而一个决策也对应着答案,也就是这一次猜到了的结果,每个点都对应着一个答案。
对于一个猜 里整数的决策树:
-
这个决策树一共有多少个节点?
-
在图中这样的决策方法中,猜哪些数字会导致猜到 的次数最大?
-
构造一个 时最劣决策方式的树形图(即让猜到 最大可能次数最大的决策)。
-
证明决策树至少存在一个需要 次才能猜到的决策。
提示:
第 层的节点个数至多是第 层的两倍。
排序问题:对于 个互不相同的数,把他们从大到小排成一排,请给出尽量快的算法。
二分算法是许多排序算法的核心思想,给出这样一个排序算法:
对于一个长度为 的序列 ,我们每次随机拿出一个数 ,把比 小的数放到 前面,比 大的数放在 后面,那么我们只需要再对比他大的数做一次同样的过程,比他小的数做一次同样的过程,最后一定能得到有序的序列,比如对于序列 :
-
我们选定 当中间那个数,序列变成:。
-
再分别对前一半序列 和后一半 做同样的过程:
-
前一半序列选定 当中间,那么只剩 单个元素一定有序,得到
-
后一半序列选定 当中间,前后都只剩一个元素一定有序,得到
-
那么原序列就变成了 显然有序。
概率论告诉我们每次选的数都靠近中间,所以和上面猜数是本质相同的过程,但因为我们每一次决策都要把数重排,需要 的复杂度,随机下期望有 层,所以在随机下复杂度期望为 。
- 在这种排序算法的启发下,试给出一个求出序列第 大是谁的 算法。
提示: 复杂度为:$O(n+\frac n 2 + \frac n 4 + \frac n 8+ \cdots ) = O(n)$
对于原序列来说,排序结果无非是对原序列标号的重排之一,而原序列共有 $n!=n\times(n-1)\times(n-2)\times\cdots\times 2\times 1$ 种重排,每次比较 和 得到的信息无非是 在 前面或者是 在 的前面两种,那么按照这样可以画出一个类似猜数的决策树,每一种原序列的重排都是决策树的一个终止节点(答案)。
- 试证明基于比较的排序复杂度下界为 。
提示:
位与功能完备
在生活中,加法乘法是最普遍被认识的运算。众所周知,计算机是以二进制的形式存储信息的,正因如此,对于计算机,最基本的运算并非加法或乘法,而是 布尔运算。
就像十进制下的一位上可以是 到 ,二进制下的一位上只会是 或是 ,布尔运算就是对 或 之间进行的运算,下面是几种常见的布尔运算:
- 运算,表示取反:
- 运算,表示取或, 当且仅当 中至少有一个是 ,否则为 :
-
运算,表示取与, 当且仅当 都为 ,否则为 。
-
运算,表示取异或, 当且仅当 不等于 ,否则为 。
- 对于 运算,我们能给出这个运算的真值表如下,请画出 与 的真值表。
我们称一个布尔运算组合是功能完备的,当且仅当这些位运算组合出的新运算就可以构造出全部的布尔运算,如:
$$A \text{ and } B = ((\text{not } A)\text{ or }(\text{not B})) $$是用了 构造了 。
- 请求出有多少本质不同的二元布尔运算,我们称两个二元布尔运算本质不同,当且仅当存在一对 对两个布尔运算的结果是不同的,例:
存在 时,,所以我们称 本质不同。
- 已知 这三种运算的组合可以构造出全部的二元布尔运算,试证明 可以构造出全部的二元布尔运算,其中:
-
试证明 是功能完备的(不考虑 0 元的情况)。
-
试使用 构造出二进制下的整数加法。
开放题:
-
你为什么学习信息学奥赛?
-
你有哪些编程、数学、计算机方面的基础?
-
你迄今为止遇到过最大的问题是什么,你采用了哪些手段解决它?
65 comments
-
OWEN @ 2025-9-12 19:23:11
额
-
@ 2025-9-12 19:22:56豆包
-
@ 2025-9-12 19:21:54
👀 3 -
@ 2025-9-12 19:20:41
🤡 1 -
@ 2025-9-12 19:19:52
哇哇哇
-
@ 2025-9-12 19:19:40

-
@ 2025-9-12 19:16:10666演都不演了
🤡 1🤣 1 -
@ 2025-9-12 19:15:58
6,啥也不会
🤡 1🤣 1 -
@ 2025-9-12 19:15:13
-
@ 2025-9-12 19:10:17
6666666666666666666666666666666666666666666666
🤣 4🤡 1 -
@ 2025-9-12 19:08:36
俺不中嘞
🤡 5 -
@ 2025-9-12 19:08:02
1
🤡 3 -
@ 2025-9-12 19:07:53
啊~~~
🤡 3 -
@ 2025-9-12 19:03:03我不中了
🤡 5🌿 1 -
@ 2025-9-12 18:55:39
我不h
🤡 2
- ‹ Previous
- 1
- 2