В праздничные дни моя семья любит играть в Boggle. Проблема в том, что я ужасен в Боггле. Поэтому я сделал то, что сделал бы любой хороший программист: написал программу для меня.
В основе алгоритма лежит простой префикс trie , где каждый узел представляет собой dict
ссылок на следующие буквы.
Это реализация trie:add
:
add([], Trie) ->
dict:store(stop, true, Trie);
add([Ch|Rest], Trie) ->
% setdefault(Key, Default, Dict) ->
% case dict:find(Key, Dict) of
% { ok, Val } -> { Dict, Val }
% error -> { dict:new(), Default }
% end.
{ NewTrie, SubTrie } = setdefault(Ch, dict:new(), Trie),
NewSubTrie = add(Rest, SubTrie),
dict:store(Ch, NewSubTrie, NewTrie).
И остальное, а также пример его использования (внизу) можно посмотреть здесь:
http://gist.github.com/263513
Теперь, это моя первая серьезная программа на Эрланге, и я знаю, что с ней, вероятно, что-то не так… Но меня беспокоит то, что она использует 800 мегабайт оперативной памяти .
Итак, что я делаю больше всего неправильно? И как я могу сделать это немного менее неправильно?