您认为这种 p=np 解决方法值得尝试吗?

计算科学 优化
2021-12-04 06:36:08

我需要咨询可能的p=np解决方法。首先对我的英语感到抱歉,因为这将是一个很长的问题:) 为了更好地理解我设计的架构,您可能需要具备矩阵运算和一些面向对象编程的经验。我也想将这个问题标记为计算机科学,但我不知道怎么做。也许这不是完美的主意,但我认为值得一问:)

问题描述: 我一直在思考解决p=np问题的可能性。如果您想在此处阅读更多相关信息,请访问 Wikipedia 链接:wiki这里有一个小例子(来自wiki):

考虑子集和问题,这是一个易于验证的问题示例,但其答案可能难以计算。给定一组整数,它们中的某个非空子集的总和是否为 0?例如,集合 {−2, −3, 15, 14, 7, −10} 的子集加起来是否为 0?答案“是的,因为子集 {-2, -3, -10, 15} 加起来为零”可以通过三个加法快速验证。没有已知的算法可以在多项式时间内找到这样的子集(但是,在指数时间内有一个算法,由 2n-n-1 次尝试组成),但是如果 P = NP,则存在这样的算法;因此这个问题存在于 NP 中(可快速检查),但不一定存在于 P 中(可快速解决)。

想法是什么: 每天我们在世界各地的多台 PC 上进行相同的计算,所以我正在考虑的解决方案(理论上)为这些计算提供一个中央数据库以提供结果。长话短说,当您将大型矩阵相乘时,您的应用程序将从全局数据库执行 API 调用,而不是使用本地资源。

它是如何工作的: 假设您使用 Java 开发您的项目。因此,您将在项目中包含 IIT(信息存在)矩阵库。然后(即)您将创建一个新的 2D 矩阵对象实例,如下所示:

IITMatrix matrix = new IITMatrix(2);

您将追加新值,如下所示:

matrix.add(1,0.599);

第一个参数是尺寸,第二个参数是实际值。当您将值附加到矩阵对象时,矩阵将自动在后台使用LZ4生成/更新散列(它称为 java 人员的实例变量:))。当您需要对另一个矩阵进行操作时,您将调用 ie:

matrix.multiply(myAnotherMatrix);

现在我们正在使用 API 未来而不是您的本地资源。Multiply 方法会自动调用下面的 url :

http://www.mycentraldb.org/iit/multiply/100/300?a=4jh3k5g4hj3g5443kh5g43&b=fjsdfhjsdljsdljsdljsdljsdlkdf

假设100是行,300是我们的列。A参数是第一个矩阵的生成散列,B参数是第二个矩阵的生成散列。然后后端负载均衡器将找到 100x300 的匹配服务器(键和值 noSQL 服务器),它将查询4jh3k5g4hj3g5443kh5g43: fjsdfhjsdljsdljsdljsdljsdlkdf的值。当服务器将返回另一个哈希作为响应时,您的矩阵对象将解析它并包装另一个矩阵对象。即类似的东西:

IITMatrix result = matrix.multiply(myAnotherMatrix);

性能优势: 当你启动你的项目 IIT 库时,应用程序将建立一个套接字连接,直到你关闭应用程序,因此每个单个查询将在毫秒内完成,无需查找。

数据是如何生成的: 缓存所有数字是不可能的,但大量的维度会很有用。也许第一个目标可以是 -1 和 1 之间的归一化值与 6 个小数点的组合(2000000 的组合)。服务器将通过增加值来继续生成散列,当一个维度完成时,它将为新的维度创建另一个数据库转储。使用 GPU 农场将是有益的。即使是 P2P 连接或并行计算 MPI 网络也应该允许社区共享/生成更多资源。操作也会增长,即 mod、log 等操作也将添加到 API 中。

所以我的问题是: 这个解决方案能满足您的日常需求吗?怎么会更好?我应该开始吗?:) 我提前询问,因为我不想在生成数天后删除数据。我几乎没有 GPU 可以试一试:)

1个回答

如果你的问题是预计算结果是否能让你想出一个算法,表明即使是 NP 问题也可以在 P 时间内解决,那么答案是否定的。之所以如此,是因为诸如“问题 A 在 P/NP 中”之类的陈述是随着问题的规模越来越大而渐近地陈述的。但是您将无法为越来越大的问题提供数据库:您将耗尽资源来存储,更不用说计算,超过一定规模的问题的答案。

所以不,这不是证明 P=NP 的方法。