算法复杂度与NP问题

2023-05-16

引言

美剧《基本演绎法》S2E2中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明“P=NP 问题”。假设人类证明了P=NP 是真的,那么就会有一个算法,能够很快算出某个帐号的密码。《基本演绎法》里面所想象的可能就要成真了,所有的加密系统都会失去效果——应该说,所有会把密码变成数字信息的系统都会失去效果。
一大批耳熟能详的游戏,如扫雷、俄罗斯方块、超级玛丽等,人们将为它们编写出高效的AI,使得电脑玩游戏的水平无人能及。
整数规划、旅行商问题等许多运筹学中的难题会被高效地解决,这个方向的研究将提升到前所未有的高度。
蛋白质的折叠问题也是一个 NPC 问题,新的算法无疑是生物与医学界的一个福音。

算法复杂度

一个具有时间复杂度为O(p(n))的算法,其中p(n)是一个多项式函数,成为多项式算法(polynomial algorithm),另一方面不是以多项式函数为界的时间复杂度算法称为指数算法(exponential algorithm)
NP问题的定义

P类问题

所有可以在多项式时间内求解的判定问题构成P类问题。
判定问题(相对于优化问题)

判断是否有一种能够解决某一类问题的能行算法的研究课题,简单地说判定问题的答案只有两种(是、否)
在这里插入图片描述

NP类问题(Non-deterministic Polynomial)

所有的非确定性多项式时间可解的判定问题构成NP类问题。非确定性算法:非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。设算法A是解一个判定问题Q的非确定性算法,如果A的验证阶段能在多项式时间内完成,则称A是一个多项式时间非确定性算法。有些计算问题是确定性的,例如加减乘除,只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式能推出下一个质数是多少呢?这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式(polynomial)时间内算出来,就叫做多项式非确定性问题。
在这里插入图片描述

NPC问题

NP中的某些问题的复杂性与整个类的复杂性相关联.这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的.这些问题被称为NP-完全问题(NPC问题)。

SAT问题

布尔可满足性问题(SATISFIABILITY或SAT),这是第一个被证明的NP问题(即可以在多项式时间验证答案正确与否的问题)
定义:是判断一个以合取范式形式给出的逻辑命题公式是否存在一个真值指派,使得公式为真。

近似解决NPC问题的算法

近邻法

近邻法(nearest neighbor) 推销员从某个城镇出发,永远选择前往最近且尚未去过的城镇,最后再返回原先的出发点。这方法简单,也许是多数人的直觉做法,但是近邻法的短视使其表现非常不好,通常后段的路程会非常痛苦。

插入法

插入法(insertion) 先产生连接部分点的子路线,再根据某种法则将其它的点逐一加入路线。比如最近插入法(nearest insertion),先针对外围的点建构子路线,然后从剩余的点里面评估何者加入后路线总长度增加的幅度最小,再将这个点加入路线。又比如最远插入法(farthest insertion),是从剩余的点里面选择距离子路线最远的点,有点先苦后甜的滋味。

模拟退火算法

模拟退火算法(Simulated Annealing) 来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解。
在这里插入图片描述

遗传算法

遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法,从某种程度上说遗传算法是对生物进化过程进行的数学方式仿真。生物种群的生存过程普遍遵循达尔文进化准则,群体中的个体根据对环境的适应能力而被大自然所选择或淘汰。进化过程的结果反映在个体的结构上,其染色体包含若干基因,相应的表现型和基因型的联系体现了个体的外部特性与内部机理间逻辑关系。通过个体之间的交叉、变异来适应大自然环境。生物染色体用数学方式或计算机方式来体现就是一串数码,仍叫染色体,有时也叫个体;适应能力是对应着一个染色体的一个数值来衡量;染色体的选择或淘汰则按所面对的问题是求最大还是最小来进行。

神经网络算法

根据一个简化的统计,人脑由百亿条神经组成 — 每条神经平均连结到其它几千条神经。通过这种连结方式,神经可以收发不同数量的能量。神经的一个非常重要的功能是它们对能量的接受并不是立即作出响应,而是将它们累加起来,当这个累加的总和达到某个临界阈值时,它们将它们自己的那部分能量发送给其它的神经。大脑通过调节这些连结的数目和强度进行学习。尽管这是个生物行为的简化描述。但同样可以充分有力地被看作是神经网络的模型。
在这里插入图片描述

