著名的《NP问题》是个啥概念?

一、说明

        关于复杂问题,始终是计算机科学挡在路前的一块巨石。所谓一个问题有解,但需要2^ {100}秒完成,这相当于说,此类问题无解。还有一类问题是说不清楚到底有没有一个具体解法,该解法能在多项式时间复杂函数上完成,也就是说:目前还没找到好方法的问题。以上归于NP类问题,本文专门讨论NP类问题的前因后果,以增加读者的见识。

二、基本概念

2.1 对问题分类

        问题如何分类?就问题本身而言,问题解决者不予考虑,即面对同一问题是人解决,还是动物解决、还是外星人解决,都不影响问题本身。再说,问题的解决方案,是否构成问题分类,答案也是不可能的, 因为问题类别是通过问题解决算法的属性定义的,或者举个反例:所有的算法都可以用穷举法完成,那么算法对问题的分类成了一种。
        正确方法背后的动机是打算从困难的角度来谈论问题,例如,很难或容易解决。
        粗略地说,基本思想是:如果存在一个快速求解器,则称其为简单,否则则称为困难。这种问题硬度的概念导致了对计算复杂性的研究。

        在继续之前,我们需要根据相应搜索空间中的对象类型对优化问题进行进一步的区分。如果搜索空间 S 由连续变量(即实数)定义,那么我们就有一个数值优化问题。如果 S 由离散变量(例如布尔值或整数)定义,那么我们就有一个组合优化问题。为组合优化问题定义了进一步讨论的各种问题硬度概念。请注意,离散搜索空间始终是有限的,或者在最坏的情况下,是可数的无限。

2.2 围绕P类问题的几个概念

        我们并不试图提供计算复杂性的完整概述,因为这在许多书籍中都有很好的介绍。相反,我们简要概述了一些重要概念,它们对解决问题的影响,以及一些非常常见的误解。此外,我们没有以数学上的严谨性来对待这个主题。因此,我们不会给出基本概念的精确定义,如算法、问题大小或运行时,而是以直观的方式使用这些术语,并在必要时通过示例解释它们的含义。

        计算复杂性的第一个关键概念是问题大小,它基于手头问题的维度(即变量的数量)和问题变量的不同值的数量。对于前面讨论的例子,要访问的城市数量,或者要放在板上的皇后数量可能是表明问题大小的明智措施。

        第二个概念涉及算法,而不是问题。算法的运行时间是终止所需的基本步骤或操作数。计算复杂性背后的一般直觉(尽管并不总是正确的)是更大的问题需要更多的时间来解决。问题硬度最广为人知的定义是将问题的大小与求解问题的算法的(最坏情况)运行时间联系起来。这种关系由一个公式表示,该公式将最坏情况运行时间的上限指定为问题大小的函数。简单地说,这个公式可以是多项式(被认为表示相对较短的运行时间)或超多项式,例如指数(表示较长的运行时间)。

        第三个概念是问题减少,即我们可以通过合适的映射将一个问题转化为另一个问题。请注意,转换可能是不可逆的。尽管这种转换或减少问题的想法有点复杂,但现实世界中的给定问题通常可以以不同但等效的方式形式化,这并不完全陌生。关于问题硬度的常用概念现在可以表述如下。

        如果存在一种可以在多项式时间内解决问题的算法,则称问题属于 P 类。也就是说,如果存在一种算法,其问题大小 n 的最坏情况运行时间小于某些多项式公式 F 的 F(n)。通俗地说,集合 P 包含可以轻松解决的问题,例如最小生成树问题。简而言之P问题就是可以搞定的问题。

三、NP问题专论

