Для задания мне была задана проблема с упаковкой в корзине и попросил показать, как вы можете решить версию решения проблемы из версии оптимизации и наоборот. Я понимаю, что для решения версии решения вы просто берете количество ящиков, используемых в версии оптимизации, и сравниваете их с максимальным количеством указанных ящиков, но как я могу использовать версию решения для решения версии оптимизации?Уборка бина, решение против оптимизации
ответ
Вы можете использовать версию решения для решения оптимизационной версии, заметив, что если достаточно N
бункеров, то также будет достаточно K > N
бункеров.
Начните с одного бункера и запустите на нем версию решения. Если ответ true
, все готово; в противном случае, удвоение количества ящиков до тех пор, пока вы не нажмете true
. Предположим, что вы получили ответ от true
при попытке N = 2^k
. Затем вы можете запустить двоичный поиск между M = 2^(k-1)
и N
, включительно, чтобы найти точное решение проблемы оптимизации (как N
, так и k
приведены на предыдущем шаге).
Рассмотрим следующий пример: допустим, оптимальное решение 14. Затем можно попробовать следующую последовательность задачи принятия решения, чтобы найти ответ:
- 1 ->
false
- 2 ->
false
(удвоенный 1) - 4 ->
false
(удвоенный 2) - 8 ->
false
(удвоенный 4) - 16 ->
true
(удваивается 8; мы получилиtrue
, поэтому переходим к бинарного поиска) - 12 ->
false
(средняя точка между 8 и 16) - 14 ->
true
(средняя точка между 12 и 16) - 13 - >
false
(средняя точка между 12 и 14)
в общем, ответ может быть найден в логарифмической времени (т.е. Вход (ответ)).
После того, как вы знаете, количество бункеров N
необходимых для упаковки X
объектов, запустить двудольный алгоритм соответствия между элементами на одной стороне и N
бункеров на другой стороне. Предполагая, что проблема решения решена правильно, должно существовать такое двудольное сопоставление, and can be found in polynomial time.
- 1. NewSQL против традиционной оптимизации/ошпаривания
- 2. Решение задачи оптимизации покупки-продажи
- 3. Уборка списка
- 4. станд :: двигаться против оптимизации компилятора
- 5. MySQL Правды против ложной оптимизации
- 6. Алгоритм оптимизации против регрессионных моделей
- 7. SAT-решение: DPLL против?
- 8. Решение против царапин (приложение?)
- 9. Уборка темы
- 10. Уборка jQuery
- 11. Решение для оптимизации веб-панели меню
- 12. Решение маршрутизации транспортных средств для оптимизации затрат
- 13. Решение проблем с ограниченной степенью оптимизации
- 14. Решение нелинейных уравнений оптимизации с большими ошибками
- 15. Пожалуйста, предложите лучшее решение для оптимизации головоломки
- 16. самомодифицирующийся код против оптимизации компилятора против повторяющегося кода
- 17. дизайнерское решение свойства против переменных
- 18. индексирование против нормализации при оптимизации скорости чтения
- 19. Compiler оптимизации вызовов RET против JMP
- 20. Оптимизации: Global Строка против вызова Enum Класс
- 21. Планирование эффективности рано против преждевременной оптимизации
- 22. Помощь в оптимизации оптимизации
- 23. Уборка сложного проекта WebForms
- 24. Git не уборка мусора
- 25. Уборка данных twitter
- 26. уборка python на ubuntu
- 27. уборка после исключения
- 28. Уборка AppEngine BlobStore
- 29. Уборка вопроса на выходе
- 30. Уборка абстракции и информации
Я могу видеть, где вы собираетесь с этим, что приведет к правильному количеству ящиков. Но я не вижу, как он сообщает, какой элемент находится в каждом ящике? –
@DavidCarpenter См. Редактирование. – dasblinkenlight
Если проблема решения размера n принимает шаги 'f (n)', то поиск размера принимает 'sum_ {n \ in S} f (n)' шагов, где S является 'O (log (N))' которые должны быть протестированы. –