Appearance
图灵机与可解性 (Turing Machine and Decidability)
对于所有算法问题,我们可以将其描述为一个函数
表示问题成立(接受)。 表示问题不成立(拒绝)。
图灵机 (Turing Machine, TM) 是一个抽象的计算模型,它是算法的数学抽象,由以下部分组成:
- 一条无限长的磁带(作为存储介质)。
- 一个读写头(可以在磁带上移动并读写符号)。
- 一个有限状态控制器。
丘奇-图灵论题 (Church-Turing Thesis):任何“可计算”的过程都可以被图灵机模拟。这意味着图灵机定义了算法的计算极限。
定义:可判定性 (Decidability)
- 可判定 (Decidable):如果存在一个图灵机
,对于任何输入 ,它都能在有限步内停机,并给出正确答案(接受或拒绝),则称该问题是可判定的。这也对应于递归语言。 - 可识别 (Recognizable):如果存在一个图灵机
,当 时它最终会停机并接受;但当 时,它可能停机拒绝,也可能永远运行下去(进入死循环)。这也对应于递归可枚举语言。
停机问题 (Halting Problem)
停机问题是计算机科学中最著名的不可判定问题(Undecidable Problem)。
1. 问题定义
是否存在一个通用的图灵机
即判定函数:
2. 证明:停机问题是不可判定的
采用反证法(基于对角线法):
假设存在这样一个完美的判定器
。 构造一个新的虚构图灵机
(取名为 Diagonalizer),它利用 来制造逻辑冲突。 接收一个程序 的源码作为输入,其行为如下: - 内部调用
(即将 既作为程序又作为参数)。 - 如果
( 停机), 就故意进入死循环。 - 如果
( 不停机), 就停机并返回。
伪代码描述:
pythondef D(M): if H(M, M) == "停机": while True: pass # 故意进入死循环 else: return # 停机- 内部调用
考虑
的运行情况: - 如果
停机:根据 的逻辑,这意味着 的判定结果一定是“不停机”,这与事实( 停机)矛盾。 - 如果
不停机:根据 的逻辑,这意味着 的判定结果一定是“停机”,这与事实( 不停机)矛盾。
- 如果
结论:上述逻辑矛盾证明了假设的不成立。因此,不存在能够解决停机问题的通用算法
。停机问题是不可判定的。
在线算法 (Online Algorithm)
有时我们无法预知未来的输入,必须在不完全信息下做决策。
核心指标:竞争比 (Competitive Ratio)
对于算法
则称
示例:租装备 vs 买装备 (Ski Rental Problem)
- 条件:租赁
元/天,购买 元。总天数 未知。 - 离线最优解
: - 若
: 租 天,花费 。 - 若
: 第 天买,花费 。
- 若
- 在线算法策略:当前
天租,第 天买。 - 性能分析:
- 情况 1 (
):算法总花费 , ,比率为 。 - 情况 2 (
):算法总花费 , ,比率为 。
- 情况 1 (
- 结论:对该问题,在第
天购买( 为购买价格)的策略可保证竞争比 。
随机化在线算法 (Randomized Online Algorithm)
不仅仅通过单一确定性策略,我们还可以使用概率组合算法:
- 策略实现:不再固定在第
天购买,而是按某种概率分布 选择在第 天触发购买。 - 性能优势:对于租装备问题,最优的随机化策略可将竞争比从
降低到 。 - 背景逻辑:随机化模糊了决策边界,使得“对手”无法针对一个固定的购买日期构造出导致最坏比率的输入
。
最优概率分布设计 (Optimal Distribution):
在购买代价为
其对应的累积分布函数为
具体实现步骤:
- 采样:在算法开始前(第
天之前),从 均匀随机采样一个数 。 - 决策点:计算购买天数
。 - 执行:在第
天之前一直租赁;当到达第 天(或离散下的 天)时,立即执行购买。
通过该方案,在任意输入