Здравствуйте!
подскажите, каким макросом можно разложить фрукты по ящикам
т.е. поменять колонки местами
Спасибо
подскажите, каким макросом можно разложить фрукты по ящикам
т.е. поменять колонки местами
Спасибо
27.06.2014 16:03:05
Здравствуйте!
подскажите, каким макросом можно разложить фрукты по ящикам т.е. поменять колонки местами Спасибо |
|
|
|
27.06.2014 16:24:12
|
|
|
|
27.06.2014 16:26:01
данные в файле
нужно упаковать все фрукты в наименьшее количество ящиков в разные ящики помещаются только определенные фрукты (какие куда помещаются обозначены "X" в таблице "есть") решением является - ящики 2+3 (два ящика) но не 3 + 4 + 5 (тоже все помещается, но это три ящика)
Изменено: |
|
|
|
27.06.2014 16:27:38
|
|
|
|
27.06.2014 16:34:21
данные - в файле табличка "есть" и в сообщениях #1 и #3
какие данные требуются дополнительно? |
|
|
|
27.06.2014 16:54:51
в ящик1 помещается фрукт1 и фрукт5 в ящик2 помещаются фрукты 2 3 5 6 и т.д. никто условно не раскидывает, уже есть исходные данные - какой фрукт в какой ящик помещается (или наоборот - в какой ящик помещаются какие фрукты) осталось только выбрать конкретные ящики (минимальное количество ящиков), в сумме в которые поместятся все фрукты прошу прощения, если изначально описал задачу непонятно
Изменено: |
|||
|
|
27.06.2014 18:46:21
Смысл задачи понял.
Какие ограничения по исходным данным? Сколько различных фруктов и ящиков может быть? Если фруктов не более 30, то описание ящика вписывается в Long с дальнейшими бинарными операциями, что сильно упрощает решение. Если ящиков не более 20-25, то можно решить полным перебором всех сочетаний. Еще вопрос, если ящики перекрывают друг друга (одни и теже фрукты находятся в разных ящиках) допустимо ли их совместое использование?
Изменено: |
|
|
|
27.06.2014 19:06:16
а какие могут быть ограничения?
есть только "X" или "" фруктов 200, ящиков 1500 (таким образом прямой перебор сочетаний наверное будет долгим, хотя если его построить на коллекции - может быть в разы быстрее получится) на последний вопрос ответ "да"
Изменено: |
|
|
|
27.06.2014 19:30:08
При малых, смогу реализовать перебором. Если решение находится быстро (в несколько ящиков), то его можно будет использовать и до 50-100 ящиков. ЧИСЛКОМБ(100;5) = 75287520 - нормальное число для перебора за разумное время. |
|||
|
|
27.06.2014 20:32:05
Пример решения 30 фруктов на 40 ящиков
|
|
|
|
27.06.2014 20:55:14
МСН спасибо! хорошенький такой вариант, хоть и с переполнением если фруктов > 61
Изменено: |
|
|
|
27.06.2014 21:04:40
|
|
|
|
27.06.2014 21:16:09
|
|
|
|
27.06.2014 22:25:29
код очень топорный, не вылизанный еще. для начала хотя бы работает в Вашем примере, МСН, находит 8 ящиков, вместо 6 идеальных. в моей реальной табличке на 195 фруктов и 1216 ящиков нашлось 20 ящиков
Изменено: |
|||
|
|
27.06.2014 22:45:57
Реализовал решение для более 31 фрукта, можно использовать 100 и более фруктов
Изменено: |
|
|
|
27.06.2014 23:05:27
круто!
в AR72 нет фруктов63 |
|
|
|
27.06.2014 23:09:06
Сползло при копировании, файл перезалил
|
|
|
|
27.06.2014 23:32:39
спасибо за помощь, МСН (теперь на фруктах100 нет Х)
интересно, сколько будет считаться 160 фруктов и 1200 ящиков уже 20 минут считает. ради интереса оставлю на пару часов или на ночь --- за восемь часов не закончил считать
Изменено: |
|
|
|
27.06.2014 23:41:11
Выложите реальные исходные данные, может найдется какое нибудь еще решение
|
|
|
|
27.06.2014 23:54:00
пожалуйста - реальные данные
в первом столбце количество ящиков. есть нули (т.е. нет крестиков изначально). для проверки макросов пока просто удалял эти строки либо доделывал костыль по пропуску таких строк
Изменено: |
|
|
|
28.06.2014 09:23:01
Сделал "жадным" алгоритмом на своих данных (кнопка "Go2"), на каждом шаге выбираем наилучший ящик, который максимально добавляет новые фрукты
Скорость существенно увеличилась, но не факт, что будет найдено оптимальное решение Чуть позже адаптирую под реальные данные
Изменено: |
|
|
|
28.06.2014 09:37:58
"Жадный алгоритм" на реальных данных:
считает достаточно быстро, находит 17 ящиков
Изменено: |
|
|
|
28.06.2014 11:42:47
отличная работа МСН
есть чему поучиться, спасибо! |
|
|
|
28.06.2014 11:51:50
немного поправил вывод (избавился от формул). Ссылку сверху обновил
|
|
|
|
28.06.2014 12:08:54
совершенно не в упрёк нынешней администрации (они и так трудятся как "рабы на галерах" (с))
но не кажется ли вам, что как-то подзабросили мы Копилку идей? и что это решение МСН вполне её достойно. так же, впрочем, как многие другие решения многих других форумчан... что нужно сделать, чтобы Копилка ожила?
фрилансер Excel, VBA - контакты в
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг |
|
|
|
28.06.2014 12:42:54
Нужно предлагать))
|
|
|
|
28.06.2014 12:56:48
По поводу решений, достойных "Копилки":
Тут так устроено, что отдельное сообщение нельзя перенести в "Копилку". Для этого нужно создать ТЕМУ, а вот уже саму тему переместить можно. |
|
|
|
28.06.2014 12:59:53
Чтобы перебрать все сочетания 17 из 1216 (ЧИСЛКОМБ(1216;17) = 6,98246317507125E+37) потребуется чуть больше времени Я даже чисел таких не знаю |
|||
|
|
28.06.2014 13:05:34
|
||||
|
|
|||