Python 你怎么知道什么时候应该使用备忘录?

Python 你怎么知道什么时候应该使用备忘录?,python,memoization,Python,Memoization,我正在学习记忆化,虽然我在Python中需要时实现它没有问题,但我仍然不知道如何确定需要它的情况 我知道它是在子载波重叠时实现的,但是如何确定是否是这种情况?一些递归函数似乎在进行重叠调用之前就已经深入。你会如何在编码面试中识别这一点?您是否会列出所有调用(即使其中一些调用在O(2^n)复杂度暴力解决方案中深入5-6级) 像斐波那契序列这样的情况是有意义的,因为重叠会立即发生(“fib(i-1)”调用几乎会立即与“fib(i-2)”调用重叠。但在其他情况下,比如背包问题,我仍然不知道任何人在面试

我正在学习记忆化,虽然我在Python中需要时实现它没有问题,但我仍然不知道如何确定需要它的情况

我知道它是在子载波重叠时实现的,但是如何确定是否是这种情况?一些递归函数似乎在进行重叠调用之前就已经深入。你会如何在编码面试中识别这一点?您是否会列出所有调用(即使其中一些调用在O(2^n)复杂度暴力解决方案中深入5-6级)

像斐波那契序列这样的情况是有意义的,因为重叠会立即发生(“fib(i-1)”调用几乎会立即与“fib(i-2)”调用重叠。但在其他情况下,比如背包问题,我仍然不知道任何人在面试时应该如何使用回忆录。有没有快速检查重叠的方法

我希望我的问题有意义。如果有人能给我指出一个好的资源,或者给我一些线索,我会非常感激。提前感谢。

为了实现“记忆化”解决方案,您首先需要确定问题中的以下两个属性:

  • 重叠子问题
  • 最优子结构
  • 看来你明白了。第(2)款:

    最优子结构:如果尺寸为n的问题S的最优解可以通过查看尺寸小于n的子问题S的最优解而不是子问题的所有解来计算,并且这也将导致问题S的最优解,则该问题S被认为具有最优子结构

    有关更多详细信息,请查看以下答案:


    这不是那么简单。即使当函数的时间复杂度为O(1)时,您可能仍希望对其进行记忆,以便在多次调用该函数时(例如,在同一事务中向您的用户支付两次账单),您不会执行两次相同的操作。至于面试问题(我不喜欢),如果你的算法的时间复杂度是指数级的,这是考虑记忆化的一个好迹象(假设其他条件都满足)。背包和斐波那契是玩具的例子,所以“每个人”都知道你可以实现记忆化,使它们“更好”。