Optimization 给定n个整数的列表,求和大于或等于x的最小基数子集

Optimization 给定n个整数的列表,求和大于或等于x的最小基数子集,optimization,dynamic-programming,combinatorics,subset-sum,Optimization,Dynamic Programming,Combinatorics,Subset Sum,给定数组形式的未排序(多)整数集,查找其和大于或等于常量整数x的最小基数子集 我们的集合是{4 5 8 10 10},x=15,所以和>=x的最小基数子集是{5 10} 有多项式时间算法来解决这个问题吗?可以将子集和的优化实例简化为该问题吗 这个问题与之相关,但与之不同:在前面的问题中,作者要求得到一个子集,其和最接近于x,这里我们想要任何子集>=x,但元素数量最少 有多项式时间算法来解决这个问题吗 对。事实上,暴力会让你得到你想要的结果 对列表排序:O(n日志n) 从最大值的末尾开始(任意一端

给定数组形式的未排序(多)整数集,查找其和大于或等于常量整数x的最小基数子集

我们的集合是{4 5 8 10 10},x=15,所以和>=x的最小基数子集是{5 10}

有多项式时间算法来解决这个问题吗?可以将子集和的优化实例简化为该问题吗

这个问题与之相关,但与之不同:在前面的问题中,作者要求得到一个子集,其和最接近于x,这里我们想要任何子集>=x,但元素数量最少

有多项式时间算法来解决这个问题吗

对。事实上,暴力会让你得到你想要的结果

  • 对列表排序:O(n日志n)
  • 从最大值的末尾开始(任意一端取决于排序方式(即升序或降序))并添加值,直到达到目标:O(n)
  • 总体而言,该算法具有O(nlogn)复杂度,其存在于多项式时间内

    也许有更好的算法,但我不确定。我知道可以在O(n)时间中找到n的最大值,但是您必须执行m次,其中m表示最小基数。因此,对于这种方法,总体复杂度是O(m*n),仍然是多项式

    第一种方法给出O(n logn),而与最小基数的大小无关。第二种方法给出了更好的最佳情况(即基数最终为1,这意味着总体复杂度为O(n)),但最坏的情况是O(n^2),这意味着检查整个列表

    可以将子集和的优化实例简化为该问题吗

    我不这么认为。为总和确定一个特定的值与我们正在做的有点不同。例如,给定一个列表和两个不同的值,我们将对给定的问题执行完全相同的步骤。对于每一种价值,唯一的区别在于我们超越了自己的价值。对于子集和问题,对于每个值,我们可能会有非常不同的结果

    有多项式时间算法来解决这个问题吗

    对。事实上,暴力会让你得到你想要的结果

  • 对列表排序:O(n日志n)
  • 从最大值的末尾开始(任意一端取决于排序方式(即升序或降序))并添加值,直到达到目标:O(n)
  • 总体而言,该算法具有O(nlogn)复杂度,其存在于多项式时间内

    也许有更好的算法,但我不确定。我知道可以在O(n)时间中找到n的最大值,但是您必须执行m次,其中m表示最小基数。因此,对于这种方法,总体复杂度是O(m*n),仍然是多项式

    第一种方法给出O(n logn),而与最小基数的大小无关。第二种方法给出了更好的最佳情况(即基数最终为1,这意味着总体复杂度为O(n)),但最坏的情况是O(n^2),这意味着检查整个列表

    可以将子集和的优化实例简化为该问题吗

    我不这么认为。为总和确定一个特定的值与我们正在做的有点不同。例如,给定一个列表和两个不同的值,我们将对给定的问题执行完全相同的步骤。对于每一种价值,唯一的区别在于我们超越了自己的价值。对于子集和问题,对于每个值,我们可能会有非常不同的结果