В форме f(x,y,z)
, где x
— заданная целочисленная сумма, y
— минимальная длина последовательности, а z
— максимальная длина последовательности. Но пока давайте представим, что мы имеем дело с последовательностью фиксированной длины, потому что иначе мне потребуется много времени, чтобы написать вопрос.
Итак, наша функция — f(x,r)
, где x
— заданная целочисленная сумма, а r
— длина последовательности в списке возможных последовательностей.
Возможные комбинации для x = 10
и r = 2
:
1 + 9
2 + 8
3 + 7
4 + 6
5 + 5
Давайте сохраним это в Python как список пар:
[(1,9), (2,8), (3,7), (4,6), (5,5)]
Итак, использование выглядит так:
>>> f(10,2)
[(1,9), (2,8), (3,7), (4,6), (5,5)]
Вернемся к исходному вопросу, где последовательность возвращается для каждой длины в диапазоне (y,x)
. В форме f(x,y,z)
, определенной ранее, и исключая последовательности длины 1
(где y-z == 0
), это будет выглядеть так:
>>> f(10,1,3)
[{1: [(1,9), (2,8), (3,7), (4,6), (5,5)],
2: [(1,1,8), (1,2,7), (1,3,6) ... (2,4,4) ...],
3: [(1,1,1,7) ...]}]
Таким образом, вывод представляет собой список словарей, где значение представляет собой список пар. Не совсем оптимально.
Итак, мои вопросы:
- Есть ли библиотека, которая уже обрабатывает это?
- Если нет, может ли кто-нибудь помочь мне написать обе функции, которые я упомянул? (сначала фиксированная длина последовательности)?
- Из-за огромных пробелов в моих знаниях довольно тривиальной математики, не могли бы вы проигнорировать мой подход к целочисленному хранилищу и использовать любую структуру, которая имеет наибольший смысл?
Извините за все эти арифметические вопросы сегодня. Спасибо!
g(sum, nterms, index)
, которая возвращаетindex
-ю последовательность отсортированного списка всех последовательностей длиныnterms
, сумма которых равнаsum
. Я думаю, что это было бы проще - и я сильно подозреваю, что это окажется рекурсивным. - person Xavier Holt   schedule 01.04.2011