比特眼睛什么颜色的?
在研究比特(bi)的时候发现一个关于bit的有趣问题,就是比特(二进制位)的颜色是什么颜色呢? 这个问题很好玩,我们可以考虑这么一个问题,如果把所有 256种不同色的像素都按8×8的点阵方式排列起来,然后随机选取1个点,问这个点染成哪种颜色的概率最大?(当然,实际情况要比这复杂得多,因为像素的色深是24位,有 256^3种可能的色彩组合,而且人眼对亮度、饱和度和颜色温度的差异并不敏感,为了简化分析,这里做了一点近似处理,把256色和10亿色(RGB210模式)的问题等价地表示为8个二进制位数的问题——实际上,这种处理方法只改变了问题的边界条件,而对优化目标本身的影响是不大的. 为此,我们考虑这样一个问题:对于一个给定的8位数,求这8个二进制位染上颜色的概率,并最大化这个概率。
由于所有的像素都以相同的概率被选中,所以这个问题可以简化为一个数学上更合适的问题: 对于一个给定的 8 位数 r,找出一串 0 和 1,使得将其分别填入上述方程的右边时,左边所有项的符号相同且为正数!显然,这样做出来的串就是 8 个二进制位最可能染上颜色的情形了。
为了方便运算,我们可以将每一个方程右边的值取模 256 (注意此时 r 的取值范围已被简化为 [0, 256[ ),这样的话,每个方程右边只有 256 个选项 (因为任何整数都可以表示成 256 个 0 和 1 的排列);而左边的项是已知的 (Ai 和 Bi)。所以这是一个典型的线性规划问题,可以用拉格朗日乘子法求解。
接下来我们需要计算期望,即求解下面问题的最大值: 同样利用拉格朗日乘子法可以直接求解。
最后一步,需要求出使上面两个问题最大化的r的值。对于第一个问题来说,因为已经求出了 b 的表达式,所以只要把 r 代入到 b 中,就得到了使 P_r(0) 和 P_r(1) 最大的 r 值。而对于第二个问题,由于是一个凸优化问题,所以最大值一定存在于极值得点上,而极值得点的坐标可以通过求解下列方程组得到: 所以综合上述步骤,我们就可以通过逐次迭代的方式求得令P(0) 和 P(1) 最大的 r 值。
以上方法可以在 O(n \log n) 时间内收敛到最优解,其中 n 是待求的 r 的个数。