我需要为我的webapp提供一个大约200k字的单词列表文件,我想显示单词,这些单词以某个子字符串开头,例如:'clo'。我应该将它存储在数据库中,并通过简单的查询访问它吗?我考虑过从这个wordlist创建一个树并将其存储在缓存中,然后只搜索这个树以找到合适的单词。在我的观点中,这应该是更好的解决方案,特别是当涉及每分钟更多的请求时。 你会如何以最有效的方式解决这个问题?
答案 0 :(得分:1)
我会选择trie;我已经在C ++中为Ruzzle-solver程序实现了这样的解决方案,我可以确认它非常高效 - 尽管在Python中你肯定会因为Python的等效性而变得更差像这样的特里节点:
class AlphaTrie
{
// Pointers for the next trie nodes
std::auto_ptr<AlphaTrie> next[26];
// true if the current node marks the end of a word
bool final;
// ...
};
将包含较少的简单数据结构(例如,访问Python列表比直接存储在节点中的“哑”C数组慢),因此具有更大的开销。