3.1 NP完全问题

        任何一类尚未找到有效解决算法的计算问题。许多重要的计算机科学问题都属于此类,例如旅行商问题、可满足性问题和图覆盖问题。

        所谓的容易,或者易于处理,问题可以通过在多项式时间内运行的计算机算法来解决;即对于一个问题大小n,找到解决方案所需的时间或步骤数是n的多项式函数。解决难题的算法,或者另一方面,棘手的问题需要时间问题大小n的指数函数。多项式时间算法被认为是有效的,而指数时间算法被认为是低效的,因为随着问题规模的增加,后者的执行时间增长得更快。

        一个问题称为 NP (非确定性多项式)如果它的解可以是在多项式时间内猜测和验证;不确定性意味着不遵循特定规则进行猜测。如果一个问题是 NP 问题,并且所有其他 NP 问题都可以多项式时间简化为该问题,则该问题是 NP 完全问题。

        因此,为任何 NP 完全问题找到一个有效的算法意味着可以为所有此类问题找到一个有效的算法,因为属于此类的任何问题都可以重新转换为该类的任何其他成员。目前尚不清楚是否会找到解决 NP 完全问题的多项式时间算法,并且确定这些问题是否易于处理仍然是理论计算机科学        中最重要的问题之一。当必须求解NP完全问题时,一种方法是使用多项式算法来近似解;由此获得的答案不一定是最优的,但会相当接近。

3.2 NP等效性选择

        如果一个问题可以通过某种算法(没有关于其运行时的声明)来解决,并且任何解决方案都可以在多项式时间内通过其他算法进行验证,则该问题被称为属于 NP 类。请注意,P 是 NP 的子集,因为多项式求解器也可用于验证多项式时间内的解。NP 问题的一个例子是子集总和问题:给定一组整数,该集合中是否有一个或多个元素的总和为零?显然,对于给定的数字集,对这个问题给出否定的答案需要检查所有可能的子集。

        不幸的是,在集合的大小上,可能的子集的数量超过了多项式。但是,验证解决方案是否有效仅涉及对发现的子集的内容求和。如果一个问题属于 NP 类,则称它属于 NP 类,并且 NP 中的任何其他问题都可以通过在多项式时间内运行的算法简化为这个问题。在实践中,这些都是不断出现的难题。在互联网上可以很容易地找到几个著名的NP完备问题的例子——我们不会试图总结,只是说计算机科学中绝大多数有趣的问题都是NP完备的

3.3 复杂问题和NP-hard

        最后,如果一个问题至少与 NP-complete 中的任何问题一样难(因此 NP-complete 中的所有问题都可以简化为 NP-hard 中的一个问题),但解不一定在多项式时间内得到验证,则称该问题属于 NP-hard 类。一个这样的例子是停止问题。在多项式时间内无法验证解的问题的存在证明了 P 类与 NP-hard 类不同。目前尚不清楚的是,P 和 NP 这两个类实际上是否相同。如果是这样的话,那么对计算机科学和数学的影响将是巨大的,因为众所周知,对于以前认为困难的问题,必须存在快速算法。因此,P = NP 是否是复杂性理论的一大挑战,并且对于任何证明 P = NP 或 P != NP 的证明,都会提供一百万美元的奖励。

        请注意,虽然后者是复杂数学的主题,但前者可以通过为任何NP完全问题创建一个快速算法来证明,例如,一个用于旅行推销员问题的算法,其最坏情况下的运行时间与城市数量呈多项式比例。图 1.4 显示了根据 P 和 NP 的相等性的问题硬度等级。如果 P = NP,则集合 P = NP = NP-complete,但它们仍然是 NP-hard 的子集。

