Комбинатор. Подбор суммы из набора чисел. Обработка для 1С версии 8.х (УФ)

0. Николай Щербаченко (romasna) 207 18.05.17 15:48 Сейчас в теме
Как следует из названия, предлагаемая обработка позволит перебрать набор чисел и выбрать те из них, которые в сумме равны заданному числу. Имеется целый ряд настроек, позволяющих проделать эту "титаническую" работу быстро и с комфортом. И если такой набор чисел существует, - он будет найден. А если существует множество таких наборов, - они тоже могут быть найдены (не все, разумеется). Ибо, полный перебор может, в зависимости от мощности набора чисел, потребовать времени, соизмеримого со временем существования Вселенной. А разве мы можем столь долго ждать?

Перейти к публикации

Комментарии
1. MSConfig Infostart (MSConfig) 19.05.17 17:25 Сейчас в теме
Вот эту энергию и в мирное русло бы!
2. Николай Щербаченко (romasna) 207 19.05.17 17:27 Сейчас в теме
3. Сергей (Che) Коцюра (CheBurator) 3385 19.05.17 17:39 Сейчас в теме
шпарит тупым перебором? или более интеллектуальные варианты решения задачи рбкзака применяются?
корум; starik-2005; +2 Ответить 3
4. Sergey Andreev (starik-2005) 1003 19.05.17 17:41 Сейчас в теме
5. Николай Щербаченко (romasna) 207 19.05.17 17:44 Сейчас в теме
(3)Скачай и посмотри, пожалуйста, если интересно. Работает быстро. Из нескольких сотен случайных чисел подбирает сумму в среднем за 5сек. Надо только умело и творчески подойти к процессу. Не веришь - проверь. Генератор случайных чисел включен... Тупой перебор не выложил бы здесь - даже не стал бы позориться. ;) А энергию свою я употребил, когда потребовалось, на решение 3 разных задач. И в основе их - этот подбор сумм.
6. Николай Щербаченко (romasna) 207 19.05.17 17:48 Сейчас в теме
(3)О, пардон... это не ты пытался мою энергию в мирное русло направить... :)
7. Николай Щербаченко (romasna) 207 19.05.17 17:50 Сейчас в теме
(4)Лично я не против многообразия. Свои алгоритмы я программировал без шпаргалок. Что получилось - выложил. Мож кому понравятся. Денег не прошу. :) Я не перебираю все.
8. Sergey Andreev (starik-2005) 1003 19.05.17 17:54 Сейчас в теме
(7)
Денег не прошу. :) Я не перебираю в
1 стартмани стоит каких-никаких денег. Было бы интересно знать суть алгоритма. Фактически все условно быстрые алгоритмы не дают 100% точности кроме рюкзака. А рюкзак требует памяти (на каждую копейку до искомой суммы * количество сумм).
9. Николай Щербаченко (romasna) 207 19.05.17 18:00 Сейчас в теме
(8)Стартмани стоят для нас с тобой только некоторых усилий... что-то разработал, выложил, получил... Или не так? Была бы моя воля, я бы и даром выложил эту обработку, - не жалко.
Что же до алгоритмов: большая часть суммы подбирается случайно (процент регулируешь ползунком), а потом - да, тупой перебор, но отбрасываются все тупиковые варианты. И если процесс длится долго, например, больше 20секунд, случайный набор чисел меняется на новый, если указано несколько попыток подбора.
10. Николай Щербаченко (romasna) 207 19.05.17 18:12 Сейчас в теме
(3)Кстати, обращаю твое внимание на картинку к статье. Внизу строчка: требуемая сумма подобрана с первой попытки. На попытку не больше 20сек. было отведено. (Обычно, я и 20секунд не выставлял, а 5-10). Чисел для перебора около 140. Как ты знаешь, простой перебор за такое время результат не даст. На случайном наборе чисел все работает изумительно. Медленнее всего подбираются слишком маленькие и слишком большие (приграничные) суммы.
11. Сергей (Che) Коцюра (CheBurator) 3385 19.05.17 18:28 Сейчас в теме
интересует за сколько отработает алгоритм для ~100 разных подборов, на которых в каждом подборе ~15 чисел и они близки друг к другу
12. Николай Щербаченко (romasna) 207 19.05.17 18:29 Сейчас в теме
(11)Полагаю, надо провести следственный эксперимент... давай набор чисел и требуемую сумму. Посмотрю.
13. Сергей (Che) Коцюра (CheBurator) 3385 19.05.17 18:35 Сейчас в теме
так мне без разницы - что числа выдавать что смотреть... сам посмотрю если припрет.
а если припрет - придетяс из разработки выдирать колд, или там унутре есть функция на вход клоторой масив с данными - на выходе результат?
14. Николай Щербаченко (romasna) 207 19.05.17 18:43 Сейчас в теме
(13)Вызываешь обработку модально, передав в нее список значений. Получив результат, давишь кнопку "Готово", - вываливаешься из обработки. На выходе в списке значений имеем требуемое. Задачи подобного рода я не решаю на полном автомате, - в меру своих умений вмешиваюсь в процесс получения результата. И обычно его получаю быстро, даже когда требуется полное совпадение с суммой.
Передается именно список значений, а не массив. Это позволяет решать задачи количественно-суммовые. Например, из остатков подобрать номенклатуру на заданную сумму в количестве и ценах.
В принципе, возможно все запускать на автомате, когда требуется сделать большое количество подборов. На вход подаешь не только массив чисел, но и указываешь длительность попытки подбора с неограниченным количеством попыток. Вот только я пока что не предусмотрел на этот случай выход из обработки по завершении подбора. Но это пустячное изменение алгоритмов.
15. Ярослав Володимирович (myr4ik07) 104 21.05.17 15:44 Сейчас в теме
Ану подскажите, есть ТЧ дока, мне нужно из этой ТЧ выбрать коство шт. товару на определенную сумму, и я знаю, что эта сумма есть в этой тч, эта обработка такое решает?
16. Николай Щербаченко (romasna) 207 21.05.17 16:03 Сейчас в теме
(15)И "да", и "нет". "Нет", - потому что эта обработка позволяет только сумму подобрать из имеющихся значений. Но также и "Да", потому что она лежит в основе решения твоей задачи. Вот только прежде чем перейти к подбору суммы по номенклатуре, необходимо до вызова обработки специальным образом обработать эту самую номенклатуру. Такой простой пример: есть у тебя 6 карандашей на сумму 24 рубля. В обработку передаешь несколько элементов по этим карандашам в списке значений:
12 - Карандаш 3шт.
8 - Карандаш 2шт.
4 - карандаш 1шт.
Эти 3 элемента позволяют набрать суммы; 4, 8, 12, 16, 20, 24
Допустим тебе нужна сумма 20. Эта обработка в списке значений вернет тебе 2 записи:
12 - Карандаш 3шт.
8 - Карандаш 2шт.
Обработав их, получишь: 5 карандашей на сумму 20.
myr4ik07; +1 Ответить
Оставьте свое сообщение