参考文献

https://baike.baidu.com/item/NP完全问题/4934286?fr=aladdin
https://blog.csdn.net/hawo11/article/details/74908233
https://en.wikipedia.org/wiki/List_of_NP-complete_problems

更多内容访问 omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处

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

算法复杂度与NP问题 的相关文章

  • kmeans聚类选择最优K值python实现

    Kmeans算法中K值的确定是很重要的 下面利用python中sklearn模块进行数据聚类的K值选择 数据集自制数据集 xff0c 格式如下 xff1a 手肘法 手肘法的核心指标是SSE sum of the squared errors
  • 高维(多变量)优化问题的技术与瓶颈

    现实世界中的优化问题往往具有较高的复杂度和维数 xff0c 称为LSGO问题 xff0c 即Large Scale Global Optimization 此问题在各个领域的研究工作中都引起了极大的兴趣 许多科学和工程应用程序被表述为LSG
  • 基于变长PSO的高维特征选择算法(VLPSO)概述

    原文 xff1a http www omegaxyz com 2018 09 16 vlpso 简介 原文 xff1a Variable Length particle swarm optimisation for feature sele
  • JavaWeb-MVC模式概述

    MVC设计模式 MVC模式 xff08 Model View Controller xff09 是软件工程中的一种软件架构模式 xff0c 把软件系统分为三个基本部分 xff1a 模型 xff08 Model xff09 视图 xff08
  • IntelliJ IDEA创建Java-Web项目

    eclipse和idea都能够创建Java web项目 下面介绍使用idea创建Java web项目的步骤 需要准备的东西 intellij idea xff08 包括jdk xff09 Tomcat7 0 43 可选 xff08 如果需要
  • 基于拥挤距离与变异支配的多目标PSO算法

    这一篇是Xue Bing在一区cybernetics发的论文 xff0c 里面提出了两个多目标PSO特征选择算法 xff0c 一个是NSPSO另一个是CMDPSO 其中NSPSO是参考了NSGA2的框架和思想 下面具体说说CMDPSO CM
  • Cohen-Sutherland算法概述

    思想 通过对于任一端点 x y xff0c 根据其坐标所在的区域 xff0c 赋予一个4位的二进制码 xff0c 判断图形元素是否落在裁剪窗口之内并通过求交运算找出其位于内部的部分 编码方式 注意 xff1a l为left xff0c r为
  • 人机交互的形式

    命令行交互 优点 xff1a 专家用户使用命令行能够更加快速地完成任务 较图形界面更加节约系统资源 对用户而言是开放的 xff0c 不存在图形界面中不能动态配置用户可操作选项的问题 键盘操作方式较鼠标操作更加精确 xff0c 对应用的掌控力
  • canvas 报错记录 (一)

    在执行下面代码的时候报错 var can 61 document getElementById 34 can 34 var ctx 61 can getContext ctx content cfillRect 500 500 200 20
  • 进化计算中基于分类的预处理代理模型

    问题提出 代理模型的构造较复杂 xff0c 作者希望构造一个更为简单的廉价 xff08 cheap xff09 的代理模型来评估子集的质量 因此作者提出了一个叫做CPS xff08 classification based preselec
  • Python利用Graphviz画图

    Graphviz的是AT amp T Labs Research开发的图形绘制工具软件 Graphviz的是AT amp T Labs Research开发的图形绘制工具 他可以很方便的用来绘制结构化的图形网络 支持多种格式输出 生成图片的
  • Java-Web项目总结

    使用jetbrain的idea创建Java Web项目 链接地址 xff1a http www omegaxyz com 2018 10 04 intellij idea java web Java MVC模式概述 链接地址 xff1a h
  • 基于WMD(词移距离)的句子相似度分析简介

    word2vec word2vec是只有一个隐层的全连接神经网络 对语料中的所有词汇进行训练并生成相应的词向量 xff08 Word Embedding xff09 WI 的大小是VxN V是单词字典的大小 每次输入是一个单词 N是设定的隐
  • Android 使用字符串动态获取资源ID

    android文件中每个文件都有一个ID xff0c 如下图所示 xff0c 左边的0x7f060000即是文件的ID xff1a 如果我们想在代码中获取这个文件的ID应该使用高效率的反射机制 xff0c 可以新建一个Java类代码如下 x
  • wxpython画表格代码

    wxPython是Python语言的一套优秀的GUI图形库 允许Python程序员很方便的创建完整的 功能键全的GUI用户界面 wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户
  • 数据库c3p0配置SQL Server与MySQL

    C3P0是一个开源的JDBC连接池 xff0c 它实现了数据源和JNDI绑定 xff0c 支持JDBC3规范和JDBC2的标准扩展 目前使用它的开源项目有Hibernate xff0c Spring等 SQL Server配置 xff1a
  • JSP连数据库登录检查用户名和密码模板

    JSP全名为Java Server Pages xff0c 中文名叫java服务器页面 xff0c 其根本是一个简化的Servlet设计 xff0c 它是由Sun Microsystems公司倡导 许多公司参与一起建立的一种动态网页技术标准
  • 基于移动设备与CNN的眼动追踪技术简介

    眼动追踪是一项科学应用技术 xff0c 用户无需与交互设备物理接触即可发送信息与接收反馈 从原理上看 xff0c 眼动追踪主要是研究眼球运动信息的获取 建模和模拟 xff0c 用途颇广 而获取眼球运动信息的设备除了红外设备之外 xff0c
  • 递归下降实现LL(1)文法分析C语言与Python实现

    对文法G的句子进行确定的自顶向下语法分析的充分必要条件是 xff0c G的任意两个具有相同左部的产生式A gt 满足下列条件 xff1a xff08 1 xff09 如果 均不能推导出 xff0c 则 FIRST FIRST 61 xff0
  • Ubuntu下gcc的安装

    sudo apt get build dep gcc

