gpt4 book ai didi

f# - F# 中的不可变 Trie 结构

转载 作者:行者123 更新时间:2023-12-02 04:33:26 25 4
gpt4 key购买 nike

我正在尝试使用 aho-corasick 算法来尝试使用 F# 来获得更好的效果,并且我遇到了 Trie 实现的问题,它们都是可变的或者无法进行尾部调用优化。

据我所知,基本问题是不可变数据结构必须“自下而上”构建,因为您无法更改它们指向的内容,因此您的选择要么使它们可变,要么找出节点你继续(即递归构造)。

有没有办法制作一个不可变的 trie 数据结构,并在构造上进行尾调用优化?(并且不会因复制而损失效率。)

最佳答案

尾部调用优化可以通过使用延续来消除。这是一个示例,其中键和值分别为 stringint

type Trie = 
| Data of string * int * Trie * Trie
| Leaf

let Insert start key value =
let rec inner current withNode =
match current with
| Data (currentKey, currentValue, left, right) ->
if key < currentKey then
inner left (fun left -> Data (currentKey, currentValue, left, right))
else
inner right (fun right -> Data (currentKey, currentValue, left, right))
| Leaf -> withNode (Data (key, value, Leaf, Leaf))
inner start (fun x -> x)

如果你想坚持使用不可变的结构,消除副本会有点困难

关于f# - F# 中的不可变 Trie 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5395821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com