HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

2025-01-01 19:50阅读: 29评论: 0推荐: 0

算法设计与分析3 NP, NPC, NP-hard

NP问题

NP问题

给定一个解,多项式时间内验证是不是正解

NP 完全问题

问题是 NP 完全的,这意味着:

  • 该问题的解可以在多项式时间内验证。
  • 目前没有已知的多项式时间算法可以解决所有实例。

规约(必考)

核心目的:证明两个问题是同等难度的问题。
一般性问题是NPC,特殊的问题也是NPC

三种规约策略

简单等价规约

从特殊到一般

顶点覆盖(Vertex cover)
图的顶点覆盖(有时是节点覆盖)是一组顶点的集合,使得图的每个边缘至少与集合中的一个顶点相连接。
image

集合覆盖问题

集合覆盖(Set Cover)是一个经典的组合优化问题,通常表述为:给定一个集合 U 和一组子集 S1,S2,,Sm,求最小的子集集合 SS1,S2,,Sm,使得 S 的并集覆盖了整个集合 U

$ 例子

假设有一个集合 U={1,2,3,4,5},以及以下子集:

  • S1=1,2
  • S2=2,3
  • S3=3,4
  • S4=4,5

在这个例子中,集合 S1,S2,S3,S4 中最小的子集集合可能是 S2,S4,因为它们的并集 2,3,4,5 覆盖了 U

将集合S1,S2,,Sm,类比到 顶点覆盖问题的V, 那么集合中的元素就类比到 图中的 边。
问题就
image

通过编码Encoding with gadgets

CNF-SAT 问题

,即合取范式满足性问题,是计算机科学领域的一个基础性问题,也是 NP 完全问题的典型代表。 它的本质在于判断一个以合取范式 (CNF) 表示的布尔公式是否存在一种变量赋值,使得该公式的取值为真。

基本概念:

  • 布尔变量: 只能取真 (true) 或假 (false) 两种值。
  • 文字: 一个布尔变量,或者它的否定 (negation)。例如,A 是一个文字,¬A 也是一个文字。
  • 子句: 由若干个文字通过“或” (∨, 逻辑或) 连接而成。例如,(A ∨ ¬B ∨ C) 是一个子句。
  • 合取范式 (CNF): 由若干个子句通过“与” (∧, 逻辑与) 连接而成。例如,(A ∨ ¬B) ∧ (¬A ∨ C) ∧ (B ∨ C) 是一个 CNF 公式。

CNF-SAT 问题就是:
给定一个 CNF 公式,判断是否存在一种对其中布尔变量的真值赋值,使得整个公式的取值为真。如果存在这样的赋值,则称该 CNF 公式是可满足的 (satisfiable),否则称它是不可满足的 (unsatisfiable)。

3-CNF 问题

是 CNF-SAT 问题的一个特殊情况,其中每个子句都恰好包含三个文字。

给定一个 3-CNF 公式(即每个子句都包含三个文字的 CNF 公式),判断是否存在对其中布尔变量的真值赋值,使得整个公式的取值为真。

例子:

(A ∨ ¬B ∨ C) ∧ (¬A ∨ B ∨ ¬C) 是一个 3-CNF 公式。

3-CNF-SAT规约 independent-Set

image

图片来自

子句内部的三角形表示 只能选一个元素

转换成size为k的独立集问题(k为子句数量)

例题

SubSet sum problem <=p Partition Problem

Subset Sun: Given a set of integers. T={t1,t2,..;tn} • is there a non-empty subset whose sum is k.

Partition : (Number Partitioning) is the task of deciding whether a given Set W of positive integers can be partitioned into two subsets W. & W₂, such that the sum of the numbers Vi equal's to the sum of W₂

  • 子集 Sun:给定一组整数。T={t1,t2,..;tn} • 是否存在一个非空子集,其和为 k。

  • 分割:(数字分割)是决定给定的正整数集合 W 是否可以分成两个子集 W1 和 W2,使得数字 W1 的总和等于 W2 的总和
    https://www.youtube.com/watch?v=_mpVTPBepjY

image

子集求和问题定义:给定一个整数集合 S 和一个目标值 T,问是否存在一个子集 SS,使得 S 中元素的和等于 T

