算法时间复杂度及P、NP、NP-Complete、NP-Hard问题

2023-05-16

算法的时间复杂度

如果某个算法的复杂度可以表示为 O ( n k ) O(n^k) O(nk),即问题规模n出现在底数的位置,这种复杂度称为多项式时间复杂度

如果某个算法的复杂度表示为 O ( k n ) O(k^n) O(kn) O ( n ! ) O(n!) O(n!),这种复杂度称为指数型时间复杂度

相同问题规模下(同时这个问题规模不是太小),指数型时间复杂度远远大于多项式时间复杂度。

当我们在解决一个问题时,我们选择的算法通常都需要是多项式时间复杂度的,指数型时间复杂度的算法是计算机所不能承受的(除非问题规模很小)。

P、NP、NP-Complete、NP-Hard问题

如果一个问题可以找到一个只有多项式复杂度的算法(这个算法可以在多项式时间内求得解),那这个问题就属于P(Polynomial)问题(即多项式问题)

无法找到任何多项式复杂度算法的可解问题,则称为指数型(Exponential)问题

没有任何可解算法的问题,则称为不可解问题

此外,我们关注多项式时间内是否可以验证一个解,如果可以,这个问题就被称为NP(Non-Deterministic Polynomial )问题(即非决定性多项式问题)

由此可知,所有的P问题都是NP问题

之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。

在NP问题中,有这么一类问题,所有的NP问题在多项式时间内都可以归约成这类问题【注:“问题A可归约为问题B”有一个重要的直观意义:B的时间复杂度高于或者等于A的时间复杂度。】,这类问题被称为NPC(NP-Complete)问题【所以说,NPC问题的时间复杂度大于等于NP问题的时间复杂度,NP问题不比NPC问题难。 】。

如果能够证明任何一个NPC问题可以在多项式时间内求得解,就可以证明**P=NP?**这个困扰信息学的重要问题了。

而无论是不是NP问题,又有这么一类问题,所有的NP问题在多项式时间内都可以归约成这类问题,这类问题就被称为NPH(NP-Hard)问题

NPC和NPH两者的区别是: 验证一个问题A是否为NP-Hard无须判断A是否属于NP,但是NPC问题必须首先是NP问题. 根据定义可知NPC ∈ NPH。

由于P=NP?并没有得到证明,因此,目前可以对问题作出这样的分类:

典型的NP-Hard问题

旅行商问题,即TSP问题(Traveling Salesman Problem),又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 若有 20 个城,则排法就有 19 ! 19! 19!种。在排列组合里 n ! n! n! 写起来轻松,但 19 ! = 1.21 ∗ 1 0 17 19! = 1.21*10^{17} 19!=1.211017是一个大得不得了的数字。若每秒钟排一次,要排 3.84 ∗ 1 0 9 3.84∗10^{9} 3.84109 年。旅行商问题可以归约到NPC问题。

参考文献

