首页 > 编程语言 >算法工程师学习运筹学 笔记一 P,NP,NPC问题

算法工程师学习运筹学 笔记一 P,NP,NPC问题

时间:2023-08-03 23:34:53浏览次数:36  
标签:多项式 复杂度 NPC 问题 算法 NP 运筹学

算法的时间复杂度

我之前理解的时间复杂度,是指的解决一个问题所需要的时间。但其实并不准确,时间复杂度应该是 当问题规模扩大后,程序需要的时间长度增长得有多快。

时间复杂度有两种类型:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,它的复杂度是计算机不能接受的。

 

P和NP

P问题:可以找到一个 多项式的时间里 解决该问题的算法

NP问题:可以在多项式时间内找到一个解,用来解决该问题。换言之,如果我猜了一个解,并且可以在多项式的时间内验证它是对的,那么这个问题就是一个NP问题

有一个算法可以在多项式时间里可以解决该问题,那就一定可以在多项式时间内验证一个解是否正确,也就是说 P问题都是NP问题。那么反过来是否成立呢?NP问题是否都是P问题?

 

规约和NPC

规约:

一个问题A可以规约为问题B的含义即是:

  • 可以用问题B的解法解决问题A
  • 问题A可以“变成”问题B。
  • 如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同

《算法导论》上举了这么一个例子。比如说,现在有两个问题:求解一个一元一次方程和求解一个一元二次方程。那么我们说,前者可以规约为后者,意即知道如何解一个一元二次方程那么一定能解出一元一次方程。

A规约为B,那么意味着B的解题的算法更广,同时意味着B的复杂度更高。

 

NPC问题:

是否有可能找到一个时间复杂度最高,并且能“通吃”所有的 NP问题的这样一个超级NP问题?答案居然是肯定的。也就是说,存在这样一个NP问题,所有的NP问题都可以规约成它。这种超级NP问题就是NPC问题。

NPC问题不仅有一个,它是有很多个。由于规约的传导性,如果找到一个问题,能够规约到NPC问题,那么这个问题也是NPC问题了。

如果NPC有多项式时间复杂度的算法能够解,那么所有NP问题也就有了多项式时间复杂度算法能够解,那么也就意味着P=NP。

然而事实是,目前人们无法证明NPC有多项式时间复杂度的算法能够解(也无法证明没有),但是大家更倾向于没有(直觉吧)

所以在通常意义上,说该问题是NPC问题,其实是想表示该问题没有一个多项式时间复杂度的算法,一般这种问题,都是通过“搜索”来解决的。

 

标签:多项式,复杂度,NPC,问题,算法,NP,运筹学
From: https://www.cnblogs.com/4PrivetDrive/p/17604763.html

相关文章

  • nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,
    nps  nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。背景做微......
  • npm - 报错:found XXX vulnerabilities (XXX low, X moderate),run `npm audit fix` to
    完整报错我正准备 npm 装包,结果失败了,并提示如下报错信息:found808vulnerabilities(804low,4moderate)run`npmauditfix`tofixthem,or`npmaudit`fordetails解决直接按照后面提示的命令执行:npmauditfix解决xxxpackagesarelookingforfundingn......
  • npm更新指定的组件
    npm更新指定的组件1、例如:react-router已经更新到4.x版本,想要下载2.x版本,可以通过下面命令[email protected][email protected]、–save-dev–save:将保存配置信息到package.json。默认为dependencies节点中。–dev:将保......
  • 遇到:ValueError: not enough values to unpack (expected 2, got 1) 错误应该如何解决
    遇到"ValueError:notenoughvaluestounpack(expected2,got1)"错误时,通常是因为你在尝试解包(unpack)一个包含不足两个值的可迭代对象。要解决这个问题,你可以考虑以下几个步骤:检查可迭代对象的长度:确保你的可迭代对象包含至少两个值。如果你的可迭代对象只有一个值,那么解包......
  • 网工内推 | 云计算工程师专场,CCNP/HCIP认证优先
    01弧聚科技招聘岗位:网络工程师(云计算方向)职责描述:1、作为H3C初级云计算交付工程资源培养对象,需配合完成相关华三产品及服务规范培训。2、培训赋能后,安排到H3C云项目交付中进行项目交付及驻场支撑。3、按照公司项目需求,需动态进行出差支撑任职要求:1、大专学历及以上学历,IT相关专业......
  • bootstrap-fileinput组件遇到的问题
    使用bootstrap-fileinput在进行上传的时候发现了一个问题,由于上传的可能是csv的文件那么这个时候当我们点击选择文件的时候他就会在网页上重新进行一个下载由于在断点的时候发现他是访问了blob的一个地址这个进行一个图片的显示。由于生成csv的文件地址访问了就直接下载了所以需要......
  • ForkJoinPool实践
    最近在看一本15年出版的《Java并发编程的艺术》一书,其中看到并发编程时间部分的ForkJoinPool功能时,突然发现这个功能实际使用上就是把一个大任务分成多个小的子任务,然后使用多个线程完成。这个场景跟我之前写过的自定义Java自定义异步功能实践有点异曲同工之妙,只不过这里有有个子......
  • LinphoneSDK v 5.2.94 使用方法
    前提vs2022 wpfLinphoneSDK的获取途径有两种1 下载 linphonesdk.5.2.94.nupkghttps://gitlab.linphone.org/BC/public/linphone-sdk/-/packages/然后引用 这里是没有dll的,只是引用了LinphoneWrapper.cs2 下载zip包https://download.linphone.org/releases/windows/sd......
  • 微信小程序6 常用标签之 input,基础样式
    inputinput标签不做任何设置的时候,就是个输入框,需要注意的是默认没有样式,这跟html不同。<input></input> 我输入了内容,但是可以看到没有边框样式。 type属性1.text,就是默认的type属性值,输入框;2.password,密码框;3.number,只能输入数字,但是要在移动端才能看......
  • SingletonPattern-单例模式
    在C#中,单例模式(SingletonPattern)用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式常用于需要限制某个类只能创建一个对象的场景,例如数据库连接、日志记录器等。懒汉式(LazyInitialization)这种实现方式使用了双重检查锁定(双IF加锁),即在获取实例前先检查......