数字分割问题定义:给定一个整数集合 S,问是否可以将其分割成两个子集 S1S2,使得 S1S2 的元素和相等。

可以通过以下步骤将数字分割问题规约到子集求和问题:

  1. 输入转换:给定一个集合 S,计算集合中所有元素的和 sum(S)

  2. 目标值计算:如果 sum(S) 为奇数,则直接返回“不可分割”,因为无法将奇数分成两个相等的整数。如果 sum(S) 为偶数,定义目标值为 T=sum(S)2

  3. 子集求和实例:然后,将问题转化为子集求和问题:问是否存在子集 SS,使得 S 中元素的和等于 T

反向规约 同样地,也可以将子集求和问题规约到数字分割问题:

  1. 输入转换:给定一个集合 S 和目标值 T

  2. 集合构造:在数字分割问题中,构造一个新的集合 S=S{T}

  3. 判断分割:然后判断是否可以将 S 分成两个子集,使得两个子集的和相等。如果存在 S 的一个子集和等于 T,则可以将 S 分成两个和相等的部分。

np完全问题证明实例

证明 哈密顿回路 <=p TSP

哈密顿环问题

证书:特定解的解决方案

哈密顿环问题(Hamiltonian Cycle Problem)是图论中的一个经典问题,属于 NP 完全问题。以下是该问题的详细介绍。

问题描述

定义:给定一个无向图 G=(V,E),哈密顿环问题的目标是判断是否存在一条哈密顿环(Hamiltonian cycle),即一条经过图中每个顶点恰好一次并最终回到起始顶点的闭合路径。

例子 考虑一个简单的无向图:

A
/ \
B---C
\ /
D

在这个图中,存在的哈密顿环可以是 ABDCA

旅行商问题(Traveling Salesman Problem, TSP)

问题描述

定义:给定一组城市及其之间的距离(或成本),旅行商问题的目标是找到一条最短的路线,使得旅行商从一个城市出发,经过所有其他城市恰好一次,并最终返回到起始城市。

数学形式

给定一个完全有向带权图 G=(V,E),其中顶点集 V 代表城市,边集 E 代表城市间的距离或成本。问题可以表述为:

  • 找到一个哈密顿环,使得该环的总边权最小。

例子

假设有 4 个城市 A, B, C, D,它们之间的距离如下:

A B C D
A 0 10 15 20
B 10 0 35 25
C 15 35 0 30
D 20 25 30 0

在这个例子中,旅行商的最短路线可能是 A → B → D → C → A。

求解

image

总结(必看)

P、NP、NPC、NP-hard

P:问题存在一个多项式时间的求解算法。
NP:问题存在一个多项式时间的验证算法(在多项式时间内验证一个给定的解是否正确)

NPC:对于一个(判定性)问题q,满足以下两个条件,那么它就是NPC问题(NP-完全的/NP-complete):

  1. q属于NP
  2. NP中任一问题均可多项式时间多一归约到q(即任何一个NP问题都可以在多项式时间内转化为该问题的一个实例)。

NP-hard (NP难):如果一个问题满足所有NP问题都可以规约到它,但不一定属于NP类,那么它就是NP-hard问题。

四者的关系
image


1. P (Polynomial Time, 多项式时间)

  • 定义: 如果一个问题存在一个求解算法,其时间复杂度是输入规模的多项式函数,那么这个问题就属于P类问题。
  • 例子: 数组排序(例如归并排序、快速排序)、线性搜索、图的广度优先搜索(BFS)和深度优先搜索(DFS)等。
  • 特点: P类问题通常被认为是“易解的”,因为它们可以在合理的时间内解决,即使输入规模很大。

