排序 np_优化求解中的NP-hard 问题学习

本文介绍了NP-hard的概念,解释了时间复杂度、约化(Reducibility)及其在解决复杂问题中的应用,如旅行商问题。通过讨论P、NP、NPC和NP-hard的区别,帮助读者理解这些问题在计算机科学中的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fdf4a21f031e44f7fdd1ce014a5ba9ed.png

所谓NP-hard,指所有NP问题都能在多项式时间复杂度内归约到的问题。

这里梳理下涉及到的知识点,主要参考来源:

《什么是P、NP、NPC、NP-Hard问题》、《什么是P问题、NP问题和NPC问题》、《何为NP-hard》、百度百科:NP-hard

介绍一些预备知识

1. 时间复杂度

时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。

程序的时间复杂度一般可以分为两种级别:

  • 多项式级的复杂度,如O(1),O(log(n))、O(n^a)等
  • 非多项式级(NP,non-deterministic polynomia)的复杂度,如O(a^n)、O(n!)等。后者的复杂度计算机往往不能承受。

自然地,可以想到一个问题:

会不会所有的问题都可以找到复杂度为多项式级的算法呢?

显然,“不可能”。

例如著名的旅行商问题(Travel Saleman Problem or TSP):假设一个推销员需要从香港出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。假设公司只给报销 C 元钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 C?

推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排! 这种枚举法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值