задачи дается несортированный массив, дать подмножество массива, которые могут производить целевую сумму:алгоритма, чтобы получить подмножество массива с целевой суммой не дает работать
Для например:
target = 15
data = {3,4,5,7,1,2,9};
Ожидаемого результатам (обратите внимание на результаты сортируются для простоты не является обязательным требованием.):
[1, 2, 3, 4, 5]
[1, 2, 3, 9]
[1, 2, 5, 7]
[1, 3, 4, 7]
[1, 5, 9]
[2, 4, 9]
[3, 5, 7]
Вот мой наивный подход к этой проблеме - простой и грубая сила.
public static void naiveSubset(int[] arr, int target){
int sum=0;
List<Integer> result = new ArrayList<>();
for (int i=0; i< arr.length;i++){
sum =arr[i];
result.add(arr[i]);
for (int j=0;j<arr.length;i++){
if (sum==target){
System.out.println(result);
result.clear();
break;
}
else if (i!=j && sum+arr[j] <= target){
sum+=arr[j];
result.add(arr[j]);
}
}
}
}
По некоторым причинам я не ожидаю результатов. Я пробовал просматривать код, чтобы выкапывать любые проблемы. Но я не мог найти. пожалуйста, эксперты-эксперты, укажите меня в правильном направлении!
Результаты я получаю (на тот же вход, как описано выше)
[3, 3, 3, 3, 3]
[9, 3, 3]
Причина, по которой вы получаете кучу 3-х, заключается в том, что вы не учитываете уже используемые номера. – Aderis
Это [проблема с подмножеством сумм] (https://en.wikipedia.org/wiki/Subset_sum_problem), если вы только пытаетесь получить одно решение или даже если такое решение существует, есть довольно эффективное решение (предполагая ваши элементы - относительно маленькие целые числа). [Этот поток] (http://stackoverflow.com/a/29512660/572670) показывает, как это можно сделать. – amit
Я знаю, что это проблема подмножества сумм, и я пока не ищу эффективного решения. но чтобы получить этот первый рабочий –