判断题

问题

\(n\) 个判断题,答案事先确定。每次询问,你填出 \(n\) 道判断题的答案,对方告诉你答对了几道。请用尽量少的询问次数找出 \(n\) 道题的正确答案。

观察

\(n\) 个问题视为 \(n\)\(01\) 变量,每次询问时会得到一个 \([0,n]\) 之间的数字,信息量为 \(O(\log n)\)\(01\) 比特,问题总共的信息量为 \(n\)\(01\) 比特,因此询问次数的下界应为 \(O(\displaystyle \frac{n}{\log n})\) 级别。

将问题换一种表述方式:

有一个长度为 \(n\) 的二进制数 \(S=\overline{c_1c_2...c_n}\),每次询问二进制数 \(T=\overline{x_1x_2...x_n}\),得到 \(|S\oplus T|=\displaystyle \sum_{i=1}^n c_i\oplus x_i\) 。要求还原 \(S\)

将异或操作换成相对常见的运算:\(a\oplus b=a+b-2ab,\;a,b\in\{0,1\}\)

于是 \(\displaystyle |S\oplus T|=\sum_{i=1}^n c_i+\sum_{i=1}^n x_i-2\sum_{i=1}^nc_ix_i=|S|+|T|-2\sum_{i=1}^nc_ix_i\)\(|T|\) 是已知的,\(|S|\) 可以预先询问 \(|S\oplus 0|\) 得到,所以每次询问我们可以知道 \(\displaystyle \sum_{i=1}^n c_ix_i=\frac{1}{2}(|S|+|T|-|S\oplus T|)\)

构造

