当前位置: 首页 > news >正文

NP-hard问题

一、前置知识

1.多项式

     多项式是由变量(如x、y等)和系数通过有限次的加、减、乘运算得到的表达式。例如3x^2+2x + 1就是一个关于(x)的多项式

2.时间复杂度

        时间复杂度是用来衡量算法运行效率的一个指标。它描述了算法运行时间随着输入规模增长而增长的量级。简单来说,就是当输入的数据量(规模)不断变大时,算法执行所需时间的增长速度。通常使用大O符号(O)来表示时间复杂度。例如,O(n)、O(n²)、O(log n)等。其中,n代表输入规模。

  • 如果一个算法的时间复杂度是O(n),表示算法的运行时间与输入规模n成线性关系。例如,一个简单的遍历数组的算法,需要逐个访问数组中的元素,当数组元素个数为n时,算法执行时间大致与n成正比。
  • 如果时间复杂度是O(n²),则运行时间与输入规模n的平方成正比。例如,嵌套的双层循环遍历一个二维数组,当二维数组的边长为n时,执行时间会随着n的平方增长。
  • O(log n)的时间复杂度表示算法运行时间的增长速度比线性增长慢很多。例如,二分查找算法在一个有序数组中查找元素时,每次查找都能将搜索范围缩小一半,其时间复杂度就是O(log n)。

3.约化

        一个问题A可以约化为B的含义是,可以用问题B的解法解决问题A。

二、基础概念

1.P问题

        在计算复杂性理论中,P问题(Polynomial - time problems)是指能够在多项式时间内被解决的问题。这里的“解决”是指可以用一个确定性算法,在输入规模为n的情况下,在时间复杂度为O(n^k)(其中k为某个常数)内得到问题的解。

        例如,计算两个整数的和、判断一个数是否为偶数等问题都是P问题。对于计算两个整数的和,无论这两个整数有多大,我们都可以按照基本的加法运算规则,在有限的、与输入规模成多项式关系的步骤内得到结果。

2.NP问题

        NP 问题(Nondeterministic Polynomial - time problems)是指可以在多项式时间内验证一个解是否正确的问题。这里强调的是验证解的速度,而非找到解的速度。

        例如,对于一个旅行商问题(TSP),给定一个特定的旅行路线(解),我们可以在多项式时间内计算这条路线的总长度,并验证它是否满足问题的要求(比如是否是所有城市都经过且每个城市只经过一次的路线中的较短者)。

3.NP-complete问题

        NP - complete(NP 完全)问题是 NP 问题中的一个特殊子类。一个问题是 NP - complete 问题需要满足两个条件:

  • 它必须是一个 NP 问题,也就是说,可以在多项式时间内验证一个解是否正确。
  • 所有的 NP 问题都能够在多项式时间内归约到这个问题。归约是一种计算复杂性理论中的概念,简单来说,如果问题 A 可以归约到问题 B,那么在某种意义上,问题 A 不比问题 B 难。

4.NP-hard问题

        NP - hard 问题至少和 NP 完全问题(NP - complete)一样难。如果一个问题是 NP - hard 的,意味着它不比 NP 中的任何问题容易,这里的 “容易” 是从计算复杂性的角度来说的。即使可以在多项式时间内验证一个 NP 问题的解,但对于 NP - hard 问题,目前还没有发现多项式时间的算法来解决它。

        如果所有 NP 问题都能在多项式时间内归约到某个问题,那么这个问题就是 NP - hard 问题。归约是一种转换方法,例如,如果有问题 A 和问题 B,若能在多项式时间内将问题 A 的实例转化为问题 B 的实例,并且利用问题 B 的解能在多项式时间内得到问题 A 的解,就说 A 可以归约到 B。

三、实例

1.旅行商问题(Travelling Salesman Problem, TSP)
  • 给定一组城市和它们之间的距离,要求找到一条经过所有城市且每个城市只经过一次的最短路径。这是一个经典的 NP - hard 问题。
  • 随着城市数量的增加,可能的路径数量呈指数级增长,很难在多项式时间内找到最优解。
2.背包问题(Knapsack Problem)的一些变形
  • 例如,有多个物品,每个物品有重量和价值,在限定背包容量的情况下,求能装入背包的最大价值组合。如果对这个问题进行一些复杂的扩展,如增加多种约束条件等情况,就可能变成 NP - hard 问题。
http://www.lryc.cn/news/451402.html

相关文章:

  • 【Nacos架构 原理】内核设计之Nacos通信通道
  • 【单片机】单片机map表详细解析
  • 考研笔记之操作系统(三)- 存储管理
  • vim/vi常用命令大全
  • 什么是大语言模型,一句话解释
  • 【数据库】 MongoDB 撤销用户的角色和权限
  • vue2接入高德地图实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)
  • 【重学 MySQL】四十六、创建表的方式
  • WPS在表格中填写材料时,内容过多导致表格不换页,其余内容无法正常显示 以及 内容过多,导致表格换页——解决方法
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-01
  • 第一弹:C++ 的基本知识概述
  • 在职场,没人告诉你的人情世故
  • 激光切割机适用材质有哪些
  • C#自定义工具类-数组工具类
  • 18年408数据结构
  • Android 通过自定义注解实现Activity间跳转时登录路由的自动拦截
  • 安全开发指南
  • 【word脚注】双栏设置word脚注,脚注仅位于左栏,右栏不留白
  • ROS学习笔记(三):VSCode集成开发环境快速安装,以及常用扩展插件配置
  • 论文精读--Two-Stream Convolutional Networks for Action Recognition in Videos
  • JAVA姓氏头像情侣头像家庭头像签名头像谐音顽埂头像设计小程序头像大全系统小程序源码
  • UE5.4.3 Replay 重播回放系统
  • 深入掌握 Protobuf 与 RPC 的高效结合:实现C++工程中的高效通信
  • 录屏软件大比拼:四款必备工具助你轻松录制精彩瞬间!
  • 计算机毕业设计宠物领养网站我的发布领养领养用户信息/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
  • 用示波器测动态滞回线
  • 【JDK动态代理】JDK动态代理:为何只能代理接口和接口实现类
  • MFC工控项目实例二十一型号选择界面删除参数按钮禁用切换
  • 前端框架对比和选择指南
  • 人工智能价格战——如何降低成本让人工智能更易于普及