Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以最小的时间复杂度找到和等于k的最长子集(powerset)的长度?_Java_Algorithm_Subset_Powerset - Fatal编程技术网

Java 如何以最小的时间复杂度找到和等于k的最长子集(powerset)的长度?

Java 如何以最小的时间复杂度找到和等于k的最长子集(powerset)的长度?,java,algorithm,subset,powerset,Java,Algorithm,Subset,Powerset,给定一个整数数组,我尝试使用可能的时间复杂度来查找和等于k的最长子集(powerset)。 e、 g.如果inputArr=[1,2,8,1,1,7]和k=10,那么输出应该是4,因为总和等于10的最长子集是[1,1,1,7] 编辑:我可能忘记了一个重要的细节;数组的元素都是正的和非零的 我使用了我在Geeksforgeks上发现的算法: 代码运行良好,但我唯一的问题是执行时间。我应该在线提交,当我提交它时,由于超时,执行终止 int maxSubLength=0; for (

给定一个整数数组,我尝试使用可能的时间复杂度来查找和等于k的最长子集(powerset)。 e、 g.如果inputArr=[1,2,8,1,1,7]和k=10,那么输出应该是4,因为总和等于10的最长子集是[1,1,1,7]

编辑:我可能忘记了一个重要的细节;数组的元素都是正的和非零的

我使用了我在Geeksforgeks上发现的算法:

代码运行良好,但我唯一的问题是执行时间。我应该在线提交,当我提交它时,由于超时,执行终止

    int maxSubLength=0;
    for (int i = 1; i < (1<<n); i++)   //n is the length of inputArr
    {
        int sum=0, length=0;

        for (int j = 0; j < n; j++)
          if ((i & (1 << j)) > 0)
          {
                sum+=inputArr[j];
                length++;
                if (sum>k)
                   break;
          }  

        if (sum==k)
            maxSubLength=Math.max(maxSubLength, length);
    }
int maxSubLength=0;

对于(int i=1;i<(1我们可以在
O(n*k)
时间和
O(k)
空间中使用动态编程来解决这个问题。JavaScript代码:

函数f(A,K){
设m=新数组(K+1)。填充(0)
为了(让a的a){
对于(设k=k;k>=a;k--)
if(m[k-a])
m[k]=数学最大值(m[k],1+m[k-a])
m[a]=数学最大值(m[a],1)
}
返回m[K]
}
变量A=[1,2,8,1,1,7]
变量K=10

log(f(A,K))
无法快速生成大型集合的所有子集,因为大小为n的集合有2个ⁿ 超集。你能发布你试图解决的问题的完整文本,包括对集合大小和/或其值的任何限制吗?@ruakh我可能忘记了一个重要的细节;数组的元素都是正的且非零。以下是问题的全文:给定一个正n个非零整数数组,求和等于k的最长整数子集的长度。"换句话说,用大O表示法,你需要达到什么样的时间复杂度?@JoshW。我真的不确定。问题没有具体说明这一点,我也不知道解决这个问题的最佳时间复杂度是什么。似乎这是一个子集求和,额外要求找到与给定值求和的最大可能子集。它可以是b通过稍微修改算法,它的运行时间肯定比计算所有子集要好。非常感谢,伙计!这真的帮助了我!