Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 18:20   #1
Zeon25
Пользователь
 
Регистрация: 05.08.2009
Сообщений: 25
По умолчанию подбор группы файлов до заданого размера

помогите с задачкой
Есть цифровой ряд и и имена файлов, например:

3171532538 имя
2737784320 имя
2201862144 имя
1576968192 и т.д
1468350464
1468035072
1467871232
1467850752
1370968064
1302675600
1173901312
704047104
652073656

нужно из него выбрать числа на сумму, максимально приближающуюся к заданному числу (<= 8500594688).
Каждое число добавляется только один раз.

Для чего это нужно? Оптимизация файлов (фильмов) под размер болванки DVD-R. Пробовал несколько программ (Ignition, CalcDVDR, NovA Collection Divider, nnbackup228.exe) - во всех примитивный алгоритм подбора - просто берут самый большой файл, вычитают его из размера болванки и ищут наибольший файл меньше этой разности. Всё. Нормальную утилиту так и не нашел

Раньше подбирал руками. На однослойную болванку хорошо ложатся два фильма под 2350000 или три (2,18, 1,5, 700) - один из них должен быть Мб на 200 больше стандарта или три х 1560000.
Сейчас подешевели двухслойные болванки 8500 - их заполнить руками гораздо сложнее.

в итоге хотелось бы получить на выходе
название файлов которые идеально подходят для записи на диск

имя1
имя2
имя3

ну а в идеале автоматом сразу группы файлов
Zeon25 вне форума Ответить с цитированием
Старый 03.10.2010, 19:31   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

задача интересная.
Кстати, Вы её уже на рубоарде озвучивали, так?

Несколько вопросов к Вам.
1) если ли допустимая точность (величина приближения). Ну, поясню, например, если сумма отличается от заданной величины меньше чем на Epsilon - то дальше можно не искать решение (хотя, возможно, найденное решение далеко не оптимальное! И не найденные, к примеру, 6 больших фильмов, а 15 маленьких лягут точно в размер!)
Т.е. обязательно ли искать ОПТИМАЛЬНОЕ решение?

2) если ли ограничение на количество обрабатываемых файлов? Т.е. из скольки файлов Вы хотите произвести подбор?

3) Ну, Excel, как я понимаю, абсолютно не обязательное требование? Если это будет утилита, написанная на другом языке программирования, Вам же всё равно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2010, 22:00   #3
Zeon25
Пользователь
 
Регистрация: 05.08.2009
Сообщений: 25
По умолчанию

Serge_Bliznykov ответы по порядку
1. Оптимальное решение это и есть моя задача, хотя если первый найденный результат будет будет отличаться от идеального на 100 мб, то можно принять как удовлетворительный. Но все же хотелось бы максимально увеличить КПД. Из-за 100 мб потом возможно придется целый диск портить.

2.ограничения не желательны, предположим это будет 100 файлов, а может и больше.

3. excel конечно не критичен.

Если добавите возможность выбора, как работать с подпапками будет вообще супер. А именно выдирать файлы для анализа из вложенных папок или писать эти папки целиком.

Такой проект на данный момент думаю заинтересует многих в сети.
Zeon25 вне форума Ответить с цитированием
Старый 03.10.2010, 23:28   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Не совсем по теме, но, может быть, перейти на DVD-RW?
motorway вне форума Ответить с цитированием
Старый 04.10.2010, 00:53   #5
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Господа, не надо изобретать велосипед.
Это популярная на младших курсах математических ВУЗов задача об одномерной оптимальной упаковке.
http://www.wikiznanie.ru/ru-wz/index...B2%D0%BA%D0%B5
Cм так же:
http://www.math.nsc.ru/LBRT/k5/lec12.doc
Или вы соглашаетесь на приближенное решение с полиноминальной сложностью,
или вперёд к полному перебору
Aent вне форума Ответить с цитированием
Старый 04.10.2010, 01:00   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Оптимальное решение это и есть моя задача, хотя если первый найденный результат будет будет отличаться от идеального на 100 мб, то можно принять как удовлетворительный.
А если, скажем, погрешность не 100 Мб, а 1 Мбайт? Или 500 килобайт? Всё равно продолжать перебирать, подыскивая более оптимальный вариант?!!

Код:
ограничения не желательны, предположим это будет 100 файлов, а может и больше.
А то, что подбор оптимального варианта при 100 файлах займёт пару лет непрерывного подбора, Вас, разумеется не смущает. я прав?!

Подумайте, как Вам желательно получать результаты подбора.
Простой текстовый файл со списком подходящих файлов устроит?

Цитата:
Такой проект на данный момент думаю заинтересует многих в сети.
Честно говоря, я так не думаю...
Гораздо лучше записать фильмы подходящии друг другу по жанру/содержанию, чем писать на один диск, скажем, мелодраму, голивудский боевик, старый советский детектив, триллер,ужастик и детский мультфильм.. Я для себя эту проблему (хранения видео) пока решил путём покупки специального винта под фильмы. Посчитайте, сколько стоит винт, разделите его стоимость в пересчёте на 8500594688 байт
и сравните со стоимостью одной двухслойной болванки. Конечно, есть свои минусы, но есть и плюсы... Особенно в свете того, что сейчас появлются HD BDRipы, размером больше одной болванки...
Хотя, признаюсь, иногда и на DVD+R пишу фильмы... Т.к. сказать, для упрощения доступа к коллекции.

Короче, я постараюсь сделать рабочий вариант.
Как-то давненько (год назад) тут, на форуме, гениальный программист LeBron выложил свой вариант программки, решающей эту задачу. Вот на основе этого кода я могу написать утилиту. (ну, фактически использовав его код, как вычислительное ядро этой утилиты). Надеюсь, что LeBron не будет против.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2010, 09:01   #7
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

На Планете слэн выкладывал решение:
http://www.planetaexcel.ru/forum.php?thread_id=10417
vikttur вне форума Ответить с цитированием
Старый 04.10.2010, 21:49   #8
Zeon25
Пользователь
 
Регистрация: 05.08.2009
Сообщений: 25
По умолчанию

vikttur я все же надеюсь на Serge_Bliznykov так как решения предложенные тобой не работают так как хотелось бы. Но за решение спасибо
Zeon25 вне форума Ответить с цитированием
Старый 04.10.2010, 21:58   #9
Zeon25
Пользователь
 
Регистрация: 05.08.2009
Сообщений: 25
По умолчанию

Serge_Bliznykov, надеюсь у тебя получится написать рабочий вариант, так как мои 2 терабайтных hdd уже не способны меня удовлетворить, фильмы на них льются постоянно, а в коллекции некоторые оставить хочется. Да и дать посмотреть людям так можно, не давать же им мой hdd? денег не хватит а представь hdd накроется что тогда? я же умру от горя.

Во общем на тебя и местных гуру вся надежда.
Zeon25 вне форума Ответить с цитированием
Старый 04.10.2010, 22:20   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Zeon25,
ну давайте попробуем что-то сваять

в пост #6 я задал несколько вопросов. Ответьте на них, пожалуйста...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переименование группы файлов Meh Общие вопросы Delphi 2 28.07.2009 12:31
Уменьшение размера ехе файлов Terran Общие вопросы Delphi 20 23.01.2008 23:03
Макрос в Excel для обработки группы файлов ad_sum Microsoft Office Excel 1 29.12.2007 16:56
Проверка размера файлов на стороне клиента (работа) AndreyAndrey Фриланс 5 02.11.2007 19:13