图 1.4.问题硬度的等级取决于 P 和 NP 的相等性

        虽然这听起来很理论化,但它对解决问题有一些非常重要的影响。如果一个问题是NP完备的,那么尽管我们可能能够在多项式时间内解决特定实例,但我们不能说我们能够在所有可能的实例中都这样做。因此,如果我们希望将解决问题的方法应用于这些问题,我们目前必须要么接受我们可能只能解决非常小(或其他简单)的实例,要么放弃提供精确解决方案的想法,并依靠近似或元启发式来创建足够好的解决方案。这与已知的 P 中的问题形成鲜明对比。尽管这些问题的可能解决方案的数量可能会呈指数级增长,但存在一些算法可以找到解决方案,并且其运行时间与实例的大小呈多项式关系。

        总而言之,有大量的实际问题,经过检查,这些问题被证明是已知属于NP完备类的抽象问题的变体。尽管此类问题的某些实例可能很容易,但大多数计算机科学家认为,对于此类问题不存在多项式时间算法,当然还没有发现。因此,如果我们希望能够为此类问题的任何实例创建可接受的解决方案,我们必须转向使用近似和元启发式方法,并放弃绝对找到可能最适合该实例的解决方案的想法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/152332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧城市怎么实时监测内涝积水的发生及解决办法?

随着城市化进程步伐不断加快,城市内涝问题越来越受到人们的关注。内涝不仅不便于人们的生活,还可能危害城市之中的基础设施比如路面等。因此实时监测内涝积水的发生并采取有效的解决办法是市政府的紧急任务,同时解决城市内涝也利于城市生命线…

通过阿里云宕机这件事,来看国内程序员的畸形职场文化

1、阿里云宕机始末 阿里在变更这块有三板斧,可监控、可灰度,可回滚。另外他们内部非常喜欢用这类简短的语句传递意图。 听起来非常简单,就目前大多数互联网公司基础设施都会支持这3项,只是支持的程度不太一样,普通的监…

蓝桥杯 vector

vector的定义和特性 注意&#xff1a;vector需要开C11标准 vector的常用函数 push_back():将元素添加到vector末尾 pop_back():删除vector末尾的元素 begin()和end():返回指向vector第一个元素和最后一个元素之后一个位置的迭代器。 示例 vector<int> vec{10,20,30};f…

准「AI 时代」下,如何衡量程序员的工作效率和生产力?

近 20 家科技、金融和制药公司实施了新的研发效能管理方法&#xff0c;并取得了令人鼓舞的初步结果。 客户报告的产品缺陷减少 20%-30%&#xff1b;员工体验分数提高 20%&#xff1b;客户满意度评分提高 60 个百分点。 大模型和 AIGC 技术催生了软件研发的新范式&#xff0c;也…

mybatis、mysql 创建时间(create_time)异常自动更新为当前时间

目录标题 一、问题二、原因三、解决 一、问题 bug: mybatis更新代码没有修改时间&#xff0c;但是时间会自动更新为当前时间。 。。。 被坑了挺久 二、原因 可能是创建表的时候&#xff0c; Navicat Premium 等可视化工具给你整活了。。。 三、解决 取消勾选。 注意&…

相对强弱指标 RSI

SMA&#xff08;A,B,1)MA AA ,一天前的收盘价&#xff1b; BB&#xff0c;如果时涨的&#xff0c;把涨幅返回&#xff1b; CC,12天的涨幅占12天全部涨跌幅的多少&#xff1b; 画一条50 的线条。

ssd202d-logo-cmd_bootlogo分析

cmd_bootlogo.c运行过程 common/autoboot.c:593: disp_logo(0); sprintf(cmd_str, "bootlogo %d 1 0 0 0", logo_id); do_display函数 获取对应结构体,里面有各种参数

悬浮波导SiO2薄膜的应力和折射率控制

引言 悬浮二氧化硅结构对于许多光学和光子集成电路(PIC)应用是重要的&#xff0c;例如宽光谱频率梳&#xff0c;低传播损耗波导&#xff0c;以及紫外-可见光滤光器等。除了这些应用&#xff0c;悬浮波导还可以应用于紫外吸收光谱和一类新兴的基于氮化镓(GaN)纳米线的光子器件&…

百面深度学习-图神经网络

百面深度学习-图神经网络部分 什么是图神经网络&#xff1f; 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是深度学习模型的一个类别&#xff0c;专门设计来处理图结构数据。在图结构数据中&#xff0c;实体以节点&#xff08;vertex&#xff0…

