Trong những ngày nghỉ, gia đình tôi rất thích chơi Boggle. Vấn đề là, tôi khủng khiếp ở Boggle. Vì vậy, tôi đã làm những gì bất kỳ lập trình viên tốt sẽ làm: đã viết một chương trình để chơi cho tôi.Erlang: Điều gì là sai nhất với việc thực hiện trie này?
Tại lõi của thuật toán là một đơn giản prefix trie, trong đó mỗi nút là một tham chiếu dict
của các chữ cái tiếp theo.
này là việc thực hiện 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).
Và bạn có thể xem phần còn lại, cùng với một ví dụ về cách nó được sử dụng (ở phía dưới), ở đây:
Bây giờ, đây là chương trình nghiêm túc đầu tiên của tôi ở Erlang, tôi biết có lẽ có nhiều điều sai trái với nó… Nhưng e quan tâm là nó sử dụng 800 megabyte RAM.
Vì vậy, tôi đang làm gì sai nhất? Và làm thế nào tôi có thể làm cho nó một chút ít sai?
Ha. Tôi đã làm điều đó trong PHP một vài năm trước đây. – gahooa
Danh sách từ đầu vào của bạn lớn đến mức nào? – Zed
Danh sách từ của tôi là 200.000 từ (hoặc 2,5 meg). –