algorithm - 如何估计这个任务属于 NP 类?
问题描述
这是我的问题:给定数字 x1,... xn。数字满足n个文件的大小和内存盘的容量 D.我们必须明白,我们能不能把文件分成3个磁盘。任何磁盘上记录的文件大小不能超过磁盘容量 D。我们估计这个计算任务属于 NP 类。在这种情况下,检查算法需要哪些额外信息(证书)?
这是我的想法,但我真的不确定:
额外信息:一组 3 组,包含 x1、...、xn 个文件。如果字符串由变量 y1,y2,y3 补充,则可以识别该集合,这些变量将放置在思想集的开头并包含一个与数字不同的符号,这样它就不会干扰文件大小字符串.
Checker:必须能够检查每组文件的总大小是否不超过D盘容量。通过引入一个变量,该算法可能很简单。变量将添加下载的文件大小,直到此数量超过 D 盘的容量或直到达到新设置的开始符号。在超过D盘容量的瞬间,发出否定响应,否则为肯定响应。该算法的耗时为 O(n)。
我不知道如何估计这个算法是 NP 类。因为 NP 可以通过非确定性图灵机在 O(n^k) 时间内求解。
解决方案
通俗地说,NP 的意思是“给定问题的答案,可以在多项式时间内检查答案是否正确”。您帖子中的检查算法具有复杂性 O(n),它是多项式。因此,您的问题出在 NP 中。
注意:NP 完全问题集是 NP 的一个子集。您的问题也属于 NP 完全问题集。但是,您不需要证明这一点。在计算机科学学习的背景下,尝试这样做会暗示老师您不了解您的任务。
推荐阅读
- angular - 使用外部数组展平嵌套的 Observables 而无需内部订阅 (RxJS)
- django - 使用 docker compose 获取 Mysql 连接错误
- node.js - 如何将自定义 SQL 查询传递到 app.js 之外的 MySQL 数据库?(Express、Node、Pug 架构)
- postgresql - 带有逻辑运算符“AND”“OR”“NOT”的 PSQL Where 子句
- angular - 基本软件包的角度更新 10 到 11 失败
- apache - .htaccess 用 RewriteRule 替换 RedirectMatch
- regex - 使用正则表达式模式替换熊猫
- reactjs - 反应钩子状态退一步而不更新
- javascript - 语法 var names = string.split("\n"),使 \r 在字符串字段的元素后面
- java - ArrayList 字符串 - 使用 Groovy 检索值