Имеет ли каждый код динамического программирования одинаковую временную сложность в табличном методе или методе запомненной рекурсии? Было бы признательно за решение с соответствующим примером.

0
piyush172 24 Дек 2020 в 13:55

1 ответ

Лучший ответ

Сложность времени - Да (если вы игнорируете вызовы / возврат функции в Memoization)
Сложность пространства - Нет. Табулирование может сэкономить место, перезаписав ранее вычисленные, но больше не нужные значения.

Как упоминалось в разделе «Оптимальность» этого ответа - https://stackoverflow.com/a/6165124/7145074

Любой из подходов может быть неоптимальным по времени, если порядок, в котором вы происходите (или пытаетесь) посещать подзадачи, не является оптимальным, в частности, если существует более одного способа вычисления подзадачи (обычно кеширование решает эту проблему, но теоретически возможно, не в каких-то экзотических случаях). Мемоизация обычно добавляет вашу временную сложность к вашей пространственной сложности (например, с табуляцией у вас больше свободы отбрасывать вычисления, например, использование табуляции с Fib позволяет вам использовать пространство O (1), но мемоизация с Fib использует O (N) пространство стека).

Дополнительная литература: https://www.geeksforgeeks.org/tabulation-vs-memoization/

1
sspathare97 24 Дек 2020 в 11:13