휴일 동안 내 가족은 Boggle 게임을 좋아합니다. 문제는, 나는 Boggle에게 끔찍합니다. 그래서 나는 훌륭한 프로그래머가 할 일을했습니다. 나를 위해 게임 할 프로그램을 썼습니다.Erlang :이 trie 구현에서 가장 잘못된 점은 무엇입니까?
알고리즘의 핵심 부분은 단순한 prefix trie입니다. 각 노드는 다음 문자에 대한 참조로 dict
입니다. 당신이 (바닥에) 사용되는 방법의 예와 함께, 나머지를 볼 수 있습니다
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).
그리고, 여기 :
이
은trie:add
구현
이제 Erlang에서 처음으로 진지한 프로그램이되었는데, 아마 거기에는 여러 가지 문제가 있다는 것을 알고 있습니다 ...하지만 내 immediat 걱정거리는 RAM의 800 메가 바이트을 사용한다는 것입니다.
그래서 내가 가장 잘못하고있는 것은 무엇입니까? 어떻게 조금 덜 잘못 만들 수 있습니까?
하. 몇 년 전에 PHP에서 그렇게했습니다. – gahooa
입력 단어 목록의 크기는 어느 정도입니까? – Zed
내 단어 목록은 200,000 단어 (또는 2.5 megs)입니다. –