首页 > 其他分享 >NP问题笔记

NP问题笔记

时间:2023-07-13 22:11:51浏览次数:57  
标签:多项式 复杂度 NPC 问题 算法 笔记 NP

算法的时间复杂度指的是算法计算所需要的数量级,通常用O(·)表示。

O(1)表示一个算法是常数阶,例如访问HashMap的某一个元素(随机存取)只需要一次运算即可。

O(n)表示一个算法是线性阶,例如寻找数组Array中最大的元素,需要遍历数组(顺序表)的所有元素。

O(logn)是对数阶,比O(n)更快,例如有序表的二分查找。

O(n^2)表示一个算法是平方阶,例如冒泡排序算法对数组进行排序。

O(nlogn)介于O(n)和O(n^2)之间,常见的有快速排序、归并排序算法。

以上都是多项式级别的复杂度,即O(n^a)以下。

下面的是非多项式级别,更难计算。

O(a^n)是指数级递增的计算规模。例如常见的“汉诺塔问题”,就是2^n次计算。

O(n!)复杂度的是阶乘规模的算法,例如一组数的全排列。

    如果一个问题可以找到一个能在多项式时间内解决的算法,称为P问题(polynomial)。

    NP问题:可以在多项式时间内验证问题的一个可能解(non-deterministic polynomial)。

    所谓P=NP?就是讨论,是否所有NP问题都是P类问题(显然所有P问题都是NP问题,能找到算法自然可以轻松验证。)

一个复杂度较低的问题,可以约化(Reducibility)为复杂度较高的问题,例如一次方程可以视为二次项系数为0的二次方程。

    NPC是指NP完全问题,可以在多项式时间内验证问题的一个可能解,但是要找到问题的解通常需要高于多项式的时间。1. NPC问题是一个NP问题。2. 所有的NP问题都可以约化为NPC问题。

    NPC的性质:NP虽然可以快速验证,但是没有任何数据结构和算法可以在多项式时间内解决NPC;所有已知的NPC问题都可以用图论的形式表示出来;如果一个问题被归约到某个NPC问题,就可以认为它也是个NPC问题。

    其不可能有多项式级复杂度的算法。只要任意一个NPC问题找到了多项式算法,那么所有的NP问题就都可以用该算法去解决了,即证明了P=NP。(其实恰恰是NPC问题的存在让人们相信P不等于NP)。当前的NPC问题通常只能用指数级别甚至阶乘级别复杂度的算法求解。

    逻辑电路问题:给定一个逻辑电路,问是否存在一种输入使得该电路输出为True。该问题已被证实为NPC问题,并且任意一个NP问题都可以约化为逻辑电路问题。

    NPC问题其他案例:TSP(Traveling Saleman Problem 旅行商问题)、背包问题、图着色问题、布尔可满足性问题(SAT Boolean Satisfiability Problem)、子集和问题等。计算理论、集合论、图论等领域都发现越来越多NP问题,对NPC问题深入研究可以设法克服这些问题。

    证明一个问题是NPC问题。首先证明其是一个NP问题,然后用一个已知的NPC问题进行多项式时间的规约。

    NP-Hard问题不一定是NP问题,也可能是非NP问题。但所有NP问题都可以约化为NP-Hard问题。P属于NP,NP和NP-Hard的交集为NPC。NP-Hard问题同样很难找到多项式算法。

标签:多项式,复杂度,NPC,问题,算法,笔记,NP
From: https://www.cnblogs.com/zhaoke271828/p/17552339.html

相关文章

  • c语言的内存泄漏问题
    在今天的动态内存分配的学习中,我遇到了内存泄漏问题,自己开辟的空间,自己找不到了,并且系统也无法使用,通过查找资料得到了比较加深的见解。C语言什么是内存泄漏,怎么避免内存泄漏一、内存溢出内存溢出OOM(outofmemory),......
  • yarn : 无法加载文件 E:\nodejs\yarn.ps1,因为在此系统上禁止运行脚本。问题解决
    1.在电脑的开始菜单中,搜索PowerShell ,然后以管理员身份运行,如下所示:2.以管理员身份运行后,会出现命令窗口,接下来,输入命令get-ExecutionPolicy 查看权限,会看到它的返回值是 Restricted ,意思是当前是禁用的。3.执行命令:set-ExecutionPolicyRemoteSigned,没有报错就......
  • 网络流学习笔记
    前言因为网络流非常的重要,并且之前的理解都比较模糊,模板什么的整理的也不全,所以写一篇博客用来整理网络流的知识。也是供自己复习使用。一些基本的定义流量大致思路网络流,其实就是一种在图上的带悔贪心,网络流有很多种做法,这里主要介绍dinic算法。在网络流中,最重要的就是反......
  • RAC 11G 环境在数据泵操作期间部分服务名无法正常连接问题分析
    问题概述4节点ORACLERAC11G集群的节点4上的xxgsh服务在上午9点半左右和下午14点左右无法正常提供服务,通过重建服务和重启数据库实例解决。经过查看集群日志、osw信息发现数据库负载正常,集群日志正常,数据库日志存在大量导数的操作,并且自动产生了大量 altersystem 设置服务名......
  • enq: TX - row lock contention 问题排查思路
    问题原因应用反应堵塞,检查数据库等待事件出现’enq:TX-rowlockcontention’业务更新或者删除同一行记录对创建位图索引的列值更新对主键或唯一键插入相同记录解决方案在enq:TX-rowlockcontention发生的实例上执行查询:setlinesize180setpagesize999columnuserna......
  • 证书Certificate学习笔记
    目录window上执行生成证书生成证书使用脚本获取目标网站的证书检查服务端证书和CA证书的DN字段是否不一致SAN设置更新证书信任链openssl使用常见错误及处理CA:FALSE表示该证书不能用作中间证书了,也就是说不能拿这个证书继续去签发新的证书。window上执行生成证书MSYS_NO_PATH......
  • cntlm代理工具学习笔记
    目录目的一、windows侧操作二、虚拟机侧操作目的通过在windows侧设置cntlm代理,使得linux服务器可以访问外网。一、windows侧操作1、下载安装cntlm文件,安装压缩包见附件,建议安装在默认路径。2、打开安装目录下的配置文件cntlm.ini修改配置,需要修改的地方如下:User......
  • docker compose学习笔记
    目录1、docker带来的问题2、dockercompose的好处3、dockercompose的介绍4、安装5、版本兼容性6、常见的命令链接:https://www.cnblogs.com/wtzbk/p/15125977.html1、docker带来的问题多次使用DockerfileBuildImage或者DockerHub拉取Image;需要创建多个Containe......
  • 解决js计算0.1时不准确问题
    constcompute={//加法运算accAdd(arg1,arg2){letr1;letr2;letm;letc;try{r1=arg1.toString().split('.')[1].length;}catch(e){r1=0;}try{r2=arg2.toString().split('.&......
  • hadoop性能调优笔记
    Hadoop调优mapred.tasktracker.map.tasks.maximum 官方解释:Themaximumnumberofmaptasksthatwillberun  simultaneouslybyatasktracker. 我的理解:一个tasktracker最多可以同时运行的map任务数量 默认值:2 优化值:mapred.tasktracker.map.tasks.maximum=cpu数量 ......