NP完全问题分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可以把前述判定问题的提法改变:给定两个大 小均为n的集合A和B,判断这两个集合中是否不 存在着相同的元素? 这个问题是前述问题的补 定义:令C是一类问题,如果对C中的任何问 题C,如果的补也在C中,则称C类问题在 补集下封闭
2.1.4 P类问题在不集下封闭定 理
定理:P类问题在补集下是封闭的
定义:如果对某个判定问题,存在着一个非 负整数k,对输入规模为n的实例,能够以O(nk) 的时间运行一个确定的算法,得到yes或no的答 案,则称该判定问题是一个P(Polynomial)类 判定问题 举例:给定两个大小均为n的集合A和B,判断 这两个集合中是否存在着相同的元素?
2.1.3 在补集下封闭的定义
2.1.7 判定问题规约定理示例
问题是:给定一个长度为n整数数组D和一个整数k判断是否存 在D中的一个元素和k相等。 问题是:给定一个长度为m整数 数组E和一个整数k判断是否存在E中的两个元素,其和与k相等 假设问题的输入实例I是一个长度为n=4的数组{2, 4, -1, 8}, 和一个整数3,转换算法A如下: int[] transfer(int n, int[] inst_ba){ int[] inst = new int [n*(n-1)/2]; int count = 0; for (int i=0; i<n; i++) for (int j=0; j<i; j++){ inst[count] = inst_bar[i] + inst_bar[j]; count++; } }
2.1.6 判定问题规约的定理
定理:令和是两个判定问题,如果P,并 且 p ,那么P
证明:根据和 的规约特性,存在着多项式 算法A,把的实例I转换为的实例I,并且二者 运算结果一致。由于A是多项式的,因此,其输出 也是多项式的。A的运算结果(就是I)是一个多 项式规模的结果。而的实例可以用多项式规模的 时间运算得到结果。处理的实例I所需时间是: I向I转换所需时间 + 处理I所需时间,这两个时间 都是多项式级别的,因此处理的实例I是多项式 级别的
1.3 优化问题向判定问题的转换
判定问题举例:给定一个带整数权的有向图G和一个正整数k, 是否存在着一条长度小于k的哈密尔顿回路? 优化问题举例:给定一个带整数权的有向图G,其最短路径 长度的哈密尔顿长度是多少?
如果上述判定问题用下面函数解决: boolean Hamilton(Graph g, int k); 则上述优化问题可以用二分的方式在下面的函数中解 决:
计算复杂性理论有两个基本论题:Church-Turing论题和 Cook-Karp论题 Church-Turing论题:一个问题时可计算的当且仅当它在 图灵机上经过有限次计算得到正确的结果。这个论题把人 类所面临的问题分为两类:一类是可计算的,另一类是不 可计算的。但“有限次计算”是一个宽松的条件
return no; //修改为yes
}
2.1.5 判定问题规约的定义
定义:令和是两个判定问题,如果存在一个 具有如下性能的算法A,可以用多项式的时间,把 问题的实例I转换为问题的实例I,使得I与I的 答案一致,就称以多项式时间规约于,记为 p
举例:问题是:给定一个长度为n整数数组D 和一个整数k判断是否存在D中的一个元素和k相等。 问题是:给定一个长度为m整数数组E和一个整 数k判断是否存在E中的两个元素,其和与k相等。 用于的实例I向的实例I转换的多项式算法A
Байду номын сангаас
函数transfer输出一个数组{6, 1, 3, 10, 12, 7},规模是n的多项式 级别。它含有3,因此原问题结果是yes,否则原问题结果为no
Cook-Karp论题:一个问题是实际可计算的当且仅当它 在图灵机上经过多项式时间(步数)计算得到正确的结果。 Cook-Karp论题将可计算问题类进一步划分成两类:一类 是实际可计算的,另一类是实际不可计算的
1.2 问题分类
有两类问题,一类是判定问题,另一类是优化问题 判定问题的解只涉及两种情况:yes或no;优化问题 则涉及极值问题 判定问题举例:给定一个带整数权的有向图G和一 个正整数k,是否存在着一条长度小于k的哈密尔顿回 路? 优化问题举例:给定一个带整数权的有向图G,其 最短路径长度的哈密尔顿长度是多少?
第12章 NP完全问题
1. NP完全问题概述 2. P类和NP类问题
3. NP完全问题
4. co_NP类和NPI类问题
1. NP完全问题概述
1.1 Church-Turing论题和Cook-Karp论题 1.2 问题分类 1.3 优化问题向判定问题的转换
1.1 Church-Turing论题和CookKarp论题
证明:对于P类问题中的任意问题,只要修 改相应的多项式级别算法A的代码,把返回yes的 改为返回no,把返回no的改为返回yes即可
boolean judgeEqual(int n, Elem[] a, Elem[] b){ for (int i=0; i<n; i++) for (int j=0; j<n; j++) if (a[i] == a[j]) return yes; //修改为no
int minHamilton(Graph); //二分查找中调用Hamilton函数
2. P类和NP类问题
2.1 P类问题 2.2 NP类问题
2.1 P类问题
2.1.1 确定性算法 2.1.2 P类判定问题
2.1.3 在补集下封闭的定义
2.1.4 P类问题在不集下封闭定理
2.1.5 判定问题规约的定义
2.1.6 判定问题规约的定理
2.1.7 判定问题规约定理示例
2.1.1 确定性算法
定义:假设A是问题的一个算法。如果 算法在处理实例的执行过程中每一个步骤 都有一个确定的选择,则称算法A是确定性 算法 对于问题的确定性算法A,每一个实例 执行多次的结果是严格一致的
2.1.2 P类判定问题
2.1.4 P类问题在不集下封闭定 理
定理:P类问题在补集下是封闭的
定义:如果对某个判定问题,存在着一个非 负整数k,对输入规模为n的实例,能够以O(nk) 的时间运行一个确定的算法,得到yes或no的答 案,则称该判定问题是一个P(Polynomial)类 判定问题 举例:给定两个大小均为n的集合A和B,判断 这两个集合中是否存在着相同的元素?
2.1.3 在补集下封闭的定义
2.1.7 判定问题规约定理示例
问题是:给定一个长度为n整数数组D和一个整数k判断是否存 在D中的一个元素和k相等。 问题是:给定一个长度为m整数 数组E和一个整数k判断是否存在E中的两个元素,其和与k相等 假设问题的输入实例I是一个长度为n=4的数组{2, 4, -1, 8}, 和一个整数3,转换算法A如下: int[] transfer(int n, int[] inst_ba){ int[] inst = new int [n*(n-1)/2]; int count = 0; for (int i=0; i<n; i++) for (int j=0; j<i; j++){ inst[count] = inst_bar[i] + inst_bar[j]; count++; } }
2.1.6 判定问题规约的定理
定理:令和是两个判定问题,如果P,并 且 p ,那么P
证明:根据和 的规约特性,存在着多项式 算法A,把的实例I转换为的实例I,并且二者 运算结果一致。由于A是多项式的,因此,其输出 也是多项式的。A的运算结果(就是I)是一个多 项式规模的结果。而的实例可以用多项式规模的 时间运算得到结果。处理的实例I所需时间是: I向I转换所需时间 + 处理I所需时间,这两个时间 都是多项式级别的,因此处理的实例I是多项式 级别的
1.3 优化问题向判定问题的转换
判定问题举例:给定一个带整数权的有向图G和一个正整数k, 是否存在着一条长度小于k的哈密尔顿回路? 优化问题举例:给定一个带整数权的有向图G,其最短路径 长度的哈密尔顿长度是多少?
如果上述判定问题用下面函数解决: boolean Hamilton(Graph g, int k); 则上述优化问题可以用二分的方式在下面的函数中解 决:
计算复杂性理论有两个基本论题:Church-Turing论题和 Cook-Karp论题 Church-Turing论题:一个问题时可计算的当且仅当它在 图灵机上经过有限次计算得到正确的结果。这个论题把人 类所面临的问题分为两类:一类是可计算的,另一类是不 可计算的。但“有限次计算”是一个宽松的条件
return no; //修改为yes
}
2.1.5 判定问题规约的定义
定义:令和是两个判定问题,如果存在一个 具有如下性能的算法A,可以用多项式的时间,把 问题的实例I转换为问题的实例I,使得I与I的 答案一致,就称以多项式时间规约于,记为 p
举例:问题是:给定一个长度为n整数数组D 和一个整数k判断是否存在D中的一个元素和k相等。 问题是:给定一个长度为m整数数组E和一个整 数k判断是否存在E中的两个元素,其和与k相等。 用于的实例I向的实例I转换的多项式算法A
Байду номын сангаас
函数transfer输出一个数组{6, 1, 3, 10, 12, 7},规模是n的多项式 级别。它含有3,因此原问题结果是yes,否则原问题结果为no
Cook-Karp论题:一个问题是实际可计算的当且仅当它 在图灵机上经过多项式时间(步数)计算得到正确的结果。 Cook-Karp论题将可计算问题类进一步划分成两类:一类 是实际可计算的,另一类是实际不可计算的
1.2 问题分类
有两类问题,一类是判定问题,另一类是优化问题 判定问题的解只涉及两种情况:yes或no;优化问题 则涉及极值问题 判定问题举例:给定一个带整数权的有向图G和一 个正整数k,是否存在着一条长度小于k的哈密尔顿回 路? 优化问题举例:给定一个带整数权的有向图G,其 最短路径长度的哈密尔顿长度是多少?
第12章 NP完全问题
1. NP完全问题概述 2. P类和NP类问题
3. NP完全问题
4. co_NP类和NPI类问题
1. NP完全问题概述
1.1 Church-Turing论题和Cook-Karp论题 1.2 问题分类 1.3 优化问题向判定问题的转换
1.1 Church-Turing论题和CookKarp论题
证明:对于P类问题中的任意问题,只要修 改相应的多项式级别算法A的代码,把返回yes的 改为返回no,把返回no的改为返回yes即可
boolean judgeEqual(int n, Elem[] a, Elem[] b){ for (int i=0; i<n; i++) for (int j=0; j<n; j++) if (a[i] == a[j]) return yes; //修改为no
int minHamilton(Graph); //二分查找中调用Hamilton函数
2. P类和NP类问题
2.1 P类问题 2.2 NP类问题
2.1 P类问题
2.1.1 确定性算法 2.1.2 P类判定问题
2.1.3 在补集下封闭的定义
2.1.4 P类问题在不集下封闭定理
2.1.5 判定问题规约的定义
2.1.6 判定问题规约的定理
2.1.7 判定问题规约定理示例
2.1.1 确定性算法
定义:假设A是问题的一个算法。如果 算法在处理实例的执行过程中每一个步骤 都有一个确定的选择,则称算法A是确定性 算法 对于问题的确定性算法A,每一个实例 执行多次的结果是严格一致的
2.1.2 P类判定问题