【发布时间】:2011-01-04 09:15:14
【问题描述】:
在假期里,我的家人喜欢玩 Boggle。问题是,我在 Boggle 上很糟糕。所以我做了任何优秀程序员都会做的事:写一个程序来为我玩。
算法的核心是一个简单的prefix trie,其中每个节点都是一个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),
dict:store(Ch, NewSubTrie, NewTrie).
您可以在此处查看其余部分以及如何使用它的示例(在底部):
现在,这是我在 Erlang 中的第一个严肃程序,我知道它可能有很多问题……但我最关心的是它使用 800 兆字节的 RAM。
那么,我做错了什么?我怎样才能让它少一点错误?
【问题讨论】:
-
哈。几年前我在 PHP 中做过。
-
你输入的单词列表有多大?
-
我的单词列表是 200,000 个单词(或 2.5 兆)。