![]() |
|
![]() ![]() ![]() |
|
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Доброго времени суток!
Плохо умею составлять алгоритмы с древовидной рекурсией (меня хватает только на числа фибоначчи и похожие простые задачи). А тут понадобилось реализовать полный перебор с древовидной рекурсией, и я прошу Вашей помощи. Задача такая: в числовом массиве найти все комбинации чисел, составляющих данную сумму. Такой перебор можно организовать с помощью вложенных циклов, но когда я пытаюсь организовать его рекурсивно, получается полная хрень. Вот мой код (привожу его на java). Если он вызовет у Вас удивление, недоумение, возмущение, гнев или другие сильные чувства, пожалуйста, не поддавайтесь им, а спокойно вдохните и на выдохе медленно досчитайте до 10. Если с 1-го раза не поможет, процедуру повторите ![]()
Спасбо заранее за помощь в исправлении моих ошибок и, в особенности, за доступное описание того, что и почему надо исправить! -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Lipetsk |
|
|||
![]() в форме ;) ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 28.1.2009 Где: Липецк Репутация: 2 Всего: 5 |
дело в том, что нужно помечать все использованные числа, чтобы не использовать их повторно
а вы сейчас "помечаете" только последнее использованное число |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Согласен, числа у меня действительно повторно используются. Проблема в том и состоит, что я не могу додуматься, как же помечать, что число уже было использовано! -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Сделал программу на основе алгоритма перестановок элементов в массиве:
Однако, как видно, она совсем не оптимально работает: подсчет суммы производится абсолютно для всех вариантов, а хотелось бы, чтобы он не производился, к примеру, для повторяющихся вариантов, а также тогда, когда сумма элементов начинает превышать заданную. Был бы очень благодарен за помощь в оптимизации моего кода! -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
В общем, сделал я, что хотел, применив для этого метод ветвей и границ (или перебор с отсечением? - Поправьте меня, если что
![]()
Код, конечно, сыроват, но, если кому надо - пишите. Я все-равно буду его "причесывать", делать комменты и пр. В принципе, могу выложить и в товарном виде - мне не жалко! ![]() З. Ы. А плодотворный у нас с вами все-же диалог получился, товарисчи! ![]() З. З. Ы. Знаете, когда собирал в нете инфу по задаче, на форумах видел много просьб помочь ее решить, и везде сталкивался с сакраментальной фразой, типа, она решается просто методом тупого перебора. Но самого переборного решения никто нигде не приводил. Может, потому, что этот перебор таки не так прост и туп? Добавлено через 1 минуту и 25 секунд Тема закрыта -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |