Оптимизация кучи файлов для записи на DVD
6688
10
an_onim
veteran
Подскажите софтинку:
Есть куча файлов (>100), размером от 100 до 400 Мб (общий размер ~63 Гб), хочу все их записать на болванки, но так, что бы потерь свободного места было минимум. Файлы должны записываться целиком (не резать). Ну то есть чтобы программа оптимально распихала их по 14-15 (63Гб/4,5Гб=14) дискам.
В идеале, что бы программа по подпапкам заданного размера разложила всю кучу файлов.
Для тех кто не понял - пример:
Есть файлы размером 1,2,3,4,5 усл. ед.. Есть диски размером 5 у.е.
Если записывать "вручную" (по порядку) то надо 5 дисков
1 диск - 1,2
2 диск 3
3 диск 4
5 диск 5
А если бы с искомой программой, то надо всего 3 диска
1 диск - 2,3
2 диск - 1,4
3 диск - 5
Ы?
Есть куча файлов (>100), размером от 100 до 400 Мб (общий размер ~63 Гб), хочу все их записать на болванки, но так, что бы потерь свободного места было минимум. Файлы должны записываться целиком (не резать). Ну то есть чтобы программа оптимально распихала их по 14-15 (63Гб/4,5Гб=14) дискам.
В идеале, что бы программа по подпапкам заданного размера разложила всю кучу файлов.
Для тех кто не понял - пример:
Есть файлы размером 1,2,3,4,5 усл. ед.. Есть диски размером 5 у.е.
Если записывать "вручную" (по порядку) то надо 5 дисков
1 диск - 1,2
2 диск 3
3 диск 4
5 диск 5
А если бы с искомой программой, то надо всего 3 диска
1 диск - 2,3
2 диск - 1,4
3 диск - 5
Ы?
Exсel.
Но с вашей помощью - заводите список файлов с размерами и формулу под требуемые условия.
Но с вашей помощью - заводите список файлов с размерами и формулу под требуемые условия.
предлагаю вместо поиска проги начать запись болванок по известному вам алгоритму (как отчетливо видно из 1го поста ;)). 100 баллов, что записать их вручную быстрее, чем найти софтинку ))
Ручки и голова. Только так. Есть же еще идея объединения.... Если вы, ради экономии места, раскидаете два-три сериала по трем-четырем болваням.... перемешав их динамично. Это не по фен шую.
Ну собственно раскидал по порядку - получилось 15 дисков. Однако задача у меня уже вызвала чисто академический интерес
Я уже изучил что такое комбинаторикаА конкретно - сочетания.
Хотел прикинуть алгоритм (в принципе могу и на VBA и на C пописать) - пришел к выводу, что везде приведены алгоритмы, осуществляющие весь перебор сочетаний.
При выборке из n (166 - уточнил) файлов по k (12 файлов на диск в среднем) количество вариантов будет 166!/(12!*154!) - жуткое количество - 6,08356E+17.
А учитывая рекурсивность алгоритмов - и памяти (стека) не хватит на организацию перебора всех вариантов.
Испытания Excel'я показали, что он ограничен 32768'ю итерациями.
К программистам в форум сунуться что ли
Я уже изучил что такое комбинаторикаА конкретно - сочетания.
Хотел прикинуть алгоритм (в принципе могу и на VBA и на C пописать) - пришел к выводу, что везде приведены алгоритмы, осуществляющие весь перебор сочетаний.
При выборке из n (166 - уточнил) файлов по k (12 файлов на диск в среднем) количество вариантов будет 166!/(12!*154!) - жуткое количество - 6,08356E+17.
А учитывая рекурсивность алгоритмов - и памяти (стека) не хватит на организацию перебора всех вариантов.
Испытания Excel'я показали, что он ограничен 32768'ю итерациями.
К программистам в форум сунуться что ли
Тем кому интересно - весь мир на этим уже давно бьется.
Задача называется - Задача о рюкзаке.
Задача для максимально точного решения требует огромные вычислительные ресурсы.
Есть упрощения - Жадный алгоритм.
Собственно им я и воспользовался выполнив операции вручную.
Задача называется - Задача о рюкзаке.
Задача для максимально точного решения требует огромные вычислительные ресурсы.
Есть упрощения - Жадный алгоритм.
Собственно им я и воспользовался выполнив операции вручную.
Тем кому интересно - весь мир на этим уже давно бьется.Этого не знал, когда делал на Экселе.
Про "жадный" почитал - не очень понял его суть.
Мной был применён следующий алгоритм.
Все файлы упорядочены по убванию размера (сверху вниз),
набор идёт с наибольших размеров вниз, пока суммарный объём не превысит размер болвани (откат на один шаг), далее ищем оптимальный файл снизу вверх (тот после которого объём превысит размер болвани), результат - сумма нескольких больших и оптимального маленького (можно количество итераций увеличить, добивая остаток ещё меньшими файлами, но практического интереса не представляет).
Далее всё повторяем - опять набираем большие файлы добиваем оптимальным(ми) маленькими.
На такой практический (а не идеально-теоретический) алгоритм 32768 хватит, наверное.
Ведь в данной задаче Optimum optimorum не так важен (разве что из академического интереса).
Сейчас читают
Красота и беременность (часть 28)
161435
1000
C# легко ли освоить с Delphi
25727
86
Платяной шкаф. Прочтение правил - ОБЯЗАТЕЛЬНО (часть 17)
255535
1000
Это и есть жадный алгоритм...От жадности начинаем с большихТем кому интересно - весь мир на этим уже давно бьется.Про "жадный" почитал - не очень понял его суть.
Все файлы упорядочены по убванию размера (сверху вниз),
набор идёт с наибольших размеров вниз, пока суммарный объём не превысит размер болвани (откат на один шаг), далее ищем оптимальный файл снизу вверх (тот после которого объём превысит размер болвани), результат - сумма нескольких больших и оптимального маленького (можно количество итераций увеличить, добивая остаток ещё меньшими файлами, но практического интереса не представляет).
Во вложении найденная мной поделка немецких коллег.
Stuckelung - Список значений (в моем случае длины файлов, в примере - суммы евров)
Betrag - Сумма (Искомое значение, в моем случае размер DVD)
Toleranz - Точность (сколько допустимо плюс/минус)
Ergebnis - Оценка (для пересчета надо нажать F9, скрипт отключает автоматическое обновление)
Полный перебор идет очень долго, однако если поставить точность не сильно маленькую - считает быстро.
Это и есть жадный алгоритм...От жадности начинаем с больших ;)Вот так всегда! Что не придумай - всё уже придумано до нас.