Поле не заполнено.
'%1' не похож на адрес электронной почты.
Пожалуйста, заполните это поле.
Значение поля должно содержать как минимум %1 символов.
Значение не должно быть длиннее %1 символов.
Значение поля не совпадает с полем '%1'
Введен неверный символ. Допустимые символы:'%1'.
Ожидается число.
Ожидается положительное число.
Ожидается целое число.
Ожидается положительное целое число.
Значение должно быть в диапазоне [%1 .. %2]
Символ '%1' уже присутствует в наборе допустимых символов.
Значение поля должно быть меньше %1.
Первым символом должна быть буква латинского алфавита.
Вс
Пн
Вт
Ср
Чт
Пт
Сб
Январь
Февраль
Март
Апрель
Май
Июнь
Июль
Август
Сентябрь
Октябрь
Ноябрь
Декабрь
век
до Н.Э.
Возникла ошибка при импорте данных в строке:%1. Значение: '%2'. Ошибка: %3
Невозможно определить разделитель полей. Для разделения полей можно использовать следующие символы: Tab, точку с запятой (;) или запятую (,).
%3.%2.%1%4
%3.%2.%1%4 %6:%7
с.ш.
ю.ш.
в.д.
з.д.
да
нет
Неправильный формат файла. Поддерживаются только следующие форматы: %1
минут
минут
минута
минуты
минуты
минуты
минут
минут
минут
минут
минут
минут
минут
час
часа
часа
часа
часов
часов
часов
часов
часов
часов
часов
дней
день
дня
дня
дня
дней
дней
дней
дней
дней
дней
дней
месяц
месяца
месяца
месяца
месяцев
месяцев
месяцев
месяцев
месяцев
месяцев
месяцев
год
года
года
года
лет
лет
лет
лет
лет
лет
лет
назад
HTML код со ссылки на эту страницу
  1. Внешний вид
    1. Пример
  2. Закрыть
ОтправитьПолучить код ссылкиДобавить на мой сайтДобавить закладку
  1. delicious
  2. google
  3. bobrdobr
  4. memori
  5. mrwong
  6. yandex
  7. myscoop
Калькуляторы
  1. Задача об упаковке в контейнеры
  2. Сохранить в Мои калькуляторы
  1. Создан 2010-07-23 21:07:27
  2. пользователем Timur

Онлайн калькулятор: Задача об упаковке в контейнеры

Тут давеча пользователь Artuem оставил очень интересный запрос - Калькулятор количества целых досок из отрезков.

Приведу его здесь полностью, чтобы не прерывать нить повествования: "Есть некоторое количество отрезков разной длины, необходимо рассчитать минимальное кол-во досок из которых их можно нарезать, или что то типа того :)"

Немного подумав можно понять, что сие есть не что иное, как формулировка Задачи об упаковке в контейнеры.

Иными словами, имеются контейнеры фиксированного объема и набор предметов произвольного объема (понятно, что объем каждого предмета в отдельности меньше объема контейнера). Требуется упаковать эти предметы в минимальное число контейнеров.

Можно еще привести пример "из жизни" - есть набор файлов (например, кинофильмы) разного размера. Требуется записать весь набор на наименьшее число DVD-дисков. Ну и так далее. Частным случаем этой задачи является задача о рюкзаке, кстати.

Задача эта - NP-полная, то есть для гарантированного нахождения оптимального решения нужен полный перебор. Однако есть эвристические алгоритмы для нахождения подходящего решения. Если повезет, оно будет и оптимальным :)

Ниже калькулятор, а используемые алгоритмы, как водится, описаны под ним. И кстати, хоть на данных по умолчанию некоторые решения совпадают, но алгоритмы все-таки разные, и на других данных различия будут заметны
 Задача об упаковке в контейнеры
  1. Набор элементов для упаковки:
  2. Набор элементов для упаковки
    1. Сохранить Отменить
    Импортировать данные
    1. Для разделения полей можно использовать один из этих символов: Tab, \";\" или \",\": 
    2. OK Отменить
    Добавить Импортировать данные Очистить таблицу
  3.  0.12345678901234567890 
  4. Рассчитать
    1. Next Fit Decreasing:
    2. Общее число контейнеров: 
    3. Общее использование контейнеров (%): 
    4. First Fit Decreasing:
    5. Общее число контейнеров: 
    6. Общее использование контейнеров (%): 
    7. Worst Fit Decreasing:
    8. Общее число контейнеров: 
    9. Общее использование контейнеров (%): 
    10. Best Fit Decreasing:
    11. Общее число контейнеров: 
    12. Общее использование контейнеров (%): 

Начнем с Next Fit Algorithm (не уверен, как это переводится в соответствующей литературе, поэтому буду давать английские названия)

Next Fit Algorithm
Алгоритм очень туп, и в большинстве случаев даст наихудшие результаты из всех рассматриваемых алгоритмов.
Суть алгоритма в следующем:
1. Берем новый элемент
2. Берем новый контейнер.
3. Кладем элемент в контейнер.
4. Берем следующий элемент.
5. Если элемент влезает в контейнер, идем на шаг 3. Если элемент не влезает в контейнер, идем на шаг 2.

То есть мы тупо кладем элементы в контейнер, и если некий элемент уже не влазит, берем новый контейнер.
Можно придумать алгоритм и похитрее, но у этого алгоритма есть один плюс - он не требует просмотра прошлых контейнеров. Это может оказаться полезным, если, например, контейнеры к нам подъезжают по конвейеру.

First Fit Algorithm
Суть алгоритма в следующем:
1. Берем новый элемент
2. Берем новый контейнер.
3. Кладем элемент в контейнер.
4. Берем следующий элемент.
5. Если элемент влезает в контейнер, идем на шаг 3. Если элемент не влезает в контейнер, проверяем остальные контейнеры по порядку. Если находится контейнер с достаточным количеством свободного места, кладем элемент в контейнер и идем на шаг 4, иначе идем на шаг 2.

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

Worst Fit Algorithm
Суть алгоритма в следующем:
1. Берем новый элемент
2. Берем новый контейнер.
3. Кладем элемент в контейнер.
4. Берем следующий элемент.
5. Если элемент влезает в контейнер, идем на шаг 3. Если элемент не влезает в контейнер, берем частично заполненный контейнер с максимумом свободного места. Если элемент влазит в контейнер, кладем элемент в контейнер и идем на шаг 4, иначе идем на шаг 2.

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

Best Fit Algorithm
Суть алгоритма в следующем:
1. Берем новый элемент
2. Берем новый контейнер.
3. Кладем элемент в контейнер.
4. Берем следующий элемент.
5. Если элемент влезает в контейнер, идем на шаг 3. Если элемент не влезает в контейнер, берем частично заполненный контейнер с минимумом свободного места, но в который еще можно положить данный элемент. Если такой контейнер находится, идем на шаг 3, иначе идем на шаг 2.

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

Также надо упомянуть и о том, что для каждого алгоритма есть вариант с предварительной сортировкой элементов по уменьшению - First Fit Decreasing, Best Fit Decreasing и т.п. То есть все тоже самое, только элементы берутся, начиная с самого крупного. Получается, я рассмотрел аж восемь алгоритмов. Но в калькуляторе используются только четыре - все варианты с предварительной сортировкой, ибо они дают лучшие результаты.



Creative Commons Attribution/Share-Alike License 3.0 (Unported)  

Комментарии

  1. Защита от спама
  2. Отправить комментарий