我和其他人一样一直在努力解决这个问题,我很确定已经有足够多的帖子来解释这个问题。然而,就完全理解它而言,我想分享我的想法,并从这里所有与子集和问题相关的伟大人物那里获得更有效的解决方案。
我在互联网上搜索过它,实际上有很多来源,但我真的很愿意重新实现一个算法或找到我自己的算法以便完全理解。
我正在努力解决的关键问题是考虑到集合大小会很大的效率。(我没有限制,只是在概念上很大)。我试图实现想法的两个阶段是找到两个等于给定整数T的数字,找到三个数字并最终找到K个数字。我有一些想法;
对于两个整数部分,我基本上对数组O(nlogn)进行排序,并为数组中的每个元素搜索其负值。(即如果数组元素是3搜索-3)。也许哈希表包含可能会更好,提供O(1)索引元素?
对于三个或更多整数,我发现了一篇很棒的博客文章;http://www.skorks.com/2011/02/algorithms-a-dropbox-challenge-and-dynamic-programming/。然而,即使是作者自己也表示它不适用于大量数据。
所以我对2和3 以及更多的整数有什么想法可以应用于子集问题。我正在努力建立一种对大输入也有效的动态编程方法。