算法的时间复杂度和空间复杂度-总结
什么是P问题、NP问题和NPC问题
P/NP/NPC/NP-hard
NP-Hard问题浅谈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法时间复杂度及P、NP、NP-Complete、NP-Hard问题 的相关文章

  • 绿盟网站安全防护服务(vWAF)

    平台 xff1a linux 类型 xff1a 虚拟机镜像 软件包 xff1a basic software devops nsfocus security waf 服务优惠价 按服务商许可协议 云服务器费用 查看费用 立即部署 产品详情
  • 华为服务器操作系统EulerOS V2.0

    平台 xff1a linux 类型 xff1a 虚拟机镜像 软件包 xff1a java 1 8 0 php 5 4 16 python 2 7 5 qt 4 8 5 tomcat 7 0 69 basic software euleros
  • 星环一站式大数据平台-4.6

    平台 xff1a arm 类型 xff1a ARM 模板 软件包 xff1a 星环一站式大数据平台 basic software big data hadoop tdh tos transwarp 大数据 星环科技 星环一站式大数据平台 云
  • 故障排除:无法启动、访问或连接到 Azure 虚拟机上运行的应用程序

    有多种原因可导致无法启用或连接到在 Azure 虚拟机 VM 上运行的应用程序 原因包括应用程序未在预期端口上运行或侦听 侦听端口受到阻止 xff0c 或网络规则未将流量正确传递到应用程序 本文说明有条理地找到问题并更正问题 如果在使用 R
  • 文件系统损坏导致虚拟机无法正常启动的问题及解决方法

    简介 计算机的文件系统是一种存储和组织计算机数据的方法 xff0c 它使得对其访问和查找变得容易 xff0c 文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念 xff0c 用户使用文件系统来保存数据不必关心
  • 连接到 Azure (Resource Manager) 上的 SQL Server 虚拟机

    概述 本主题介绍如何连接到运行于 Azure 虚拟机的 SQL Server 实例 它介绍了一些常规连接方案 xff0c 并提供了在 Azure VM 中配置 SQL Server 连接的详细步骤 Note Azure 具有用于创建和处理资
  • 网络安全组(NSG)简介

    韩源 xff0c 资深工程师 xff0c 存储和灾备专家 Azure 网络安全解析 作为公有云最重要环节之一 xff0c 网络安全一直是 Azure 的重中之重 在 Azure 中 xff0c 多种安全技术共同构成了立体的网络保护 xff1
  • gnome manjaro设置无法打开

    本文转载自 xff1a https joshtronic com 2018 04 02 unable to open gnome settings on arch linux after gnome upgrade 我经常会写关于主题的博客
  • 手动将经典 VM 从 VHD 迁移到新的 ARM 托管磁盘 VM

    本部分有助于将现有 Azure VM 从经典部署模型迁移到资源管理器部署模型中的托管磁盘 计划迁移到托管磁盘 本部分可帮助你针对 VM 和磁盘类型做出最佳决策 位置 选取 Azure 托管磁盘可用位置 如果要迁移到高级托管磁盘 xff0c
  • 适用于 Azure 虚拟网络的常见 PowerShell 命令

    如果想要创建虚拟机 xff0c 需要创建虚拟网络或了解可在其中添加 VM 的现有虚拟网络 通常情况下 xff0c 创建 VM 时 xff0c 还需考虑创建本文所述资源 有关安装最新版 Azure PowerShell 选择订阅和登录到帐户的
  • 创建包含多个子网的虚拟网络

    本教程介绍如何创建包含独立公共子网和专用子网的基本 Azure 虚拟网络 虚拟网络中的资源可以彼此通信 xff0c 并可以与连接到虚拟网络的其他网络中的资源通信 可在虚拟网络中相同或不同的子网中创建 Azure 资源 xff0c 如虚拟机
  • matplotlib笔记

    文章目录 matplotlib笔记cmap选择cmap创建cmap 子图断点轴 Broken axis 子图大小 坐标轴scale matplotlib笔记 有一个在线使用matplotlib的网址 cmap 选择cmap choose c
  • Fortran pgplot安装

    pgplot 首先确保已经安装了gfortran 以下为linux下安装流程 从这里下载安装包解压tar zxvf pgplot5 2 tar gz到某个目录比如 src pgplot创建一个文件夹xxx pgplot用于安装 xff0c
  • CUDA和Compute Capability

    CUDA Enabled GPUs Cuda支持的GPU 在这个参考包含了GPU的Compute Capacity列表 比如我的笔记本搭载了一块Geforce830m xff0c 查询列表就可以发现如下图 那么这块830M GPU的Comp
  • Javascript笔记

    数据类型 基本类型 primitive value 简单的数据段 xff0c 包括 Undefined Null Boolean Number String初始化只使用2原始字面量形式 xff0c 如果使用new则会创建Object无法加入
  • 前端面试题笔记

    前端面试八股 发现了一个地方包含了很多前端面试八股 1 用户喜好 为了不断优化推荐效果 xff0c 今日头条每天要存储和处理海量数据 假设有这样一种场景 xff1a 我们对用户按照它们的注册时间先后来标号 xff0c 对于一类文章 xff0
  • Matlab:数据写入Excel

    使用xlswrite 可以help xlswrite查看用法 xlswrite filename A xlswrite filename A sheet xlswrite filename A xlRange xlswrite filena
  • python处理FITS 1:astropy介绍与安装

    1 1介绍 astropy是一个开源的python库 xff0c 专门用于处理天文方面的数据 astropy包是Astropy 项目的内核 xff0c 这个项目致力于发展一个鲁棒性较好的伴随子包 xff08 能兼容优秀的astropy这个库
  • 使用sublime编译运行C程序

    1 打开sublime xff0c 找到顶部工具 xff08 Tool xff09 菜单 gt 编译系统 xff08 Build System xff09 gt 新编译系统 xff08 New Build System xff09 xff1
  • python处理FITS文件 2:astropy.io.fits介绍及打开FITS文件

    astropy这个库有很多功能 xff0c 因为本文主要涉及FITS文件 xff0c 因此仅仅使用astropy io fits 1介绍 astropy io fits包提供FITS文件操作的函数接口 xff0c 使得用户可以忽略FITS文

