Durante las vacaciones, a mi familia le encanta jugar Boggle. El problema es que soy terrible en Boggle. Así que hice lo que cualquier buen programador haría: escribió un programa para tocar para mí.Erlang: ¿Qué hay de malo en esta implementación?
En el núcleo del algoritmo es un simple prefix trie, donde cada nodo es un dict
de referencias a las siguientes letras.
Este es el trie:add
aplicación:
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).
Y se puede ver el resto, junto con un ejemplo de cómo se utiliza (en el fondo), aquí:
Ahora que este es mi primer programa serio en Erlang, sé que probablemente hay un montón de cosas mal con eso ... Pero mi immediat La preocupación es que usa 800 megabytes de RAM.
Entonces, ¿qué estoy haciendo más mal? ¿Y cómo podría hacerlo un poco menos mal?
Ha. Lo hice en PHP hace unos años. – gahooa
¿Cuán grande es tu lista de palabras de entrada? – Zed
Mi lista de palabras es de 200,000 palabras (o 2.5 megas). –