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

news2025/1/18 3:27:39

一、说明

        关于复杂问题,始终是计算机科学挡在路前的一块巨石。所谓一个问题有解,但需要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.coloradmin.cn/o/1215790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis-plus3.5.3.1 支持不同数据源sql适配

mybatis-plus3.5.3.1 支持不同数据源sql适配 背景 最近公司要求支持国产数据库达梦,人大金仓,高斯等数据库,这些数据库与mysql的语法有一些差异,需要做一些兼容操作。 解决问题 1.不同数据库分页不同 2.支持通过参数控制执行…

JQuery ajax 提交数据提示:Uncaught TypeError:Illegal invocation

JQuery ajax 提交数据提示:Uncaught TypeError:Illegal invocation 1 问题描述 用jQuery Ajax向DRF接口提交数据的时候,console提示:Uncaught TypeError:Illegal invocation(未捕获的异常:非法调用)。 这个问题可能有两种原因导…

MatrixOne 实战系列回顾 | 建模与多租户

本次分享主要介绍MatrixOne建模与多租户相关内容。 1 建模 #1 与MySQL的区别 使用create table语句建表和MySQL建表语句基本相同,也有几点要注意。 MatrixOne暂不支持空间数据类型,其他数据类型在保持与 MySQL 命名一致的情况下,在精度与…

android studio导入eclipse项目

网上下载一个老工程,.project文件里有eclipse。 android studio导入eclipse项目 eclipse项目结构 Android studio文件结构 下面是导入步骤: 第一步,打开一个项目。 选择File->New->Import Project 第二步,选择Eclipse项目根…

保护数据库防止数据泄露

为了避免金钱损失、声誉损害、机密性损失、不遵守政府法规等,保护组织的数据至关重要,保护数据库可以保护您的企业免受无数安全威胁,包括权限滥用、数据泄露、数据库注入和其他网络攻击。 选择工具保护数据库 Log360 是一站式 SIEM 解决方案…

element-plus使用el-date-picker组件时,如何禁止用户选择当前时间之后的日时分秒

element-plus使用el-date-picker组件时&#xff0c;如何禁止用户选择当前时间之后的日时分秒 例&#xff1a; 当前时间为2023-11-15 14.24&#xff0c;不能选择这之后的时分秒。&#xff08;禁止用户选择2023-11-15 14.28&#xff09; <el-date-pickerv-model"form.s…

MM MSTA-STATM数据丢失问题

2001工厂的采购视图已经维护了&#xff0c;但是在MSTA里面找不到对应的记录 解决方案&#xff1a; 1、se38 执行程序 RMMMVERW 参考 data were lost in table msta | SAP Community 2、取数逻辑换位置&#xff0c;从marc 取数 附加&#xff1a;RMMMVERW 执行界面 执行后…

nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)

文章目录 一、完全卸载旧的nodejs1、打开系统的控制面板&#xff0c;点击卸载程序&#xff0c;卸载nodejs&#xff08;1&#xff09;打开系统的控制面板&#xff0c;点击程序下的卸载程序&#xff08;2&#xff09;找到node.js&#xff0c;鼠标右击出现下拉框&#xff0c;点卸载…

【Python语言】字典的使用方法总结

目录 1、基本知识 1.1 定义 1.2 定义字典变量 1.3 定义空字典 2、字典的常用方法介绍 2.1 基于key获取value 2.2 嵌套字典 2.3 新增元素 2.4 更新元素 2.5 删除元素 2.6 清空字典 2.7 获取全部的key 2.8 遍历字典 2.9 统计字典内的元素数量 3、 字典常用操作总结…

如何快速搭建Spring Boot接口调试环境并实现公网访问

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

Figma语言设置教程:简易切换至中文,提高操作便捷性!

Figma是世界领先的在线协作UI设计工具。它摆脱了Sketch等传统设计软件对设备的依赖&#xff0c;使设计师可以随时随地使用任何设备打开网页浏览器&#xff0c;轻松实现跨平台、跨时空的设计合作。那么&#xff0c;Figma如何改变中文&#xff0c;以提高国内设计师的使用体验呢&a…

ZOC8 for Mac:最佳终端仿真器,助力您的工作效率飞升!

在现代的工作环境中&#xff0c;终端仿真器扮演着不可或缺的角色。无论是开发人员、系统管理员还是网络工程师&#xff0c;都需要一个功能强大、易于使用的终端仿真器来处理各种任务。而ZOC8 for Mac正是为这些专业人士而打造的最佳选择。 作为一款全功能的终端仿真软件&#…

聊天即绘画,我来给好说 AI 当「甲方」

很多人说 “AI 能解放生产力”&#xff0c;放几个月前&#xff0c;小编并不这么想。用过 SD 画图的朋友都知道&#xff0c;拟提示词、调参数那都是脑力活&#xff0c;反复试错的过程就像在操纵机器、给 AI 打下手。 但最近&#xff0c;好说上线了 “聊天即绘画” 的 AI 绘画 2…

解决:Android TextView 设置斜体后右侧文字被遮挡

一、问题说明 遇到一个比较奇怪的情况&#xff0c;给 TextView 文字设置倾斜后&#xff0c;右侧的文字会被遮挡&#xff0c;感觉这应该是 Android 的一个 bug &#xff01; 上代码&#xff1a; <TextViewandroid:id"id/tv_title"android:layout_width"wra…

【Git企业开发】第八节.企业级开发模型和企业级项目管理实战

文章目录 前言一、企业级开发模型 1.1 系统开发环境 1.2 Git分支设计规范二、企业级项目管理实战 2.1 DevOps研发平台 2.2 开发场景-基于git flow模型的实践 2.3 环境bug修复总结 前言 一、企业级开发模型 我们知道&#xff0c;一个软件从零开始到最终…

新手小白看过来——带你快速入门跨境电商

近几年来&#xff0c;国内外贸交易是越来越火爆&#xff0c;其中跨境电商成为了2023年的热门风口行业&#xff0c;尽管现在做跨境电商的从业者有很多&#xff0c;但仍然有许多0基础小白想通过跨境电商获取人生的第一桶金&#xff0c;那么新手应该如何在跨境电商领域取得成功呢&…

亲测:你这些网站都不知道,哪来时间去摸鱼?

一些我常用且好用的在线工具 Postcat - 在线API 开发测试工具 postcat.com/ API 开发测试工具 Postcat 是一个强大的开源、免费的、跨平台&#xff08;Windows、Mac、Linux、Browsers...&#xff09;的 API 开发测试工具&#xff0c;支持 REST、Websocket 等协议&#xff08…

五金信息展示预约小程序的作用是什么

五金行业所覆盖的产品很广&#xff0c;如灯具、浴具、门窗、工具等都是人们生活所需或常用到的&#xff0c;而五金行业规模也是连年上涨&#xff0c;市场呈现多品牌多门店多区域扩展的趋势。 虽然市场规模大&#xff0c;但同样问题不少&#xff0c;接下来我们来看看几个痛点。…

Python利器:Requests-HTML——网络爬虫的得力助手

概要 在Python的世界里&#xff0c;网络爬虫是一个非常热门的领域。而在这个领域中&#xff0c;Requests-HTML是一个强大的工具&#xff0c;它能够让我们轻松地处理HTML页面&#xff0c;从而获取需要的数据。本文将详细介绍Requests-HTML的特点、使用方法和一些实际应用案例&a…

jedis连接redis

package com.wsd;import redis.clients.jedis.Jedis;import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties;public class Redis {public static void main(String[] args) {//读取properti…