随机推荐

  • python处理FITS 3:处理头文件和数据单元

    1头文件处理 在获得hdul后 xff0c 可以使用两个属性 header data分别获得头文件和数据单元 gt gt gt hdul 61 fits span class hljs built in open span fits ima
  • Django使用pip安装

    1 pip安装 pip是python的包管理器 xff0c 使用这个工具可以很轻松安装各种python库 直接运行 pip install django 然后就可以安装了 1 1安装问题 输入 pip install django 报错 x
  • 内网穿透方式

    ssh 内网中的机器A 需要访问内网中的c 64 C 公网中的机器B xff0c 用户名b 内网中的机器A ssh CNR 7280 C 22 b 64 B 公网中的机器B ssh fCNL 7279 localhost 7280 loca
  • vue笔记

    rollup 专注于JavaScript打包不包含无关代码 对比webpack tree shaking 最开始由rollup实现 xff0c 之后被webpack借鉴配置output format xff0c 选择输出资源的模块形式 xf
  • geant4学习

    文章目录 配置vscode configuration materialgeant4的类及成员函数physicsList选择构建Physics List 粒子粒子类型能量损失重子和离子 杂项getEnergyoptical photon的速
  • C++枚举与字符串转换工具类

    C 43 43 枚举与字符串转换工具类 最近需要一个能够在字符串和枚举值之间互相转换的功能 xff0c 因为C 43 43 没有对枚举值进行遍历 反射之类的操作 xff0c 不像Java那样可以轻松搞定 网上找到一些代码感觉用起来有点不爽
  • iOS 使用xmpp做聊天客户端

    可以号称史上最详细的xmpp做iOS客户端聊天介绍 简介 xff1a XMPP协议是一种基于Socket长连接 以XML格式进行基本信息交换 C S S S多种架构的聊天协议 XMPPServer 基于XMPP协议的服务端 例如eJabbe
  • 基于树莓派的蓝牙出勤追踪系统

    本文介绍一个基于树莓派的蓝牙出勤追踪系统 xff0c 用于记录和监督自己的工作时长情况 代码与安装指引已更新在GitHub上 xff1a 树莓派蓝牙出勤追踪系统 该系统使用树莓派扫描附近的蓝牙或蓝牙低功耗设备 xff0c 以无感方式收集出勤
  • Python的开发环境与实用工具

    Python的各种实用工具 xff0c 大致可以分为包管理 环境管理 编辑相关 xff08 代码补全 snippet等 xff09 调试工具 xff08 集成开发环境 xff09 笔记本构建工具Jupyter 接下来就介绍下我常用的工具吧
  • 更新系统grub

    1 查看分区 grub rescue gt ls 列出磁盘分区 hd0 hd0 msdos9 hd0 msdos8 hd0 msdos7 hd0 msdos6 hd0 msdos5 hd0 msdos2 hd0 msdos1 2 寻找ubu
  • 预训练语言模型综述(一)—— 预训练语言模型及其历史

    本系列文章是笔者以邱锡鹏老师 Pre trained Models for Natural Language Processing A Survey 为主要参考材料所做的关于 预训练语言模型综述 的记录 xff0c 所涉及之素材也包括其他相
  • 在远程服务器上部署JupyterLab 3.0

    近期 xff0c JupyterLab刚刚升级到3 0版本 xff0c 在安装与使用方面都有不小改进 xff0c 加之之前部署在树莓派上时遇到偶尔需要跟服务器之间做些文件交换的情况 xff0c 处理起来还是稍微麻烦了点 xff0c 所以趁着
  • 基于TensorFlow 2.x的一些CNN模块/网络的实现

    开源一些基于TensorFlow 2 x的CNN模块 网络的实现 xff0c 可能不定时更新 仓库链接 xff1a TensorFlow 2 Implementations of CNN Based Networks 目前的实现包括 xff
  • 预训练语言模型综述(二)—— 预训练任务及训练策略

    本系列文章是笔者以邱锡鹏老师 Pre trained Models for Natural Language Processing A Survey 为主要参考材料所做的关于 预训练语言模型综述 的记录 xff0c 所涉及之素材也包括其他相
  • 预训练语言模型综述(三)—— 预训练语言模型的实际使用

    本系列文章是笔者以邱锡鹏老师 Pre trained Models for Natural Language Processing A Survey 为主要参考材料所做的关于 预训练语言模型综述 的记录 xff0c 所涉及之素材也包括其他相
  • scikit-learn算法与API速查表

    出处 xff1a scikit learn官方教程 算法速查表 xff1a scikit learn algorithm cheat sheet 进链接可以点击图上不同算法深入了解 API速查表 xff1a API Reference
  • 人工智能学习清单

    人工智能学习清单 一份人工智能学习清单 xff0c 帮助初学者了解本领域知识框架 xff0c 以及查找优秀学习资源 部分资源分享在GitHub xff0c 欢迎star与贡献 基础知识 1 人工智能 xff1a 了解人工智能的概念 xff0
  • 图神经网络(GNN)简介

    深度学习与图神经网络 近年来 xff0c 人工智能与深度学习在各个领域得到了长足的发展 从最先掀起这轮深度学习浪潮的计算机视觉 xff08 Computer Vision xff09 领域 xff0c 到亦备受关注的自然语言处理 xff08
  • 自变量/解释变量/因变量/响应变量/协变量等变量相关概念探析

    概念探析 一般科学实验主要涉及以下三种变量 xff1a 自变量 独立变量 xff08 independent variable xff09 xff1a 自变量是指在实验中由实验者操作的变量 xff0c 它被认为不会受其他变量的影响 xff0
  • 算法时间复杂度及P、NP、NP-Complete、NP-Hard问题

    算法的时间复杂度 如果某个算法的复杂度可以表示为 O n k O n k O n k