gifts2017

Нахождение слагаемых из списка по их сумме

Опубликовал Владимир Синявкин (vsinyavkin) в раздел Обработки - Универсальные обработки

Обработка находит все возможные варианты состава слагаемых из списка для получения суммы поиска.

Обработка находит все возможные варианты состава слагаемых из списка для получения суммы поиска.

Необходимо заполнить левую табличную часть на форме предполагаемыми слагаемыми (возможна загрузка из Excel - первый лист, первая колонка с первой ячейки) и ввести сумму для поиска. Выбрать ограничение по количеству слагаемых в итоговом выражении. 
По окончании выполнения обработки в правом поле на форме будут отображены все варианты состава слагаемых по номеру строки в левой табличной части.
Внимание! Чем больше вариантов слагаемых в левом списке, тем дольше выполняется обработка. НО больше всего время выполнения обработки зависит от выставленного предельного количества слагаемых. К этому параметру следует относится серьезно, ибо автор не отвечает за последствия загрузки процессора и оперативной памяти вашего компьютера.

На самом деле все не так страшно. Многое зависит от целей вашего поиска. Например у вас есть список из 20 значений от 1000 до 1500, а найти вам нужно варианты состава например 6500. Понятно, что вариантов тут будет очень много. А если Вы еще зададите ограничение в 15 слагаемых (что не целесообразно - начинать лучше с 3-4), то ждать придется ооочень долго.

Старался делать так, чтобы память загружалась по-минимуму... но время выполнения от этого увеличено. Метод поиска вариантов - обычный перебор. Поэтому возможных вариантов, хранимых в памяти... многова-то.

В общем... эта обработка писалась на коленке для поиска трех слагаемых... потом была расширена... если найдете способ увеличить производительность, или придумаете (найдете)  что-то проще и удобнее... рад буду услышать :) Также рад буду слышать критику в области написания кода касательно производительности обработки. Ну а если найдете ошибку - скрин в студию. Повторюсь - дело было написано на коленке за отсутствием найденных аналогов в сети.

За плюсы и минусы благодарен заранее :) 

 

*обновил 09.04.12. Увеличена скорость и уменьшена задействованная память

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
НахождениеСлагаемыхИзСпискаПоИхСумме
.epf 12,43Kb
09.04.12
18
.epf 12,43Kb 18 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. arjuna (arjuna) 08.04.12 09:05
Еще не пробовал, но очень заинтересовался. Такого типа обработок не видел. Может не все понимают для чего можно использовать. Мне конкретно может пригодится для поиска расхождений в итоговых суммах оборотно сальдовых ведомостей и т.п. где сумма расхождений состоит из нескольких слагаемых.
2. Владимир Синявкин (vsinyavkin) 08.04.12 11:40
Вы все правильно поняли. Только о сложностях в виде времени выполнения, которое напрямую зависит от количества вариантов слагаемых и их предельного количества не забывайте.
И еще одно уточнение: код в обработке написан в читабельном виде. Но если его частично отредактировать согласно рекомендациям из этой статьи http://infostart.ru/public/71130/#Pro_cikly_v_odnu_stroku (ее автору огромное спасибо), то производительность увеличивается довольно прилично.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа