Это не то же самое, что и этот вопрос: find all subsets that sum to a particular value Как я не просто должен count
общее количество подмножеств, но сохранить все подмножества и вернуть его.Как я могу помнить этот алгоритм суммирования подмножества?
Я написал простой (экспоненциальный) алгоритм, который находит подмножества подведения к определенной цели:
Eg:
arr = [1,2,3,4,5,6,7,8]
Possible subsets:
5
4,1
3,2
Это мой алгоритм
п -> индекс списка (начинается с конца)
цель -> сумма подмножеств Я хочу, чтобы создать
arr = [1,2,3,4,5,6,7,8]
def subset_sum(arr, n, target, result):
if target == 0:
print result
return
if target < 0 or n < 0:
return False
subset_sum(arr, n-1, target - arr[n], result + str(arr[n]))
subset_sum(arr, n - 1, target, result)
print subset_sum(arr, len(arr) - 1, 5, '')
Я хочу OPM сделайте это, возможно, путем memoization. Но я с трудом выяснить, что должно быть состояние этой функции (Должна ли она быть n
и target
? .. но я не вижу, что повторяется)
Что такое ранее вычисленный результат для 'subset_sum (n)'? 'Subset_sum (п-1)'. Кажется разумным хранить все подмножества, которые суммируются до каждого 'n-1'. –
Да, но я не знаю, как сохранить результат (номера подмножества) в кеше. Я хочу записать его сверху вниз. – yask
Когда вы говорите, что не знаете, как его хранить, вы должны быть более конкретными в отношении проблемы. Вы полностью не осведомлены о доступных структурах данных или у вас есть проблемы с выбором? Почему бы не выбрать один и провести предварительный анализ? –