Я пытаюсь запрограммировать свой TI-83 для поиска суммы подмножества. Итак, имея список длины N, я хочу найти все списки заданной длины L, сумма которых равна заданному значению V.
Это немного отличается от обычной проблемы суммы подмножества, потому что я ищу только подмножества заданной длины, а не все длины, и рекурсия не обязательно является первым выбором, потому что я не могу вызвать программу, в которой я работаю.
Я могу легко выполнить задачу с вложенными циклами, но это становится громоздким для значений L больше 5. Я пытаюсь найти динамические решения, но ничего не получаю.
На самом деле, на данный момент я просто пытаюсь сделать ссылки на список правильными, так что я смотрю именно на это. Давайте рассмотрим пример:
L1={p,q,r,s,t,u}
so
N=6
давайте искать все подмножества длины 3, чтобы сделать его относительно коротким, поэтому L = 3 (6c3 = 20 общих выходов).
В идеале ссылки списка, которые будут искаться, следующие:
{1,2,3}
{1,2,4}
{1,2,5}
{1,2,6}
{1,3,4}
{1,3,5}
{1,3,6}
{1,4,5}
{1,4,6}
{1,5,6}
{2,3,4}
{2,3,5}
{2,3,6}
{2,4,5}
{2,4,6}
{2,5,6}
{3,4,5}
{3,4,6}
{3,5,6}
{4,5,6}
Явно выполнено:
FOR A,1,N-2
FOR B,A+1,N-1
FOR C,B+1,N
display {A,B,C}
END
END
END
Сначала я сортирую данные N по убыванию, что позволяет мне искать критерии, которые сокращают поиск, а использование циклов FOR немного портит его в разных местах, когда я увеличиваю значения A, B и C внутри циклов.
Я также ищу лучшие динамические решения. Я провел некоторое исследование в Интернете, но я не могу адаптировать то, что есть, к моей конкретной ситуации.
Любая помощь будет оценена по достоинству. Я стараюсь быть достаточно кратким, чтобы не писать роман, а объяснить, к чему я пытаюсь прийти. Я могу предоставить более подробную информацию по мере необходимости.