相关疑难解决方法(0)

对HashTable性能问题感到好奇

我读到Haskell中的哈希表存在性能问题(2006 年的Haskell-Cafe和2009年的Flying Frog Consultancy的博客),因为我喜欢Haskell,所以我很担心.

那是一年前,现在的状况是什么(2010年6月)?GHC中是否修复了"哈希表问题"?

haskell hashtable ghc

50
推荐指数
3
解决办法
1万
查看次数

在 Haskell 中记忆最有效的方法是什么?

在 Haskell 中记住递归函数的最快方法是什么?

背景:最近我一直在用 Haskell 解决 Project Euler 问题。许多需要对递归定义的组合或数论函数进行多次计算,例如斐波那契数。如果这些函数被记忆,即函数的结果被缓存以备后用,性能会显着提高。

我见过很多解决这个问题的方法。最优雅的似乎是这个。一种使用 Data.IntMap(或哈希表)和 State monad。此答案中建议的基于树的解决方案,并且此类解决方案似乎相当普遍。再举一个例子,请参阅这篇博文。我见过使用内置函数的其他解决方案。还有一个在第2节在这里fix,进一步似乎编译器有时可以按摩到memoizing无需额外的工作。还有几个预构建的解决方案

我想知道对于 Project Euler 中使用的各种函数,哪种记忆方法在实践中最快。我的直觉是哈希表库,因为哈希表似乎是命令式语言中首选的字典结构。纯函数树解决方案很酷,但我的谷歌搜索告诉我,就渐近性能而言,它们比哈希表更糟糕。

编辑

一些评论说这个问题太宽泛而无法回答,经过反思,我同意。因此,让我举两个具体的函数示例进行记忆:一个函数递归计算第 n 个斐波那契数,一个函数递归计算加泰罗尼亚数。我想为大 n 多次计算这些函数。

我知道这些有明确的公式,但让我们忽略它,因为这里的真正重点是使用它们来对记忆技术进行基准测试。

algorithm recursion haskell memoization catalan

5
推荐指数
1
解决办法
944
查看次数

如何在没有突变的情况下使用 javascript 地图

我正在我的 JS 项目中以函数式方式工作。

这也意味着我不会变异objectarray实体。相反,我总是创建一个新实例并替换旧实例。

例如

let obj = {a: 'aa', b: 'bb'}
obj = {...obj, b: 'some_new_value'}
Run Code Online (Sandbox Code Playgroud)

问题是:

如何使用 javascript 地图以功能性(不可变)方式工作?

我想我可以使用以下代码来添加值:

let map = new Map()
...
map = new Map(map).set(something)
Run Code Online (Sandbox Code Playgroud)

但是删除项目呢?

我不能这样做new Map(map).delete(something),因为 的结果.delete是一个布尔值。

PS我知道 ImmutableJS 的存在,但我不想使用它,因为你永远不能 100% 确定你现在使用的是普通 JS 对象还是 immutablejs 对象(尤其是嵌套结构)。顺便说一句,因为 TypeScript 的支持不好。

javascript dictionary functional-programming immutability

5
推荐指数
1
解决办法
1569
查看次数