【问题思考】二分查找对比三分查找(任意点查找)的优越性(熵的角度)【gemini完成】
这是一个非常深刻的问题,它将算法的优越性与信息论的基本原理——熵——联系在了一起。
从熵的角度来计算和证明二分查找的优越性,核心思想是:二分查找的每一次操作都提供了最大可能的信息增益,从而最快地减少了系统的不确定性。
让我们通过一个具体的例子来精确计算这一点。
理论基础:熵与信息增益
-
初始熵(不确定性): 假设我们有一个包含 NNN 个元素的有序数组。我们要找到其中的一个元素,但不知道是哪一个。每个元素被选中的概率是均等的,即 P(xi)=1NP(x_i) = \frac{1}{N}P(xi)=N1。根据信息论的定义,该系统的不确定性(初始熵)为:
H初始=−∑i=1NP(xi)log2P(xi)=−∑i=1N1Nlog21N=log2NH_{初始} = -\sum_{i=1}^{N} P(x_i) \log_2 P(x_i) = -\sum_{i=1}^{N} \frac{1}{N} \log_2 \frac{1}{N} = \log_2 NH初始=−i=1∑NP(xi)log2P(xi)=−i=1∑NN1log2N1=log2N
这个值告诉我们,至少需要进行多少次二元(是/否)提问才能确定唯一的答案。 -
信息增益:每一次查找操作(例如,与某个元素进行比较)都相当于一个“提问”,它会减少我们的不确定性。我们希望每一次提问都能获得最大的信息量,即最大化地减少熵。
一个问题所能提供的最大信息量是1比特,这发生在一个“是”和“否”的两种结果概率都为 0.50.50.5 的时候。这正是二分查找所做的:它将搜索空间一分为二,让目标在两个子空间中的概率都是相等的。
举例证明:二分查找 vs. 三分查找
假设我们有一个包含 8 个元素的有序数组:[1, 2, 3, 4, 5, 6, 7, 8]
,我们要从中查找一个元素。
初始熵:
H初始=log28=3 比特H_{初始} = \log_2 8 = 3 \text{ 比特}H初始=log28=3 比特
这告诉我们,在最理想的情况下,我们至少需要 3 次“是/否”提问才能找到答案。
方案一:二分查找(Binary Search)
第一步: 比较中间元素,例如4
。问题是:“目标元素是否大于 4
?”
- 结果 A(是):搜索空间缩小为
[5, 6, 7, 8]
。这个结果发生的概率是 48=0.5\frac{4}{8} = 0.584=0.5。 - 结果 B(否):搜索空间缩小为
[1, 2, 3, 4]
。这个结果发生的概率是 48=0.5\frac{4}{8} = 0.584=0.5。
可以看到,两种结果的概率都是 0.50.50.5,提供了最大的信息增益(1比特)。
计算第一步后的剩余熵:
剩余熵是两种结果的熵的加权平均:
H剩余=P(A)×log2(新空间大小A)+P(B)×log2(新空间大小B)H_{剩余} = P(A) \times \log_2(\text{新空间大小}_A) + P(B) \times \log_2(\text{新空间大小}_B)H剩余=P(A)×log2(新空间大小A)+P(B)×log2(新空间大小B)
H剩余=0.5×log2(4)+0.5×log2(4)=0.5×2+0.5×2=2 比特H_{剩余} = 0.5 \times \log_2(4) + 0.5 \times \log_2(4) = 0.5 \times 2 + 0.5 \times 2 = 2 \text{ 比特}H剩余=0.5×log2(4)+0.5×log2(4)=0.5×2+0.5×2=2 比特
信息增益:H初始−H剩余=3−2=1H_{初始} - H_{剩余} = 3 - 2 = 1H初始−H剩余=3−2=1 比特。
第二步: 在大小为 4 的子空间中继续二分,再次将空间缩小为 2。
第三步: 在大小为 2 的子空间中继续二分,最终将空间缩小为 1。
总步数: 333 步。每次都完美地获得了 1 比特的信息,总信息量为 3 比特,正好是初始熵。
方案二:三分查找(Ternary Search)
假设我们不选择中间元素,而是选择一个非中间点,例如第 3 个元素3
。问题是:“目标元素是否大于3
?”
- 结果 A(是):搜索空间缩小为
[4, 5, 6, 7, 8]
。这个结果发生的概率是 58\frac{5}{8}85。 - 结果 B(否):搜索空间缩小为
[1, 2, 3]
。这个结果发生的概率是 38\frac{3}{8}83。
可以看到,这两种结果的概率是不相等的,这会导致信息增益的减少。
计算第一步后的剩余熵:
H剩余=P(A)×log2(新空间大小A)+P(B)×log2(新空间大小B)H_{剩余} = P(A) \times \log_2(\text{新空间大小}_A) + P(B) \times \log_2(\text{新空间大小}_B)H剩余=P(A)×log2(新空间大小A)+P(B)×log2(新空间大小B)H剩余=58×log2(5)+38×log2(3)H_{剩余} = \frac{5}{8} \times \log_2(5) + \frac{3}{8} \times \log_2(3)H剩余=85×log2(5)+83×log2(3)H剩余≈0.625×2.32+0.375×1.58≈1.45+0.59=2.04 比特H_{剩余} \approx 0.625 \times 2.32 + 0.375 \times 1.58 \approx 1.45 + 0.59 = 2.04 \text{ 比特}H剩余≈0.625×2.32+0.375×1.58≈1.45+0.59=2.04 比特
信息增益:H初始−H剩余=3−2.04=0.96H_{初始} - H_{剩余} = 3 - 2.04 = 0.96H初始−H剩余=3−2.04=0.96 比特。
结论与计算证明
查找方式 | 第一步操作 | 第一步后的信息增益 |
---|---|---|
二分查找 | 将空间分为两个相等的子空间 | 1 比特 |
三分查找 | 将空间分为两个不相等的子空间 | 0.96 比特 |
优越性计算:
二分查找每一步都能获得 1 比特 的信息,而三分查找在第一步只获得了 0.96 比特 的信息。这意味着二分查找在每一步都更有效地减少了不确定性。虽然这个差距看起来不大,但随着数组规模的指数级增长,这种差异会累积。
- 二分查找在最坏情况下,每一步都将问题规模减半,因此总步数是 log2N\log_2 Nlog2N。
- 三分查找在最坏情况下,每一步只会将问题规模减为 58\frac{5}{8}85,因此总步数会更长。
最终结论: 从信息论的角度看,二分查找的优越性在于它通过选择中间点,创造了两个概率相等的子问题。这种完美的对称性使得每一次操作都达到了信息增益的理论上限(1比特),从而用最少的步骤完全消除初始的不确定性(初始熵)。而任何其他非中间点分割都会产生概率不均等的子问题,导致每一步的信息增益都低于 1 比特,从而需要更多步骤才能达到相同的目标。
ps:可用数学方法严格证明(假设从点k处分),通过求导数找最小值。