当前位置: 首页 > news >正文

【问题思考】二分查找对比三分查找(任意点查找)的优越性(熵的角度)【gemini完成】

这是一个非常深刻的问题,它将算法的优越性与信息论的基本原理——熵——联系在了一起。

从熵的角度来计算和证明二分查找的优越性,核心思想是:二分查找的每一次操作都提供了最大可能的信息增益,从而最快地减少了系统的不确定性。

让我们通过一个具体的例子来精确计算这一点。

理论基础:熵与信息增益

  1. 初始熵(不确定性): 假设我们有一个包含 NNN 个元素的有序数组。我们要找到其中的一个元素,但不知道是哪一个。每个元素被选中的概率是均等的,即 P(xi)=1NP(x_i) = \frac{1}{N}P(xi)=N1。根据信息论的定义,该系统的不确定性(初始熵)为:
    H初始=−∑i=1NP(xi)log⁡2P(xi)=−∑i=1N1Nlog⁡21N=log⁡2NH_{初始} = -\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=1NP(xi)log2P(xi)=i=1NN1log2N1=log2N
    这个值告诉我们,至少需要进行多少次二元(是/否)提问才能确定唯一的答案。

  2. 信息增益:每一次查找操作(例如,与某个元素进行比较)都相当于一个“提问”,它会减少我们的不确定性。我们希望每一次提问都能获得最大的信息量,即最大化地减少熵。

    一个问题所能提供的最大信息量是1比特,这发生在一个“是”和“否”的两种结果概率都为 0.50.50.5 的时候。这正是二分查找所做的:它将搜索空间一分为二,让目标在两个子空间中的概率都是相等的。

举例证明:二分查找 vs. 三分查找

假设我们有一个包含 8 个元素的有序数组:[1, 2, 3, 4, 5, 6, 7, 8],我们要从中查找一个元素。

初始熵:
H初始=log⁡28=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)×log⁡2(新空间大小A)+P(B)×log⁡2(新空间大小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×log⁡2(4)+0.5×log⁡2(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剩余=32=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)×log⁡2(新空间大小A)+P(B)×log⁡2(新空间大小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×log⁡2(5)+38×log⁡2(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.581.45+0.59=2.04 比特

信息增益H初始−H剩余=3−2.04=0.96H_{初始} - H_{剩余} = 3 - 2.04 = 0.96H初始H剩余=32.04=0.96 比特。

结论与计算证明

查找方式第一步操作第一步后的信息增益
二分查找将空间分为两个相等的子空间1 比特
三分查找将空间分为两个不相等的子空间0.96 比特

优越性计算:
二分查找每一步都能获得 1 比特 的信息,而三分查找在第一步只获得了 0.96 比特 的信息。这意味着二分查找在每一步都更有效地减少了不确定性。虽然这个差距看起来不大,但随着数组规模的指数级增长,这种差异会累积。

  • 二分查找在最坏情况下,每一步都将问题规模减半,因此总步数是 log⁡2N\log_2 Nlog2N
  • 三分查找在最坏情况下,每一步只会将问题规模减为 58\frac{5}{8}85,因此总步数会更长。

最终结论: 从信息论的角度看,二分查找的优越性在于它通过选择中间点,创造了两个概率相等的子问题。这种完美的对称性使得每一次操作都达到了信息增益的理论上限(1比特),从而用最少的步骤完全消除初始的不确定性(初始熵)。而任何其他非中间点分割都会产生概率不均等的子问题,导致每一步的信息增益都低于 1 比特,从而需要更多步骤才能达到相同的目标。


ps:可用数学方法严格证明(假设从点k处分),通过求导数找最小值。

http://www.dtcms.com/a/342318.html

相关文章:

  • 语义分割开山之作:FCN网络从入门到精通
  • 概率论基础教程第5章 连续型随机变量(三)
  • 【复杂网络技术】什么是图神经网络?
  • Elasticsearch 面试题完整笔记
  • 大数据面试常见问题
  • 【网络】http 协议中 Vary 标头的作用
  • UI自动化测试
  • 【力扣 Hot100】滑动窗口巧解字串问题
  • 鸿蒙中基础耗时分析:Time分析
  • Minecraft 1.18.2 或更高版本(如1.19.2、1.20.1)选择模组mod加载器
  • spark数据缓存机制
  • 在没有客户端的客户环境下,如何用 Python 一键执行 MySQL 与达梦数据库 SQL
  • 【开源项目】边浏览边学外语:开源工具 Read Frog 如何用 AI 重构语言学习
  • Java实战:深度解析SQL中的表与字段信息(支持子查询、连接查询)
  • 粗粮厂的基于flink的汽车实时数仓解决方案
  • Elasticsearch Ruby 客户端elasticsearch / elasticsearch-api
  • 小程序UI(自定义Navbar)
  • 【TrOCR】用Transformer和torch库实现TrOCR模型
  • yggjs_rlayout 科技风主题布局使用教程
  • StarRocks不能启动 ,StarRocksFe节点不能启动问题 处理
  • macos使用FFmpeg与SDL解码并播放H.265视频
  • 【TrOCR】模型预训练权重各个文件说明
  • 从800米到2000米:耐达讯自动化Profibus转光纤如何让软启动器效率翻倍?
  • 表达式(CSP-J 2021-Expr)题目详解
  • Django的生命周期
  • 如何在DHTMLX Scheduler中实现带拖拽的任务待办区(Backlog)
  • 非常飘逸的 Qt 菜单控件
  • logger级别及大小
  • 如何安装和配置W3 Total Cache以提升WordPress网站性能
  • C++设计模式--策略模式与观察者模式