Подмножество - какие материалы? - PullRequest
0 голосов
/ 13 мая 2010

Да, это домашнее задание / лабораторное задание. Мне интересно придумать / найти алгоритм (я могу понять: P) для использования «возврата» для решения проблемы суммы подмножеств.

У кого-нибудь есть полезные ресурсы? Я провел последний час или около того Googling с не так много, как найти что-то, что я думаю, что я действительно мог бы использовать. XD

Спасибо, ТАК!

1 Ответ

0 голосов
/ 13 мая 2010

Поместить данные в вектор.

Затем напишите подпрограмму, которая имеет 3 аргумента: вектор, индекс и сумму. Вызовите эту процедуру со следующими аргументами: вектор, 0, 0.

Подпрограмма должна выполнять следующие задачи:

  • проверить, достиг ли мы конца вектора (индекс == размер). Если это так, мы можем немедленно вернуться.
  • вызовите себя с аргументами: вектор, индекс + 1, сумма + вектор [индекс] (в этом случае мы добавляем элемент с индексом к сумме и продолжаем с вектором)
  • вызовите себя с аргументами: вектор, индекс + 1, сумма (в этом случае мы не добавляем элемент с индексом к сумме, но все еще продолжаем)

Я намеренно пропустил 2 части в этом алгоритме:

  • во-первых, вы должны проверить сумму в какой-то момент. Если это ноль, то вы нашли правильное подмножество
  • во-вторых, вы также должны передать знания о том, какие элементы вы использовали, поэтому, если сумма равна нулю, вы можете распечатать подмножество. Рассмотрите возможность использования STL :: set для этого.

Кроме того, вы можете использовать возвращаемое значение функции, чтобы определить, было ли найдено правильное подмножество или нет.

Сложность алгоритма O (2 ^ N), поэтому он будет очень медленным для больших наборов.

Веселитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...