使用动态编程可以解决许多问题,例如增长最快的子序列。这个问题可以通过使用2种方法来解决
我的问题是哪种方法在时间和空间复杂性方面更好?
答案 0 :(得分:31)
简短回答:取决于问题!
Memoization 通常需要更多的代码并且不那么简单,但在某些问题上具有计算优势,主要是那些 not 需要计算整个值的所有值矩阵得出答案。
制表更直接,但可能会计算不必要的值。如果确实需要计算所有值,则此方法通常更快,因为开销较小。
答案 1 :(得分:1)
渐近地,自上而下的动态编程实现与自下而上相同,假设您使用相同的递归关系。但是,自下而上通常更有效,因为在记忆中使用了递归的开销。
答案 2 :(得分:-4)
如果问题有overlapping sub-problems
属性,请使用Memoization
,否则取决于问题