- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这种结构对于实时应用程序是必要的——例如用户界面。 (用户不关心单击按钮需要 0.1 秒还是 0.2 秒,但他们确实关心第 100 次单击是否会强制执行出色的惰性计算并需要 10 秒才能继续。)
我在看冈崎的论文Purely functional data structures他描述了一种有趣的通用方法,用于将具有摊销边界的惰性数据结构转换为具有相同 的结构。每个操作的最坏情况界限 .这个想法是分配计算,以便在每次更新时强制执行一些未评估的 thunk。
我想知道,Haskell 中是否有任何标准集合( Map
、 Set
等)的实现?
containers包说
The declared cost of each operation is either worst-case or amortized, but remains valid even if structures are shared.
Data.Map.Strict
,但它们的键和值很严格:
Key and value arguments are evaluated to WHNF; Keys and values are evaluated to WHNF before they are stored in the map.
最佳答案
there is nothing about (possible) strictness of its structure.
Data.Map.Map
-- See Note: Order of constructors
data Map k a = Bin {-# UNPACK #-} !Size !k a !(Map k a) !(Map k a)
| Tip
Map
完全是脊椎严格的(并且在键中是严格的,即使使用
Data.Map.Lazy
也是如此),如果您将其评估为 WHNF,则强制使用完整的脊椎。这同样适用于
IntMap
s、
Set
s 和
IntSet
s。
Data.XYZ.Strict
变体,防止包含值的大 thunk [时间(和空间)泄漏的常见原因] 是自动的(警告:这些值仅评估为 WHNF,如果您需要更多,您必须自己做例如
deepseq
在操作后立即更改任何值),您需要使用
Data.XYZ.Lazy
变体自行处理。
Users don't care if clicking a button takes 0.1s or 0.2s, but they do care if the 100th click forces an outstanding lazy computation and takes 10s to proceed.
dequeue (Q (x:xs) ys) = (x, Q xs ys)
出列在 O(1) 中,在 O(1) 中
enqueue y (Q xs ys) = Q xs (y:ys)
的后面,好吧,除了当前面列表为空并且后面需要先反转时,出队需要 O(size),但它是 O(1) 摊销的仍然)不改变摊余成本。
关于Haskell 集合保证每个操作的最坏情况界限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393104/
我发现很难理解为什么/如何使用二分搜索在数组/列表中搜索键的最坏和平均情况是 O(log(n))。 log(1,000,000) 只有 6。log(1,000,000,000) 只有 9 - 我明白了
我发现很难理解为什么/如何使用二分搜索在数组/列表中搜索键的最坏和平均情况是 O(log(n))。 log(1,000,000) 只有 6。log(1,000,000,000) 只有 9 - 我明白了
我是一名优秀的程序员,十分优秀!