假设 \(x_i\in\{-1,0,1\}\),这样可以引入负数。考虑迭代构造询问矩阵 \(X=\{x_{i,j}\}\)\(q\)\(n\) 列, \(q\) 次询问中的第 \(i\)\(T=\overline{x_{i,1}x_{i,2}...x_{i,n}}\)

  • 初始 \(n=1\) 的情况,\(X=\begin{pmatrix}1\end{pmatrix}\)
  • 记上一轮的矩阵为 \(X'\),当前矩阵 \(X=\begin{pmatrix}X' & -X' & I \\ X' & X' & 0\end{pmatrix}\)

\(n=1\) 的时候 \(X\) 显然是可以得到答案的。设 \(X'\) 大小为 \(q\times n\),则 \(X\) 大小为 \(2q\times (2n+q)\),设 \(cnt_i\) 为第 \(i\) 次询问得到的 \(\sum c_ix_i\)

\[cnt_i=\sum_{j=1}^{n}x_{i,j}(c_j-c_{j+n})+c_{2n+i},\;\;cnt_{i+q}=\sum_{j=1}^n x_{i,j}(c_j+c_{j+n}) \]

所以 \(c_{2n+i}\equiv cnt_i+cnt_{i+q}(\!\!\!\!\mod 2)\),于是进一步

\[\sum_{j=1}^n x_{i,j}c_j =\frac{1}{2}(cnt_{i}+cnt_{i+q}-c_{2n+i}),\;\;\sum_{j=1}^nx_{i,j}c_{j+n}=\frac{1}{2}(cnt_{i+q}-cnt_i+c_{2n+i}) \]

我们得到了两个 \(q\times n\) 问题的所有询问答案,于是递归到 \(X'\) 中便可解出 \(S=\overline{c_1c_2...c_n}\)

\(X\) 的大小变化为 \((1,1)\rightarrow (2,3)\rightarrow(4,8)\rightarrow(8,20)\rightarrow...\),显然第 \(i\) 轮的行数为 \(2^i\),设 \(f_i\) 为第 \(i\) 轮的列数,则 \(f_i=2f_{i-1}+2^{i-1}=i2^{i-1}+2^i\)。于是我们用 \(2^i\) 次询问解决了 \(n=i2^{i-1}+2^i\) 规模的问题,询问次数是 \(O(\displaystyle \frac{n}{\log n})\) 的。

回到原问题,\(x_i\in\{-1,0,1\}\) 皆可以表示为两个 \(01\) 值的差,因此将 \(X\) 拆成 \(X_1-X_2\),每次通过两个询问的差得到需要的值。询问总数是 \(\displaystyle 2n\times \frac{2^i}{i\cdot 2^{i-1}+2^i}=\frac{4n}{i+2}\sim 4\frac{n}{\log n}\) 级别的。

优化

考虑另外构造询问矩阵 \(Y\)

  • \(n=1\)\(Y=\begin{pmatrix}1 \\ 0\end{pmatrix}\)
  • 设上一轮的为 \(Y'\)\(X_1,X_2\) 为到达相同轮数时 \(X\) 的拆解:\(Y=\begin{pmatrix}Y' & X_1 \\ Y' & X_2\end{pmatrix}\)

\(Y'\)\(X_1,X_2\) 的大小为 \(q\times n\)\(q\times n'\),则 \(Y\) 的大小为 \(2q\times (n+n')\)

\[cnt_i=\sum_{j=1}^n c_jy_{i,j}+\sum_{j=1}^{n'}c_{j+n}x_{1,i,j},\;\;cnt_{i+q}=\sum_{j=1}^n c_jy_{i,j}+\sum_{j=1}^{n'}c_{j+n}x_{2,i,j} \]

\(\displaystyle \sum_{j=1}^{n'}c_{j+n}x_{i,j}=cnt_i-cnt_{i+q}\),这是一个 \(q\times n'\) 的子问题,可以用之前的 \(X\) 解决。解出来后带入可以得到 \(\sum_{j=1}^n c_jy_{i,j}\) 的值,是一个 \(Y'\)\(q\times n\) 的子问题,同样可以递归解决。

\(Y\) 的大小变化为 \((2,1)\rightarrow (4,4)\rightarrow(8,12)\rightarrow(16,32)\rightarrow...\),则第 \(i\) 轮的行数为 \(2^{i+1}\),列数为

\[\sum_{i=0}^{n}f_i=\sum_{i=0}^n(i\cdot 2^{i-1}+2^i)=2^{n+1}-1+\sum_{i=1}^ni\cdot 2^{i-1}\\ =2^{n+1}-1+n(2^n-1)-\sum_{i=1}^{n-1}(2^i-1)=2^{n+1}-1+n2^n-n-2^{n}+2+n-1\\ =(n+1)2^n \]

因此是 \(2^{i+1}\) 次询问解决 \(n=(i+1)2^i\) 规模的问题,次数是 \(\displaystyle n\times \frac{2^{i+1}}{(i+1)2^i}=\frac{2n}{i+1}\sim2\frac{n}{\log n}\) 级别的,约为上一种的一半,\(n=1000\) 时需要 \(257\) 次询问。

延伸

又碰上 \(\text{Open Problem}\) 了 (恼

Optimal Nested Test Plan for Combinatorial Quantitative Group Testing

考虑令 \(T\) 为全 \(1\) 数,得到 \(S\)\(1\) 的个数 \(d\),那么问题转化为 \(\text{Combinatorial Quantitative Group Testing}\):给定一个大小为 \(n\)\(\text{population}\),其中有 \(d\) 个是 \(\text{defect}\) 的(默认 \(0<2d\leq n\),剩下的是对称的),每次 \(\text{test}\) 可以选取一个集合 \(S\sube \{1,2,...,n\}\)\(\text{test}\) 返回这个集合中有多少 \(\text{defect}\)\(\text{item}\),求找出所有 \(d\)\(\text{defect}\) 元素的最少 \(\text{test}\) 数量 \(N(n,d)\)

目前这个问题还是 \(\text{Open}\) 的,不过存在已知的上下界:

\(\text{Boolean CGT}\) 是指每次询问只会知道给定集合里是否有 \(\text{defect}\) 的元素,\(\text{Quantitaive CGT}\) 则是给出存在多少个 \(\text{defect}\) 的元素。\(\text{Non-adaptive}\) 是指所有询问时一次性问完的,然后再根据所有返回结果推出答案,\(\text{Adaptive}\) 则是询问可以根据之前的回答结果实时调整,就是分类讨论。

其中 \(\text{Lower Bound}\) 是数学推导出来的下界,\(\text{Upper Bound}\) 是已经得到的最优方案。

这里的问题对应的是右下角,信息论下界是 \(\log_d\binom{n}{d}\),而论文中给出的方案可以将询问次数做到 \(\lceil\log_2\frac{n}{d}\rceil\cdot d+\lceil\frac{n}{2^l}\rceil-d-1\),其中 \(l=\lceil\log_2\frac{n}{d}\rceil-1\)

最终关心的原问题的最少询问次数即 \(\displaystyle\max_{1\leq d\leq \frac{n}{2}}(N(n,d))=O(\frac{n}{\log n})\),下界 \(\displaystyle\log_d \binom{n}{d}\)\(d=n/2\) 时取得最大值 \(\displaystyle O(\frac{n}{\log n})\),与前面观察得到的相符。而我们之前实际构造的是 \(\text{Non-adaptive}\) 的询问矩阵,\(\displaystyle 2\frac{n}{\log n}\sim\max_d(4d\log_d(\frac{n}{d}))\),因此算是很优秀的做法。

posted @ 2022-10-21 19:12  Neal_lee  阅读(175)  评论(0编辑  收藏  举报