证明:寝室分配问题是NPC问题
P、NP、NPC、NP-hard
- P:多项式时间能够解决的问题的集合,比如最短路径问题是集合P的一个元素,而最短路径问题本身又是一个集合,因此P是集合的集合。
- NP:多项式时间内能够验证的问题的集合。【P$\subseteq$NP】
- NPC:B是NPC问题当且仅当(1)B是NP问题;(2)存在一个已知的NPC问题A,A能规约到B。
- NP-hard:如果问题B不满足NPC的第一个条件,但满足第二个条件,则称B是NP-hard的。
规约:$A \le_p B$
如果我们要证明问题B是NPC问题,则我们需要找到一个已知的NPC问题A,且要证明问题B至少比问题A难,即$A \le_p B$。
分配寝室问题
新生来了,学校需要分配寝室(k人一间),为了更人性化,首先征求学生意见,假设共有n个学生且n为k的倍数,每k个学生可以商量后作为一组,并提交一份意向表,意向表内容是k个学生姓名,表示这k个学生相互同意住在一个寝室,当然对于任何一个学生,他可以从属于多个组,问:是否存在一个合理的分配寝室的方案?
分配寝室问题的实例:
- 学生集合S
- m个意向表C
- 寝室能容纳的学生数k
我们用函数 allocation(S,C,k) 来表示解决分配寝室问题的函数。
比如:
k=4,n=16(学生用1,...,16进行编号),共6份意向表:{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{1,5,7,9},{1,10,14,15},其中可以看到学生1从属于3个组,即学生1既可以和2,3,4一个寝室,也可以和5,7,9一个寝室,还可以和10,14,15一个寝室。
XKC问题(Exact cover by k set problem)
实例:
- $S = \{ {s_1},\cdots,{s_n}\} ,|S| = n$,n是k的倍数
- k元对组成的集合C,$C=\{c_1,c_2,\cdots,c_m\},|C|=m,\forall c \in C,|c| = k$
问:C是否包含S的恰当覆盖,即是否存在大小为n/k的集合C',$C'\subseteq C$,且对于S中的每个元素,恰好出现在C’的一个成员中?
我们用 XKC(S,C,k)来表示解决XKC问题的函数。
XKC问题规约到分配寝室问题
只要证明分配寝室问题至少比XKC更难即可,即如果存在一个分配寝室问题的算法,则XKC就能够解决。
XKC(S,C,k)
{
allocation(S,C,k);
}
通过上述的方法就能看出:XKC $\le _p$ 分配寝室问题。
X3C$\le_p$XKC
在《计算机和难解性》中,作者已经证明了$3DM\le_p\ X3C$,即X3C是NPC问题。利用限制法,即可证明规约的正确性,如下所示:
X3C(S,C)
{
XKC(S,C,3);
}
证明:寝室分配问题是NPC问题的更多相关文章
- 转载 什么是P问题、NP问题和NPC问题
原文地址http://www.matrix67.com/blog/archives/105 这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜 ...
- P问题、NP问题、NPC问题、NP难问题的概念
P问题.NP问题.NPC问题.NP难问题的概念 离入职尚有几天时间,闲来无事,将大家常见却又很容易搞糊涂的几个概念进行整理,希望对大家有所帮助.你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这 ...
- P问题、NP问题和NPC问题
P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题了”之类的话.你要知道,大多数人此时 ...
- (转)什么是P问题、NP问题和NPC问题
这或许是众多OIer最大的误区之一. 你会经常看到网上出现"这怎么做,这不是NP问题吗"."这个只有搜了,这已经被证明是NP问题了"之类的话.你要知道,大 ...
- P问题、NP问题、NPC问题
看师兄们的论文经常说一句这是个NP难问题,所以采用另外一种方法来代替(比如凸松弛,把l0范数的问题松弛为l1范数的问题来求解).然后搜索了相关知识,也还是没看太懂,把一些理论知识先贴上来,希望以后再接 ...
- 一起聊聊什么是P问题、NP问题、NPC问题
概念 P问题:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题.通常NOI和NOIP不属于P类问题,我们常见到的一些信息奥赛的题目都是P问题. NP问题:可以在多项式的 ...
- P、NP、NPC和NP-Hard相关概念的图形和解释
P.NP.NPC和NP-Hard相关概念的图形和解释 http://blog.csdn.net/huang1024rui/article/details/49154507 一.相关概念 P: 能在多项 ...
- P,NP,NPC的通俗解释
这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题 了”之类的话.你要知道,大多数人此时所说的NP问题其实都是指的N ...
- 什么是P问题,NP问题和NPC问题
转载自:Matrix67的博客 什么是P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问 ...
随机推荐
- c++ 哪些自定义的数据类型
http://www.cnblogs.com/ShaneZhang/archive/2013/06/21/3147648.html 这些数据类型是 C99 中定义的,具体定义在:/usr/includ ...
- Ext学习-HelloWorld以及基础环境搭建
1.目的 在eclipse中搭建EXTJS的基础环境,学习如何按照从官方下载的代码中搭建新的Extjs工程 2.主要包含内容: 1.ExtJS文件下载以及目录说明 2.ExtJS开发环境 ...
- 移动端页面使用rem来做适配
文/九彩拼盘(简书作者)原文链接:http://www.jianshu.com/p/eb05c775d3c6著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. rem介绍 rem(font ...
- 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- [转载]DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)
一.错误情况 环境:win7+iis7.0 DirectoryEntry配置IIS7出现如下错误 或者是 下面一段代码在IIS6.0下运转正常,但IIS7.0下运转会出错: System.Direct ...
- java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- Win 7怎样拒绝所有可移动存储设备的所有权限
在Windows 7中,我们可拒绝对任何可移动存储类的权限.下面让我来教大家怎样在组策略中启用“所有可移动存储类:拒绝所有权限”策略,具体操作步骤如下所述: 步骤/方法 在开始搜索框中键入“gpedi ...
- Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口
原地址:http://www.cnblogs.com/qingjoin/p/3638915.html Unity 3D 简单工程的创建.与Xcode 导出到iOS 平台请看这 Unity3D 学习 创 ...
- 李洪强iOS开发之【Objective-C】09-空指针和野指针
一.什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0. 下面两个都是空指针 ...
- lintcode: 二叉树的锯齿形层次遍历
题目 二叉树的锯齿形层次遍历 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ ...