与具有 2,3 和更多整数的子集和相关的想法

Ideas Related to Subset Sum with 2,3 and more integers

本文关键字:子集 整数      更新时间:2023-10-16

我一直在努力解决这个问题,就像其他人一样,我很确定已经有足够多的帖子来解释这个问题。然而,在充分理解它方面,我想分享我的想法,并从这里所有与子集和问题相关的伟大人物那里获得更有效的解决方案。

我在互联网上搜索了它,实际上有很多来源,但我真的愿意重新实现一种算法或找到我自己的算法以充分理解。

我正在努力解决的关键是考虑到设置尺寸会很大,效率。(我没有限制,只是概念上很大)。我试图实现想法的两个阶段是找到两个等于给定整数 T 的数字,找到三个数字,最终找到 K 个数字。不过我有一些想法;

对于两个整数部分,我基本上是对数组 O(nlogn) 进行排序,并为数组中的每个元素搜索其负值。(即如果数组元素为 3,则搜索 -3)。也许哈希表包含可以更好,提供 O(1) 索引元素?

对于三个或更多的整数,我找到了一篇惊人的博客文章;http://www.skorks.com/2011/02/algorithms-a-dropbox-challenge-and-dynamic-programming/。然而,即使是作者自己也指出,它不适用于大数字。

所以我是 23 以及更多的整数,什么想法可以应用于子集问题。我正在努力建立一种动态编程方法,该方法对于大型输入也很有效。

实际上,您链接到的那篇博客文章看起来很棒。 毕竟,这是一个NP完全问题...

但我敢打赌,你可以进一步加快速度。 我没有做过任何基准测试,但我猜他对矩阵的使用是他最大的时间槽。 首先,对于一些非常琐碎的输入,需要大量的内存(例如:[-1000, 1000] 将需要 2001 列! 好悲伤!),然后你浪费了大量的周期来扫描每一行,寻找"T",这些通常会非常稀疏。

所以相反:使用"集合"数据结构。 这将使空间和迭代时间保持在最低限度,*但也存储值:如果它在集合中,它是一个"T";否则,这是一个"F".

希望对您有所帮助!

*:当然,"最小值"并不一定="小"。