随机推荐

  • PyTorch入门

    PyTorch入门 PyTorch 是一个建立在 Torch 库之上的 Python 包 xff0c 旨在加速深度学习应用 PyTorch 提供一种类似 NumPy 的抽象方法来表征张量 xff08 或多维数组 xff09 xff0c 它可
  • 华氏451

    2015年12月21日 xff0c 因特网工程指导组 IETF 批准了全新HTTP状态错误代码 451 xff0c 这个代码的官方释义为 由于法律原因而不可用 451 数字来源于 1953 年由美国作家雷 布莱伯利所著的反乌托邦小说 华氏
  • 蚁群算法最短路径规划多出口情况及问题答疑

    最近好多人问我蚁群算法最短路径规划如何设置多出口情况 xff0c 原来2019年美赛D题 拯救卢浮宫 需要用到 本人没有看过美赛的题目 xff0c 下面给出一些不成熟的代码 蚁群算法简介 xff1a 蚁群算法最早是由Marco Dorigo
  • 反世代距离评价指标IGD

    反世代距离评价指标 Inverted Generational Distance IGD 是一个综合性能评价指标 它主要通过计算每个在真实 Pareto前沿面上的点 个体 到算法获取的个体集合之间的最小距离和 xff0c 来评价算法的收敛性
  • 遗传算法解决TSP问题MATLAB实现(详细)

    问题定义 xff1a 巡回旅行商问题 给定一组n个城市和俩俩之间的直达距离 xff0c 寻找一条闭合的旅程 xff0c 使得每个城市刚好经过一次且总的旅行距离最短 TSP问题也称为货郎担问题 xff0c 是一个古老的问题 最早可以追溯到17
  • 二叉树遍历的转换C++实现

    二叉树的遍历分为以下三种 xff1a 先序遍历 xff1a 遍历顺序规则为 根左右 中序遍历 xff1a 遍历顺序规则为 左根右 后序遍历 xff1a 遍历顺序规则为 左右根 什么是 根左右 就是先遍历根 xff0c 再遍历左节点 xff0
  • Java数据存取对象(DAO)

    什么是DAO DAO xff08 Data Access Object xff09 顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象 xff0c 在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作 在实际的开发中 xff
  • 经典蝙蝠算法MATLAB实现

    为什么会有这么多基于群智能的算法 xff0c 蚁群 粒子群 鱼群 烟花 炮竹 猪群 牛群 马群 羊群 猴群 鸡群 算法 xff1f xff1f xff1f xff1f xff1f xff1f 黑人问号 jpg 蝙蝠算法 BA 是 Yang
  • 计算机领域顶级会议、期刊、人物与国家排名2019

    原文地址 xff1a 最近浏览到一个网站 xff1a http www guide2research com 这是一个根据谷歌学术排名的计算机领域各类会议 学术期刊 人物 国家 组织的排名查询网站 时间2019年3月 会议 按照Hindex
  • 基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)

    BA算法简介 http www omegaxyz com 2019 02 12 ba matlab 该论文修改 作者在原有BA算法上进行3个修改 跳出局部最优 xff08 扰动个体 xff09 使得算法变得稳定脉搏和响度修改 xff0c 平
  • Ubuntu下pip的安装与升级

    安装 pip2 sudo apt get install python pip python dev build essential wukai 64 wukai sudo apt install python span class hlj
  • PyQt5多线程刷新界面防假死

    在做GUI界面时我们希望后台任务能够与UI分开 xff0c 在PyQt中 xff0c 主线程用来重绘界面 而子线程里边的实时处理结果需要反馈到界面 xff0c 子线程里边不能执行界面更新操作 wxpython多线程刷新界面转到 http w
  • NSGA2算法中文详解与MATLAB实现整理

    NSGA2算法 NSGA II多目标遗传算法概述 http www omegaxyz com 2017 04 14 nsga iiintro NSGA2算法MATLAB实现 xff08 能够自定义优化函数 xff09 http www om
  • 对极大似然估计的理解

    参数估计 xff08 parameter estimation xff09 统计推断的一种 根据从总体中抽取的随机样本来估计总体分布中未知参数的过程 从估计形式看 xff0c 区分为点估计与区间估计 xff1a 从构造估计量的方法讲 xff
  • 动态规划——最大整除子集C++

    来自LeetCode 368 描述 给出一个由无重复的正整数组成的集合 xff0c 找出其中最大的整除子集 xff0c 子集中任意一对 Si xff0c Sj 都要满足 xff1a Si Sj 61 0 或 Sj Si 61 0 如果有多个
  • HyperVolume多目标评价指标概述

    提出 Hypervolume 指标评价方法最早是由 Zitzler 等提出 xff0c 它表示由解集中的个体与参考点在目标空间中所围成的超立方体的体积 评价标准 Hypervolume 指 标 评 价 方 法 是 一 种 与 Pareto
  • 三路快排C++实现与应用

    本文共467个字 xff0c 预计阅读时间需要2分钟 三路快排是快速排序算法的升级版 xff0c 用来处理有大量重复数据的数组 主要思想是选取一个key xff0c 小于key的丢到左边 xff0c 大于key的丢到右边 xff0c 递归实
  • Wilcoxon秩和检验简介与MATLAB实现

    Wilcoxon秩和检验 rank sum test xff0c 有时也叫Mann Whitney U检验 xff0c 是另一类非参数检验方法 xff0c 它们不对数据分布作特殊假设 xff0c 因而能适用于更复杂的数据分布情况 适用性 x
  • FatMouse’ Trade

    简介 贪心算法 xff08 又称贪婪算法 xff09 是指 xff0c 在对问题求解时 xff0c 总是做出在当前看来是最好的选择 也就是说 xff0c 不从整体最优上加以考虑 xff0c 他所做出的是在某种意义上的局部最优解 贪心算法不是
  • 算法复杂度与NP问题

    引言 美剧 基本演绎法 S2E2中 xff0c 两位研究 NP 问题的数学家被谋杀了 xff0c 凶手是同行 xff0c 因为被害者即将证明 P 61 NP 问题 假设人类证明了P 61 NP 是真的 xff0c 那么就会有一个算法 xff