解释 实现一个记忆辅助函数
什么是记忆?
它是一种编程技术,用于通过存储函数已经计算过的先前值来提高函数的效率。
它通过缓存函数调用的结果来提高程序效率。我们经常使用已经计算过的相同参数一次又一次地调用函数来浪费时间。因此我们可以存储该计算值,并且当使用相同参数调用该函数时,我们只需要返回该缓存值。
示例 1:在这个示例中,我们将看到 memoization 的工作:
Javascript
Javascript
Javascript
Javascript
输出:
6
6
说明:在这种情况下,我们正在计算两个数字的乘法,但由于 for 循环,该函数需要时间。我们一次又一次地用相同的参数调用函数。这是浪费时间,因为我们已经计算了 mul(2,3) 的结果,并且我们再次使用相同的参数调用它。
因此,在这种情况下,我们可以使用记忆技术来存储 mul(2,3) 的值,当我们再次调用具有相同参数的函数时,我们将返回缓存的值。
示例 2:让我们看看我们的函数需要多少时间来计算 mul(2,3) 的值。
Javascript
输出:
6
Time taken: 14.60ms
该函数用了14.60 ms来计算 (2,3) 的乘法
借助 memoization 技术,我们可以通过存储函数已经计算的值来提高函数的效率,这样当我们用相同的参数调用函数时,我们只会返回缓存的值。
示例 3:现在让我们说一下如何使用记忆技术来减少一次又一次地执行具有相同参数的函数所花费的时间。
Javascript
输出:
6
First time, time taken: 24.73ms
6
Second time, time taken:22,17ms
6
Third time, time taken:8.30ms
笔记: 完成一项任务所需的时间可能会不时变化。
说明:在这种情况下,我们使用了 memoized函数来缓存我们已经计算过的值。当我们第一次调用 func(2,3) 时,它会将参数转换为字符串形式,然后将其与计算值一起存储在对象 obj 中。
当我们用相同的参数调用函数时,首先它会检查它是否已经存在于对象 obj中。如果它已经存在,那么它不会再次计算它,只会返回它存储在对象 obj 中的值。
从输出中我们可以看出,每次调用具有相同参数的函数时,计算 2 和 3 的乘法的时间都会减少。
每次花费时间:
24.73 ms
22.17 ms
8.30 ms
所以从输出中可以清楚地看出,记忆技术有助于减少每次我们用相同的参数一次又一次地调用函数的时间。
示例 4:让我们看另一个在计算斐波那契数时使用记忆技术的示例。
Javascript
输出:
55
First time, time taken: 0.62ms
55
Second time, time taken: 0.28ms
55
Third time, time taken: 0.20ms
好处:
- 在 memoization 的帮助下,我们不需要一次又一次地重新计算值
- 当我们一次又一次地用相同的参数调用函数时,它有助于减少执行函数所花费的时间
- 它提高了性能
缺点:
- 它使用内存来加速函数的执行
- 它给程序带来了额外的负担
- 空间开销