2. NP (Non-deterministic Polynomial Time, 非确定性多项式时间)

  • 定义: 如果一个问题存在一个验证算法,可以在多项式时间内验证一个给定的解是否正确,那么这个问题就属于NP类问题。
  • 关键: NP问题强调的是“验证”的效率,而不是“求解”的效率。
  • 例子:
    • 旅行商问题 (TSP): 给定一系列城市和它们之间的距离,是否存在一条访问每个城市恰好一次并返回起点的路径,其总长度不超过某个给定的值?给定一条路径,我们可以在多项式时间内验证其是否满足要求。
    • 哈密顿回路问题 (Hamiltonian Cycle Problem): 给定一个图,是否存在一条路径,该路径访问每个顶点恰好一次并返回起点?给定一条路径,我们可以在多项式时间内验证其是否是哈密顿回路。
    • 子集和问题 (Subset Sum Problem): 给定一个整数集合和一个目标值,是否存在一个子集,其元素之和等于目标值?给定一个子集,我们可以在多项式时间内计算其元素之和并与目标值进行比较。
  • 重要说明:
    • NP问题不一定存在多项式时间的求解算法。我们只知道如果给定一个解,我们可以高效地验证它。
    • 所有P类问题都是NP问题(因为如果一个问题可以在多项式时间内求解,那么一定也可以在多项式时间内验证解的正确性),即P⊆NP。

3. NPC (NP-Complete, NP完全)

  • 定义: 如果一个问题满足以下两个条件,那么它就是NPC问题:
    1. 它是NP问题。
    2. 所有NP问题都可以规约到它(即任何一个NP问题都可以在多项式时间内转化为该问题的一个实例)。
  • 规约 (Reduction): 将问题A规约到问题B意味着,如果存在一个解决问题B的有效算法,那么也可以使用该算法来解决问题A。
  • 重要意义: NPC问题是NP问题中最“难”的问题。如果任何一个NPC问题能够找到多项式时间的解法,那么所有NP问题都将可以在多项式时间内解决,即P=NP。
  • 例子: 旅行商问题 (TSP)、哈密顿回路问题、子集和问题、布尔可满足性问题 (SAT) 等。

4. NP-hard (NP难)

  • 定义: 如果一个问题满足所有NP问题都可以规约到它,但不一定属于NP类,那么它就是NP-hard问题。
  • 关键区别: NP-hard问题不要求自身是NP问题。也就是说,NP-hard问题可能无法在多项式时间内验证一个给定的解。
  • 例子: 停机问题 (Halting Problem) 是一个经典的NP-hard问题,但它不是NP问题。
  • 重要说明: NPC问题一定是NP-hard问题,但NP-hard问题不一定是NPC问题。

总结

  • P问题是可以在多项式时间内解决的问题。
  • NP问题是可以在多项式时间内验证解的问题。
  • NPC问题是NP问题中最难的问题,所有NP问题都可以规约到它。
  • NP-hard问题比NPC问题更广泛,它不要求自身是NP问题。

其他

■ NP-完全性理论的局限性

易解问题(P问题):可多项式时间内求解的问/题

难解问题(NP问题):需超多项式时间求解的问题

NP-完全性理论既没有找到第二类问题的多项式时间的算法,也没有证明这样的算法就不存在,而是证明了这类 问题计算难度之等价性(彼此间困难程度相当)。因此,NPC具有如下性质:若其中1个问题多项式可解当且仅当 其他所有NPC问题亦多项式可解

■难解问题与易解问题之相似性

  1. 最短/最长简单路径
    单源最短路径问题:对有向图G,时间O(VE), P问题
    两点间最长路径:NPC问题,即使所有边上权为1

  2. 欧拉环/哈密尔顿圈(G为无向图或有向图)
    欧拉环:G中有通过每条边恰好一次的环? P,多项式时间可解
    哈氏圈:G中有通过每个顶点恰好1次的圈? NPC

关于归约总结(续)
3. (非常有用!!!)寻找特例:
■某些NPC恰恰是其他NPC的特例,比如partition problem 是 knapsack problem的特例,如果你知道问题X是NPC,并且X是Y的特例,那么Y必定 也是NPC,为什么?
因为Y比X更具一般性,问题Y至少与X一样难!!!

  1. 寻找合适的归约源:
    ■ 有的时候,我们会选择跨域归约策略,3-CNF可满足性问题是一个进行跨域
    归约合适的归约源。既可以归约到团问题(Graph)也可以归约到子集和
    (knapsack branch);
    ■ 在图问题中,如果需要选择部分图,且无需考虑顶点顺序,那么顶点覆盖问 题通常是一个合适的归约源

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/18499024

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起