window.open 打开后全屏

window.open(url,newwindow,scrollbarsyes,resizable1,modalfalse,alwaysRaisedyes,fullscreenyes,_blank)

搭建知识付费系统的最佳实践是什么

在数字化时代&#xff0c;搭建一个高效且用户友好的知识付费系统是许多创业者和内容创作者追求的目标。本文将介绍一些搭建知识付费系统的最佳实践&#xff0c;同时提供一些基本的技术代码示例&#xff0c;以帮助你快速入门。 1. 选择合适的技术栈&#xff1a; 搭建知识付费…

Ubuntu20.04安装搜狗输入法

目录 1. sogoupinyin安装1.1 安装 fcitx1.2 下载搜狗官方安装包1.3 安装依赖&#xff08;这步很关键&#xff0c;否则安装完成后&#xff0c;无法输入中文&#xff09;1.4 安装刚才下载的搜狗输入法1.5 切换 fcitx1.6 重启电脑1.7 右上角点击Configure&#xff0c;(因为我安装好…

svg图标最简单的使用方式

svg图标最简单的使用方式 使用svg图标1. 复制图标的svg代码2. 新建个存放svg图标的目录&#xff0c;新建.vue文件3. 在<template>标签内粘贴svg的代码4. 在代码中也可以调整颜色和大小5. 在组件中引用6. svg做的图标要独占一行,使用布局将它安排到合适的地方 使用svg图标…

SecureCRT 9.4.2最新终端SSH工具

SecureCRT是一款终端SSH工具&#xff0c;它提供了类似于Telnet和SSH等协议的远程访问功能。SecureCRT软件特色包括&#xff1a; 支持SSH&#xff08;SSH1和SSH2&#xff09;的终端仿真程序&#xff0c;能在Windows下登录UNIX或Linux服务器主机。SecureCRT支持SSH&#xff0c;同…

基于SSM的员工信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 训练集图片处理2. 测试图片处理3. 模型训练及保存1&#xff09;定义模型结构2&#xff09;优化损失函数3&#xff09;模型训练4&#xff09;模型保存 4. 模型测试 系统测试1. 成功案例2. 失败案例 相关其它博客工…

Ubuntu 20.04 LTS ffmpeg gif mp4 互转 许编译安装ffmpeg ;解决gif转mp4转换后无法播放问题

安装ffmpeg apt install ffmpeg -y gif转mp4 ffmpeg -f gif -i ldh.gif ldh.mp4 故障&#xff1a;生成没报错&#xff0c;但mp4无法播放&#xff0c;体积也不正常 尝试编译安装最新版 sudo apt install -y yasm axel -n 100 https://ffmpeg.org/releases/ffmpeg-6.0.1.tar.x…

基于Element-Plus动态配置Menu 菜单栏

文章目录 前言先看效果可兼容多级菜单栏&#xff08;顺便配置多少级&#xff09; 一、新建组件二、使用步骤总结如有启发&#xff0c;可点赞收藏哟~ 前言 菜单栏配置化 图标配置化参考vite动态配置svg图标及其他方式集合 先看效果 可兼容多级菜单栏&#xff08;顺便配置多少级…

代码随想录算法训练营|五十三天

判断子序列 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 过程&#xff1a; public class Solution {public bool IsSubsequence(string s, string t) {int[,] dp new int[s.Length 1, t.Length 1];for (int i 1; i < s.Length; i) {for (int j 1; j <…

ElasticSearch集群内存占用高?如何降低内存占用看这篇文章就够啦!(冻结索引)

ElasticSearch集群内存占用高&#xff1f;如果降低内存占用看这篇文章就够啦 一、冻结索引的介绍 经常搜索的索引被保留在内存中&#xff0c;因为重建索引和帮助高效搜索需要花费时间。另一方面&#xff0c;可能存在我们很少访问的索引。这些索引不需要占用内存&#xff0c;可…