旅行商问题中 NP 难问题和 NP 完全问题的混淆

2024-05-02

旅行商优化(TSP-OPT)是一个NP难题,旅行商搜索(TSP)是NP完全问题。然而,TSP-OPT 可以简化为 TSP,因为如果 TSP 可以在多项式时间内求解,那么 TSP-OPT(1) 也可以。我认为要将 A 简化为 B,B 必须与 A 一样难(如果不是比 A 难的话)。正如我在下面的参考文献中看到的,TSP-OPT 可以简化为 TSP。 TSP-OPT 应该比 TSP 更难。我很困惑...

参考文献:(1)算法、Dasgupta、Papadimitriou、Vazirani 练习 8.1http://algorithmics.lsi.upc.edu/docs/Dasgupta-Papadimitriou-Vazirani.pdf http://algorithmics.lsi.upc.edu/docs/Dasgupta-Papadimitriou-Vazirani.pdf https://cseweb.ucsd.edu/classes/sp08/cse101/hw/hw6soln.pdf https://cseweb.ucsd.edu/classes/sp08/cse101/hw/hw6soln.pdf

http://cs170.org/assets/disc/dis10-sol.pdf http://cs170.org/assets/disc/dis10-sol.pdf


我快速浏览了你提供的参考文献,我必须承认,我真的不喜欢你的教科书(第一个 pdf)中的一件事:它们解决了 NP 完整性,但几乎没有提及决策问题。所提供的 NP 完全问题的定义也有些偏离我对教科书的期望。我认为这是一个有意识的决定,以使介绍更具吸引力......

我将提供一个简短的答案,然后对相关概念进行更详细的解释。


简洁版本

直观地(非正式地),问题在于NP如果很容易verify它的解决方案。

另一方面,一个问题是NP-hard如果很难解决,或者find一个办法。

现在,如果一个问题既是 NP 又是 NP 难的,那么它就是 NP 完全的。因此,NP 完备性有两个关键的、直观的属性。便于verify,但很难find解决方案。

尽管它们看起来很相似,但验证和寻找解决方案是两件不同的事情。当您使用归约参数时,您正在考虑是否可以找到解决方案。在这方面,TSP和TSP-OPT都是NP难的,很难找到它们的解。事实上,第三个pdf提供了教科书练习8.1的解决方案,这直接表明TSP和TSP-OPT同样难以解决。

现在,TSP 和 TSP-OPT 之间的一个主要区别是前者是(教科书所说的)搜索问题,而后者是优化问题。验证搜索问题的解的概念是有意义的,并且在 TSP 的情况下很容易做到,因此它是 NP 完全的。对于优化问题,验证解决方案的概念变得很奇怪,因为如果不首先计算最佳解决方案的大小,我想不出任何方法来做到这一点,这大致相当于解决问题本身。由于我们不知道验证 TSP-OPT 解决方案的有效方法,因此我们不能说它是 NP 的,因此我们不能说它是 NP 完全的。 (详细解释中有更多关于此主题的内容。)


简单来说,对于 TSP-OPT 来说,验证难、求解难,而对于 TSP 来说,验证容易、求解难。 归约参数仅在寻找解决方案时有帮助,因此在验证解决方案时需要其他参数来区分它们。


更多细节

你的教科书非常简短地介绍了一件事:决策问题是。 形式上,NP 完整性、NP 硬度、NP、P 等概念是在决策问题而不是优化或搜索问题的背景下发展起来的。

下面是这些不同类型问题之间差异的简单示例。

决策问题是一个问题,其答案是YES or NO.

TSP决策问题

Input:图表G,预算b

Output:G 最多承认重量为 b 的旅行吗? (是/否)

这是搜索版本

TSP搜索问题

Input:图表G,预算b

Output:查找重量至多为 b 的 G 游览(如果存在)。

现在优化版本

TSP优化问题

Input:图G

Output:求一条权重最小的 G 巡游。

脱离上下文,TSP 问题可能涉及其中任何一个。我个人所说的TSP就是决策版本。这里你的教科书使用TSP作为搜索版本,使用TSP-OPT作为优化版本。

这里的问题是这些不同的问题是完全不同的。决策版本只要求存在,而搜索版本要求更多,它需要一个这样的解决方案的例子。在实践中,我们常常希望得到实际的解决方案,因此更实际的方法可能会省略提及决策问题。

现在呢? NP 完全问题的定义是针对决策问题的,因此从技术上讲,它并不直接适用于搜索或优化问题。但由于其背后的理论定义明确且有用,因此仍然可以方便地将术语 NP 完全/NP 困难应用于搜索/优化问题,以便您了解这些问题的解决难度。因此,当有人说旅行商问题是 NP 完全问题时,形式上它应该是该问题的决策问题版本。

显然,许多概念可以扩展,以便它们也涵盖搜索问题,这就是它在教科书中的呈现方式。决策、搜索和优化之间的差异正是课本中练习 8.1 和 8.2 试图涵盖的内容。这些练习可能旨在让您对这些不同类型的问题之间的关系以及它们之间的关系感兴趣。

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

旅行商问题中 NP 难问题和 NP 完全问题的混淆 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