Algorithm 是否存在K个整数的组合,使得它们的和等于给定的数字?

Algorithm 是否存在K个整数的组合,使得它们的和等于给定的数字?,algorithm,hashtable,backtracking,subset-sum,Algorithm,Hashtable,Backtracking,Subset Sum,我被要求回答这个问题(从技术上讲,这是家庭作业),这让我汗流浃背。 我曾考虑过一个哈希表,但我有点被具体的工作细节所困扰 问题是: 给定总大小为O(n)的k组整数A1、A2、…、Ak,您应该确定是否存在 a1ϵa1,a2ϵa2,…,akϵak,使得a1+a2+…+ak−1=ak。您的算法应该在Tk(n)中运行 时间,其中Tk(n)=O(nk/2×logn)表示偶数k,O(n(k+1)/2)表示奇数k 有谁能给我一个大致的指导,让我更接近于解决这个问题吗?将k集分成两组。对于偶数k,两组各有k/2

我被要求回答这个问题(从技术上讲,这是家庭作业),这让我汗流浃背。 我曾考虑过一个哈希表,但我有点被具体的工作细节所困扰

问题是:

给定总大小为O(n)的k组整数A1、A2、…、Ak,您应该确定是否存在 a1ϵa1,a2ϵa2,…,akϵak,使得a1+a2+…+ak−1=ak。您的算法应该在Tk(n)中运行 时间,其中Tk(n)=O(nk/2×logn)表示偶数k,O(n(k+1)/2)表示奇数k


有谁能给我一个大致的指导,让我更接近于解决这个问题吗?

将k集分成两组。对于偶数k,两组各有k/2组。对于奇数k,一组有(k+1)/2,另一组有(k-1)/2组。计算每个组中所有可能的和(从每个集合中取一个元素)。对于偶数k,您将得到两个数组,每个数组具有nk/2元素。对于奇数k,一个数组有n(k+1)/2个元素,另一个数组有n(k-1)/2个元素。问题被简化为标准问题“给定两个数组,检查是否可以通过从每个数组中提取一个元素来达到指定的总和”。

祝贺您接受家庭作业。你对这个问题有什么答案吗(不考虑复杂性)?如果是的话,你如何分析它的复杂性?你认为你的方法是完全错误的,还是有一些特定的部分你认为是错误的?我能找出的唯一100%有效的方法是n^n的最简单的实现(即检查所有选项)。显然,这不是正确的方法:(我想知道这是否更适合数学溢出?谢谢你的回答!直觉上这似乎是正确的,但我无法完全弄清楚这实际上是如何减少问题的。你能详细说明一下吗?给定两个大小分别为O(n)的数组,你可以找到O(n*logn)中是否存在和)。这个解决方案并不太难。如果我把它发给你,我会感到内疚,因为你提到它是一个家庭作业!@viswanathgs:你甚至可以平均在O(n)时间内解决两个数组的问题。@不可原谅:只有数组被排序了,对吗?或者有什么我没有看到的吗?