memoization相关内容

Python惰性评估器

是否有Python方式封装惰性函数调用,从而在第一次使用函数f()时调用了先前绑定的函数g(Z),而在后续调用f()中返回了缓存的值? 请注意,记忆可能并不完美. 我有: f = g(Z) if x: return 5 elif y: return f elif z: return h(f) 该代码有效,但我想对其进行重组,以便仅在使用该值的情况下调 ..
发布时间:2020-04-30 08:15:23 Python

为什么记忆不是语言功能?

我在想...为什么我所了解的任何语言都没有以本机作为一种语言功能来提供备忘录? 编辑:澄清一下,我的意思是该语言提供了一个关键字,用于将给定功能指定为可记忆性,而不是除非另有指定,否则并非每个功能都会“默认情况下"自动记忆.例如,fortran提供关键字PURE来指定这样的特定功能.我想编译器可以利用这些信息来记住调用,但是如果您将PURE声明为具有副作用的函数,我将忽略发生的情况. ..
发布时间:2020-04-27 03:47:52 其他开发

真实世界的javascript中的memoization示例?

我找到了诸如阶乘计算之类的例子来解释 memoization 。这些都很有用,但我正在寻求更深入的理解。 我想知道是否有人可以描述这种技术的真实世界应用以及为什么他们使用它代替递归或他们使用memoization感觉到的任何其他东西可能有助于他们优化。 解决方案 记忆比缓存更具体。 考虑使用选择器在DOM中搜索元素,就像使用jQuery一样。比如说, $('。some-sele ..
发布时间:2019-06-07 22:49:05 PHP

在Javascript中缓存和预取即将到期的承诺

Promise是我在Javascript中管理异步代码的首选方式。 Memoize(npm上的memoizee)是一个用于轻松缓存的Javascript库。预取函数的结果。 理想情况下,我希望结合两者的优点,并且能够“使”Promise“过期”并预先获取新的Promise结果(当触摸缓存并接近到期时)。 Memoize可以做到这一点,但它并没有考虑到Promise。 (我知道Prom ..
发布时间:2019-06-07 19:15:51 前端开发

如何在javascript中实现下划线memoize

我正在开发自己的函数式编程库,现在引用下划线。 memoize _.memoize(功能,[hashFunction]) 通过缓存计算结果来记忆给定函数。对于加速慢速运行计算很有用。如果传递了一个可选的hashFunction,它将用于根据原始函数的参数计算用于存储结果的哈希键。默认的hashFunction只使用memoized函数的第一个参数作为键。 var fibonac ..
发布时间:2019-06-06 04:44:09 前端开发

在JavaScript中实现自动记忆(返回一个关闭的函数)

我已阅读 http://www.sitepoint.com/implementing-memoization-in-javascript/ 自动记忆 在前面的所有示例中,显式修改了函数以添加memoization。也可以在不修改功能的情况下实现存储器基础结构。这很有用,因为它允许函数逻辑与memoization逻辑分开实现。这是通过创建一个实用程序函数来完成的,该函数将函数作为输 ..
发布时间:2019-05-27 17:09:03 前端开发

基于承诺的功能的记忆

如何记忆基于承诺的功能? 该功能的直接记忆是否足够? function foo( ){ 返回新的承诺((解决,拒绝)=> { doSomethingAsync({success:resolve,fail:reject}); }); }; 这样就够了吗? var fooMemoized = memoize(foo); 注意:此问题已 ..
发布时间:2019-01-25 19:57:57 前端开发

Java memoization方法

我遇到了一个有趣的问题,并想知道是否以及如何在Java中完成: 创建一个可以记住任何函数/方法的方法。该方法具有以下参数:方法/函数及其参数。 例如,假设我有这种方法: int addOne(int a){return a + 1;} 我用相同的参数调用我的memoization方法两次:例如addOne和5,第一个调用应该实际调用addOne方法并返回结果并存储 ..
发布时间:2018-12-17 10:49:41 Java开发

如何记忆递归Java方法?

所以我建立了这个程序来构建不同的楼梯案例。基本上问题是:给定一个整数N,你可以建立多少种不同的方法。 N保证大于3且小于200.任何前一步都不能大于其后续步骤,否则会违背楼梯的目的。 所以给出N = 3 你可以建造一个楼梯:2个步骤,然后是1个步骤 给定N = 4 你可以建造一个楼梯: 3步然后1步之后 给定N = 5 你可以建造两个楼梯:3步然后2步或4步然后1步。 ..
发布时间:2018-12-07 18:36:12 Java开发

Java中的memoization有哪些不同的技术?

我知道这个 http://onjava.com /pub/a/onjava/2003/08/20/memoization.html 但还有其他什么吗? 解决方案 使用普通的简单类型安全Java,记忆也很容易。 您可以从头开始使用以下可重用的类。 我将这些用作缓存,其生命周期是webapp上的请求。 当然使用Guava MapMaker 如果您需要驱逐策略或更多功能,如同步 ..
发布时间:2018-12-04 14:01:18 Java开发

在Haskell中实现一个memoization函数

我对Haskell相当陌生,我试图实现一个使用 Data.Map 来存储计算值的基本memoization函数。我的例子是Project Euler Problem 15,它涉及到计算20x20网格中从1个角落到另一个角落的可能路径的数量。 这就是我迄今为止所拥有的。我还没有尝试编译,因为我知道它不会编译。 导入限定的Data.Map作为地图 main = print getPr ..
发布时间:2018-06-05 11:43:45 其他开发

Haskell:记忆

我试图重新学习Haskell,经过很多年,忘记了一切,我发现自己仍然对我的 memoization 感到困惑。特别是,我试图编写一个程序来产生 n 对象的错位数目 D [n] (在原始位置没有项目的排列);数字 D [n] 可以通过 D [1] = 0 , D [2] = 1 , D [n] =(n-1)(D [n-1] + D [n-2]) 所以这个工作: der :: Int - ..
发布时间:2018-06-05 11:38:19 其他开发

Haskell中函数调用的优化

不确定这个问题到底是什么,所以我会直接把它发布到SO: Haskell中的变量是不可变的 纯函数对于相同的参数应该得到相同的值 从这两点来看,推断如果你在你的代码中调用 somePureFunc somevar1 somevar2 两次,在第一次调用期间计算该值才有意义。结果值可以存储在某种巨大的哈希表(或类似的东西)中,并在以后对该函数的调用中查找。我有两个问题: GHC是否 ..

有没有一种自动方式来记忆Haskell中的全局多态值?

多态“常量”,如 5 :: Num a =>一个,并不是真正的常量,而是一个字典参数的函数。因此,如果您定义 primes :: Num n => [n] primes = ... 当然不好的例子有没有什么理由让它具有多态性......我真正感兴趣的是如果你试图在全球范围内记忆一个非平凡的多态函数,例如 memo-trie s。 ,那么这个序列将不会在来自不 ..
发布时间:2018-06-04 17:03:16 其他开发

Haskell缓存函数的结果

我有一个函数需要一个参数并产生一个结果。不幸的是,该功能花费相当长的时间来产生结果。这个函数经常会在相同的输入中被调用,这就是为什么我可以缓存结果会很方便。例如 let cachedFunction = createCache slowFunction $ b $ in(cachedFunction 3.1)+(cachedFunction 4.2)+(cachedFunction 3.1 ..
发布时间:2018-06-04 16:03:18 其他开发

你如何在Haskell中创建一个通用的memoize函数?

我见过另一篇文章 ,但是在Haskell中有这样一个干净的方法吗? 作为第二部分,是否也可以在不使函数monadic的情况下完成? 解决方案 这主要遵循 http:/ /www.haskell.org/haskellwiki/Memoization 。 您需要一个类型为(a - > b)的函数。如果它不自己调用,那么 就可以写一个缓存返回值的简单包装器。存储此映射的 最佳方 ..
发布时间:2018-06-04 15:50:19 其他开发