【发布时间】:2014-01-02 16:10:22
【问题描述】:
这是我想出的代码:
static void findNumbers(int[] list, int index, int current, int goal, String result)
{
if (list.length < index || current>goal)
return;
for (int i = index; i < list.length; i++) {
if (current + list[i] == goal) {
System.out.println(result + " " + String.valueOf(list[i]));
}
else if (current + list[i] < goal) {
findNumbers(list, i + 1, current + list[i], goal, result + " " + String.valueOf(list[i]));
}
}
}
调用它使用:
findNumbers(array, starting_index, current_sum_till_now, target_sum, "");
谁能帮我算出这段代码的时间复杂度,我相信它是指数级的。
解决此问题的最佳方法是什么?是否使用回溯?
【问题讨论】:
-
也许
O(2n*log(n))? -
订单没有常数,它是关于增长的。
-
经典的 NP 完全决策问题之一Subset Sum 可简化为该问题,因此该问题是 NP 难的,您不太可能找到具有多项式时间复杂度的正确解决方案。
-
@Sarkae 我已经为您的问题添加了更好的解决方案。
标签: java algorithm time-complexity subset partitioning