在假期里,我的家人喜欢玩 Boggle。问题是,我在 Boggle 上很糟糕。所以我做了任何优秀程序员都会做的事:写一个程序来为我玩。
该算法的核心是一个简单的前缀树,其中每个节点都是dict对下一个字母的引用。
这是trie:add实现:
添加([],特里)->
dict:store(stop, true, Trie);
添加([Ch|Rest],特里)->
% setdefault(键,默认值,字典)->
% case dict:find(Key, Dict) of
% { ok, Val } -> { 字典, Val }
% 错误 -> { dict:new(), Default }
% 结尾。
{ NewTrie, SubTrie } = setdefault(Ch, dict:new(), Trie),
NewSubTrie = add(Rest, SubTrie),
字典:商店(Ch,NewSubTrie,NewTrie)。
您可以在此处查看其余部分以及如何使用它的示例(在底部):
现在,这是我在 Erlang 中的第一个严肃程序,我知道它可能有很多问题……但我最关心的是它使用了800 MB 的 RAM。
那么,我做错了什么?我怎样才能让它少一点错误呢?