Учитывая стержень длиной n дюймов и массив цен, содержащий цены на все части размером меньше n. Используя динамическое программирование, мы можем получить максимальное значение и соответствующие части стержня. Есть ли какой-либо алгоритм, который будет давать k-е максимальное значение с соответствующим разрезом для этой проблемы?Динамическое программирование резки стержня
ответ
Задача: Найти k th
максимальная цена для проблемы с разрезом стержня.
Я думаю, что алгоритм может быть изменен следующим способом:
Изменения рекурсии в стержневых проблемах резки от:
cutRod(n) = max(price[i] + cutRod(n-i-1)) for all i in {0, 1 .. n-1}
To:
Top_K_Price_CutRod(n)[] = top_k(price[i] + cutRod(n-i-1)) for all i in {0, 1 .. n-1}
В принципе, в каждой рекурсии step, return max k
цены для этого подраздела, потому что только те могут быть в конечном итоге в общем максимуме k
.
Bruteforce способ вернуть все возможные цены этого подраздела, но мы точно знаем, что цены, имеющие ранг больше k
для этого подраздела, не могут быть в топ k
цены на полный стержень в конце концов.
Таким образом, здесь Top_K_Price_CutRod(n)[]
представляет собой массив из k
максимальных цен для этого подраздела. В корне рекурсии вы останетесь с максимальными максимальными k
ценами.
Я не думаю, что мы можем оптимизировать больше, чем это, так как на каждом узле рекурсии его верхнее значение k может быть среди окончательного верхнего k. Поэтому у вас должно быть k
значений для всех подчастей.
спасибо. Я попробую –
- 1. Изменение режущего стержня (динамическое программирование)
- 2. Rod резка - Динамическое программирование
- 3. Найти цену для резки стержня
- 4. Как узнать всю длину разрезов стержня в алгоритме резки стержней? (динамическое программирование)
- 5. Алгоритм резки стержня, чтобы максимизировать прибыль
- 6. Динамическое программирование (резка стержня) с использованием рекурсии в java
- 7. Динамическое программирование-RodCutting
- 8. Lego блоки - Динамическое программирование
- 9. динамическое программирование
- 10. Динамическое программирование?
- 11. Динамическое программирование: ошибка внедрения режущей кромки
- 12. Динамическое программирование - резка стержня, сохраняя вкладку по индексам, на которых был сделан разрез
- 13. Динамическое программирование (максимальная сумма)
- 14. Динамическое программирование с Data.Vector
- 15. Динамическое программирование - планирование задач
- 16. Добавление заметок - Динамическое программирование
- 17. Динамическое программирование: молния
- 18. Рюкзак Динамическое программирование
- 19. Приближающееся динамическое программирование
- 20. пытается решить динамическое программирование
- 21. Stacking и динамическое программирование
- 22. Стек ящиков - динамическое программирование
- 23. Динамическое программирование: минимизация пробелов
- 24. Динамическое программирование в VB
- 25. Динамическое программирование, метод обхода
- 26. Рекурсия и динамическое программирование
- 27. Динамическое программирование пирамид
- 28. Динамическое программирование - определение состояния
- 29. Динамическое программирование - основной алгоритм
- 30. Динамическое программирование - Fibonacci
Возможный дубликат [Резание стержней - Динамическое программирование] (http://stackoverflow.com/questions/38522640/rod-cutting-dynamic-programming) – ilim
Задача резки стержня @ilim дает максимальное значение с соответствующим разрывом стержня , Мой вопрос в том, как получить второй, третий, четвертый ... максимум с соответствующим расколом стержня. –
Насколько я понимаю, было бы возможно модифицировать алгоритм для использования более одного массива для значений решения, а именно для оптимального значения, для второго наилучшего значения и так далее. Эти массивы должны быть заполнены вдоль оптимального массива. – Codor