Skip to content
NotesAlgorithm

算法设计与分析课程笔记,覆盖分治、图算法、最短路与复杂度基础。

图灵机与可解性 (Turing Machine and Decidability)

对于所有算法问题,我们可以将其描述为一个函数 f:{0,1}{0,1}。如果问题是对一个输入 x 返回“是”或“否”,那么:

  • f(x)=1 表示问题成立(接受)。
  • f(x)=0 表示问题不成立(拒绝)。

图灵机 (Turing Machine, TM) 是一个抽象的计算模型,它是算法的数学抽象,由以下部分组成:

  • 一条无限长的磁带(作为存储介质)。
  • 一个读写头(可以在磁带上移动并读写符号)。
  • 一个有限状态控制器

丘奇-图灵论题 (Church-Turing Thesis):任何“可计算”的过程都可以被图灵机模拟。这意味着图灵机定义了算法的计算极限。

定义:可判定性 (Decidability)

  • 可判定 (Decidable):如果存在一个图灵机 M,对于任何输入 x,它都能在有限步内停机,并给出正确答案(接受或拒绝),则称该问题是可判定的。这也对应于递归语言
  • 可识别 (Recognizable):如果存在一个图灵机 M,当 f(x)=1 时它最终会停机并接受;但当 f(x)=0 时,它可能停机拒绝,也可能永远运行下去(进入死循环)。这也对应于递归可枚举语言

停机问题 (Halting Problem)

停机问题是计算机科学中最著名的不可判定问题(Undecidable Problem)。

1. 问题定义

是否存在一个通用的图灵机 H,能够接收任意图灵机 M 的描述和输入 x,并准确通过有限步判断 M(x) 是会停机还是会永远运行

即判定函数:

H(M,x)={1如果 M(x) 停机0如果 M(x) 不停机

2. 证明:停机问题是不可判定的

采用反证法(基于对角线法):

  1. 假设存在这样一个完美的判定器 H(M,x)

  2. 构造一个新的虚构图灵机 D(取名为 Diagonalizer),它利用 H 来制造逻辑冲突。D 接收一个程序 M 的源码作为输入,其行为如下:

    • 内部调用 H(M,M)(即将 M 既作为程序又作为参数)。
    • 如果 H(M,M)=1M 停机),D 就故意进入死循环
    • 如果 H(M,M)=0M 不停机),D停机并返回。

    伪代码描述:

    python
    def D(M):
        if H(M, M) == "停机":
            while True: pass # 故意进入死循环
        else:
            return # 停机
  3. 考虑 D(D) 的运行情况

    • 如果 D(D) 停机:根据 D 的逻辑,这意味着 H(D,D) 的判定结果一定是“不停机”,这与事实(D(D) 停机)矛盾。
    • 如果 D(D) 不停机:根据 D 的逻辑,这意味着 H(D,D) 的判定结果一定是“停机”,这与事实(D(D) 不停机)矛盾。
  4. 结论:上述逻辑矛盾证明了假设的不成立。因此,不存在能够解决停机问题的通用算法 H。停机问题是不可判定的


在线算法 (Online Algorithm)

有时我们无法预知未来的输入,必须在不完全信息下做决策。

核心指标:竞争比 (Competitive Ratio)

对于算法 A 和情况 σ,若满足:

A(σ)γOPT(σ)

则称 A 的竞争比为 γ。其中 OPT(σ) 为已知所有信息的离线最优解。

示例:租装备 vs 买装备 (Ski Rental Problem)

  • 条件:租赁 1 元/天,购买 10 元。总天数 k 未知。
  • 离线最优解 OPT
    • k<10: 租 k 天,花费 k
    • k10: 第 1 天买,花费 10
  • 在线算法策略:当前 9 天租,第 10 天买。
  • 性能分析
    • 情况 1 (k<10):算法总花费 kOPT=k,比率为 1
    • 情况 2 (k10):算法总花费 9()+10()=19OPT=10,比率为 1.9
  • 结论:对该问题,在第 B 天购买(B 为购买价格)的策略可保证竞争比 γ=21B

随机化在线算法 (Randomized Online Algorithm)

不仅仅通过单一确定性策略,我们还可以使用概率组合算法

  • 策略实现:不再固定在第 B 天购买,而是按某种概率分布 pi 选择在第 i 天触发购买。
  • 性能优势:对于租装备问题,最优的随机化策略可将竞争比从 2 降低到 ee11.58
  • 背景逻辑:随机化模糊了决策边界,使得“对手”无法针对一个固定的购买日期构造出导致最坏比率的输入 k
最优概率分布设计 (Optimal Distribution)

在购买代价为 B 时,让第 x 天购买的概率密度符合:

f(x)=ex/BB(e1)

其对应的累积分布函数为 F(x)=ex/B1e1

具体实现步骤
  1. 采样:在算法开始前(第 1 天之前),从 [0,1] 均匀随机采样一个数 u
  2. 决策点:计算购买天数 t=Bln(1+u(e1))
  3. 执行:在第 t 天之前一直租赁;当到达第 t 天(或离散下的 t 天)时,立即执行购买。

通过该方案,在任意输入 k 下,算法的期望花费满足 E[Cost]ee1OPT,达到了在线算法理论上的最优竞争比。