Вот код, который я придумал:Найти все подмножества множества, сумма до п
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 * журнал (п))'? – Azad
У заказа нет констант, речь идет о росте. –
Одна из классических проблем с решением NP, [Subset Sum] (https://en.wikipedia.org/wiki/Subset_sum_problem), сводится к этой проблеме, поэтому проблема NP-hard, и вы вряд ли сможете найти правильное решение с полиномиальной временной сложностью. –