算法分类

489 阅读3分钟

1. 问题复杂性分类

计算的定义:1936年图灵在图灵机模型上提出计算形式化的定义。将符号串变成另一个符号串。

图灵机的结构:一台多带图灵机由一个有限状态控制器和k条读写带组成。

  • 可计算与不可计算问题
    • 停机问题:停机问题计算机不可解决,在程序静态编译时可进行检查。
  • 实际可计算问题的定义:20世纪70年代
    • Cook-Karp 论题:一个问题是实际可计算的,当且仅当它在图灵机经过多项式时间(步数)计算得到正确结果。
      • 实际可计算
      • 实际不可计算
  • 易解问题与难解问题
    • 易解问题:多项式时间内可解决
    • 难解问题:指数时间内可解决

为什么多项式时间为易解问题和难解问题的分解?

  • 多项式函数和指数函数的增长率有本质区别。
  • 计算机性能的提高对多项式时间算法和指数时间算法影响不同。对多项式时间算法性能提升较大。

2. P 类与 NP 类问题

从是否被验证(判定问题)的角度,计算复杂理论将难解问题进一步划分为 NP 问题和非 NP 问题。所有多项式时间内验证的问题为 NP 问题。

  • 汉密尔顿问题:
    • 求解问题:给定一个图,求出它的汉密顿回路。
    • 判定问题:给出任意一个序列,判断是不是汉密顿回路。
  • TSP,NP 完全问题
    • 求解问题:求最短路径
    • 判定问题:给定一条路径,判断是不是最短路径。

确定性算法与 P 类问题

Polynomial

  • 确定性算法:算法在执行过程中每一步只有一个确定的结果。对于同一输入实例,所得的结果严格一致。
  • P 类问题:具有多项式时间确定性算法来求解的判定问题

非确定性算法与 NP 类问题

Non-deterministic Polynomial

  • 非确定性算法:采用如下的猜测并验证的方式工作。
    • 猜测阶段:对问题的输入实例产生一个任意字符 y,每运行 y 值可能不同。
    • 验证阶段:用确定性算法验证。
  • NP 类问题:具有多项式时间非确定性算法来求解的判定问题

3. NP 完全问题

# 输入,问题,输出
I1 -> 问题1 -> O1
I2 -> 问题2 -> O2

则问题1到问题2的变换有3个步骤:

  • 输入转换:I1 -> I2
  • 问题求解:I2 -> 问题2 -> O2
  • 输出转换:O2-> O1

如在 O(t(n)) 时间内完成上述转换,则称问题 1 以t(n) 时间变换到问题 2。

  • 定义

    令问题1为判定问题,如果问题1属于NP问题,且对于NP 类问题中的每个命题,都可以由问题1变换而来,则称问题 1 为一个 NP 完全问题,记为 NPC。

    • 第一个 NPC 问题:SAT,布尔可满足问题。