在算法复杂度分析的过程中,人们常常用特定的函数来描述目标算法,随着变量n的增长,时间或者空间消耗的增长曲线,近而进一步分析算法的可行性(有效性)。

引入了Big-O,Big-Ω,来描述目标算法的上限、下限复杂度函数。

Big-Θ描述和目标函数同序的复杂度函数,即由Big-Θ既是上限也是下限

常常用到如下时间复杂度函数标度

1, log n, n, n log n, n^2, 2^n, n!

通常将具有n^x,x为正整数形式的时间复杂度函数称为多项式复杂度

通常认为具有多项式时间复杂度的算法是容易求解的。

超过多项式时间复杂度,算法增长迅速,不易求解

下图将展示NP和NP完全问题在所有问题中的位置。

通常问题分为 可解决(Solvable) 和 不可解决(Unsolvable)。

可解决问题又可以分为 易解决(Tractable)不易解决(Intractable)和不确定是否容易解决(NP)

  • 可解决(Solvable)是指存在算法能够解决的问题
  • 不可解决(Unsolvable)是指不存在解决该问题的算法,如The Halting Problem。
  • 易解决(Tractable),即P问题,是指具有最坏时间复杂度为多项式时间的算法能够解决的问题
  • 不易解决(Intractable)是指不存在最坏时间复杂度为多项式时间的算法能够解决的问题
  • 不确定是否容易解决(NP),还未被证明是否存在多项式算法能够解决这些问题,而其中NP完全问题又是最有可能不是P问题的问题类型。

判断是否是NP完全问题

1.元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变的非常慢。

2.涉及所有组合问题通常是NP完全问题

3.不能将问题分成小问题,必须考虑各种情况,这可能是NP问题

4.如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能是NP问题

5.如果问题涉及集合(如广播电台集合)且难以解决,它可能是NP完全问题

6.如果问题可转化为集合覆盖问题商旅问题,那它肯定是NP问题

NP问题/NP完全问题(NP-complete problem)如何判断是否是NP完全问题的更多相关文章

  1. h5py报错:FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.

    导入h5py的时候,报错: /home/harris/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: ...

  2. 实验12:Problem D: 判断两个圆之间的关系

    Home Web Board ProblemSet Standing Status Statistics   Problem D: 判断两个圆之间的关系 Problem D: 判断两个圆之间的关系 T ...

  3. HDU1086You can Solve a Geometry Problem too(判断线段相交)

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3 ...

  4. PAT 1110 Complete Binary Tree[判断完全二叉树]

    1110 Complete Binary Tree(25 分) Given a tree, you are supposed to tell if it is a complete binary tr ...

  5. codeforces 688C C. NP-Hard Problem(bfs判断奇数长度环)

    题目链接: C. NP-Hard Problem time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  6. HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 判断两条线段是否有交点,我用的是跨立实验法: 两条线段分别是A1到B1,A2到B2,很显然,如果 ...

  7. hdu 5615 Jam's math problem(判断是否能合并多项式)

    方法一:由十字相乘相关理论我们能知道,如果要有p,k,q,m,那么首先要有解,所以b*b-4*a*c要>0,然而因为p,k,q,m是正整数,所以代表x1,x2都是有理数,有理数是什么鬼呢?就是解 ...

  8. 数据结构实习 - problem M 判断平衡二叉树

    writer:pprp date: 20171103 题目描述 给定一棵二叉树的中序和层序输出,判断是否为平衡二叉树的.如果是,输出YES如果不是输出NO. 输入 树结点个数 中序遍历序列 层序遍历序 ...

  9. Problem B: 判断回文字符串

    #include<stdio.h> #include<string.h> int huiwen(char *str) //定义回文函数 { //char ch[100]; in ...

随机推荐

  1. 团队作业 需求改进&系统设计

    PaChat聊天系统 一.需求&原型改进: 1.针对课堂讨论环节老师和其他组的问题及建议,对修改选题及需求进行修改 问题1:功能划分条理不够清晰. 修改1:改为流程图的形式. 问题2:功能不能 ...

  2. Codeforces Round #685(Div2)

    Contest Link Official Editorial A. Subtract or Divide 给你一个数 \(n\) ,每一步可以做以下两个操作之一: 用一个不等于 \(n\) 的 \( ...

  3. window下使用cmd查看端口占用的进程,并杀死该进程

    做项目的时候经常会遇到"address already in use"的情况,此时可以选择使用dos命令将该进程杀死. 首先,查找端口对应的进程,使用命令(以进程号8080为例): ...

  4. 腾讯游戏 K8s 应用实践|更贴近业务场景的 K8s 工作负载:GameDeployment & GameStatefulSet

    引言 蓝鲸容器服务(Blueking Container Service,以下简称BCS)是腾讯 IEG 互动娱乐事业群的容器上云平台,底层基于腾讯云容器服务(Tencent Kubernetes E ...

  5. react第十三单元(react路由-react路由的跳转以及路由信息) #课程目标

    第十三单元(react路由-react路由的跳转以及路由信息) #课程目标 熟悉掌握路由的配置 熟悉掌握跳转路由的方式 熟悉掌握路由跳转传参的方式 可以根据对其的理解封装一个类似Vue的router- ...

  6. 用python写图片格式批量处理工具

    一.思路分析 其实,照片处理要求很简单,主要是两个方面:一个是调整图片尺寸(即宽x高),另一个是调整图片的大小(即压缩).为了实现这两个功能,利用python中的PIL库即可,其安装方法如下: pip ...

  7. Python实现全自动购买火车票!抢票回家过年咯

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理这个是实现结果,因为一天只能取消三次,所以最后一步点击确认被我注释了1.首先实现使用selenium登 ...

  8. 中小学生的噩梦:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束

    本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互 ...

  9. MySQL忘记密码了怎么解决

    前言:在不考虑到原来用户对关联数据库的授权问题的情况下,有以下三种思路解决 #1.登录状态下修改 说明:在登录状态的话,直接使用命令修改密码就行了 mysql> use mysql; mysql ...

  10. ProGuard使用文档

    介绍 是一个对于Java字节码的免费的压缩器,优化器,混淆器和审核器: l  它检测并删除未使用的类,字段,方法和属性. l  它优化字节码并删除未使用的指令. l  它重命名其余类.字段和方法使用短 ...