memoization相关内容
我正在重温一些动态编程概念,我写了一段代码,用记忆法计算斐波纳契数。 代码如下: def fib(n,memo={}): if(n in memo): return memo[n] if(n
..
在我最近面试的一家公司,这是一个很有挑战性的问题。前提是,电影院必须遵守距离规则,即每两个坐着的人之间必须至少有六英尺的距离。我们得到了一个由N个非负整数组成的列表,其中list[k]是座位k和座位k+1之间的距离,单行有N+1个座位。我们需要计算出有效的座位安排数量。 编辑:经过更多的思考,这就是我到目前为止得到的 def count(seats): # No seats t
..
我使用动态编程技术编写了以下代码,但当我对数字220运行Fibonacci时得到一个负数。此程序中是否有错误? import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class Fibonaci { public static void main(String[] a
..
我正在尝试定义一个以函数f作为参数的make-memoize函数。其想法是make-memoize将返回一个与mememization一起运行的过程f。在使用函数f作为参数定义make-Memoize之后,我已经能够返回一个过程。但是,我还不能实际应用该函数来加、减或乘一个数字。也就是说。如果我将make-Memoize和Add-One函数作为参数应用到28号,我应该会得到29作为结果。 这
..
我刚开始使用 Python,我不知道 memoization 是什么以及如何使用它.另外,我可以举一个简化的例子吗? 解决方案 记忆化是指根据方法输入记忆(“记忆化"→“备忘录"→被记忆)方法调用的结果,然后返回记忆的结果而不是再次计算结果.您可以将其视为方法结果的缓存.有关详细信息,请参阅第 387 页以了解 Introduction To Algorithms (3e), Cormen
..
我需要编写一个自定义函数,该函数将被其他固定函数多次调用.在这个函数中,在第一次调用时,它会返回一个文件的总行数.此函数的第二次调用时间 forward 将返回此文件小部分中的行数.我的问题是如何保留第一个返回的结果(文件的总行数)并将其用于函数的下一个调用时间.我只需要在这个函数中(而不是在调用者中)编写或声明任何东西.像这样的: myFunction(Input, MyResult, Fir
..
我用表格功能做了一些实验b-prolog 版本 8.1对我观察到的表现感到非常惊讶. 这是我使用的代码.它计算减少某些正整数所需的 Collatz 步骤 N 的数量I 到 1: %:- 表 posInt_CollatzSteps/2.% 删除评论以启用表格posInt_CollatzSteps(I,N) :-( 我 == 1->N = 0 % 基本情况;1是我/\ 1->I0
..
我正在尝试编写一个在 Clojure 中返回记忆化递归函数的函数,但是我无法让递归函数看到它自己的记忆化绑定.这是因为没有创建 var 吗?另外,为什么我不能在用 let 创建的本地绑定上使用 memoize? 这个以特定数字开始的稍微不寻常的斐波那契数列生成器是我希望我能做的一个例子: (defn make-fibo [y](记住 (fn fib [x] (if (
..
是否有可能以某种方式将记忆化和尾递归结合起来?我目前正在学习 F# 并理解这两个概念,但似乎无法将它们结合起来. 假设我有以下 memoize 函数(来自 Real-World Functional Programming): let memoize f = let cache = new Dictionary()(有趣的 x -> 匹配 cache.TryGetValue(x) 与|是的
..
查看 React 的 useMemo 文档.他们说当你需要计算昂贵的计算时使用它. 这种优化有助于避免每次渲染时进行昂贵的计算. 我查看了他们提供的 memoized link 以及什么我的理解是你可以把它想象成一个缓存. 我不是计算机科学专家,但我知道记忆法是计算fibonacci 我仍在尝试更好地理解为什么以及如何使用 useMemo,但我仍然不清楚一些事情. 什
..
如何记住基于 Promise 的函数? 直接记住函数就足够了吗? function foo() {返回新的承诺((解决,拒绝)=> {doSomethingAsync({ 成功:解决,失败:拒绝 });});}; 这就够了吗? var fooMemoized = memoize(foo); 注意:此问题已更新以删除延迟反模式. 解决方案 是的,这就足够了.Promise 是简
..
我正在用 numpy 编写一些中等性能的关键代码.此代码将位于最内层循环中,计算的运行时间以小时为单位.快速计算表明,在计算的某些变体中,此代码将执行大约 10^12 次. 所以函数是计算sigmoid(X),另一个是计算它的导数(梯度).Sigmoid 具有对于 y=sigmoid(x), dy/dx= y(1-y) 在 numpy 的 python 中,这看起来像: sigmoid
..
好的,这是真实世界的场景:我正在编写一个应用程序,我有一个代表某种类型文件的类(在我的例子中,这是照片,但该细节与问题无关).Photo 类的每个实例对于照片的文件名都应该是唯一的. 问题是,当用户告诉我的应用程序加载文件时,我需要能够识别文件何时已加载,并使用该文件名的现有实例,而不是在同一文件名上创建重复实例. 对我来说,这似乎是使用记忆的好方法,并且有很多这样的例子,但在这种情况
..
我试图找到一种简单的方法来在 R 中使用类似 Perl 的散列函数(本质上是缓存),因为我打算同时进行 Perl 样式的散列并编写自己的计算记忆.然而,其他人已经打败了我,并提供了用于记忆的包.我挖掘的越多,我发现的就越多,例如 memoise 和 R.cache,但差异并不容易清楚.此外,目前还不清楚除了使用 hash 包之外,还有什么方法可以获得 Perl 风格的哈希(或 Python 风格的
..
考虑以下事项: @property定义名称(自己):如果不是 hasattr(self, '_name'):# 昂贵的计算self._name = 1 + 1返回 self._name 我是新手,但我认为可以将缓存分解为装饰器.只有我没有找到一个喜欢它;) PS 真正的计算不依赖于可变值 解决方案 Python 3.8 functools.cached_property 装饰器
..
我正在编写一个函数来查找三角形数和自然的写法是递归的: 函数三角形(x)如果 x == 0 则返回 0 结束返回 x+三角形(x-1)结尾 但尝试计算前 100,000 个三角形数失败,一段时间后堆栈溢出.这是 memoize 的理想函数,但我想要一个解决方案,可以记住我传递给它的任何函数. 解决方案 我敢打赌这样的事情应该适用于 Lua 中的可变参数列表: 局部函数 varg_to
..
我一直认为 Haskell 会做某种自动智能记忆.例如,朴素的斐波那契实现 fib 0 = 0光纤 1 = 1fib n = fib (n-2) + fib (n-1) 因此会很快.现在我读了 this 似乎我错了——Haskell 似乎没有自动记忆.还是我理解错了? 是否有其他语言可以自动(即隐式,非显式)记忆? 实现记忆的常用方法有哪些?在我见过的所有示例实现中,它们都使用哈希
..
我一直在查看 Data.MemoCombinators 但我真的看不出它的核心在哪里. 请向我解释所有这些组合器背后的逻辑是什么,以及它们如何在现实世界编程中加速您的程序的实际工作机制. 我正在寻找这个实现的细节,并且可以选择与其他 Haskell 记忆方法进行比较/对比.我了解记忆化是什么,并且我不寻找它的一般工作原理的描述. 解决方案 这个库是众所周知的记忆技术的直接组合.
..
关于如何在 Haskell 中有效解决以下函数的任何指示,对于大数 (n > 108) f(n) = max(n, f(n/2) + f(n/3) + f(n/4)) 我在 Haskell 中看到了解决斐波那契数列的记忆化示例数字,其中涉及(懒惰地)计算所有斐波那契数达到所需的 n.但在这种情况下,对于给定的 n,我们只需要计算很少的中间结果. 谢谢 解决方案 我们可以通过创建一
..
我不明白为什么 m1 显然被记忆而 m2 不在以下内容中: m1 = ((过滤奇数 [1..]) !!)m2 n = ((过滤奇数 [1..]) !! n) m1 10000000 在第一次调用时大约需要 1.5 秒,在后续调用中只需要一小部分(大概它缓存了列表),而 m2 10000000 总是花费相同的时间(每次调用重建列表).知道发生了什么吗?关于 GHC 是否以及何时记忆功能是否有任何
..