所以我制作了一个包含大量数据的trie,我的搜索算法非常快,但我想知道是否有人能够更快地了解如何使它更快。
bool search (string word)
{
int wordLength = word.length();
node *current = head;
for (unsigned int i=0; i<wordLength; ++i)
{
if (current->child[((int)word[i]+(int)'a')] == NULL)
return false;
else
current = current->child[((int)word[i]+(int)'a')];
}
return current->is_end;
}
答案 0 :(得分:2)
除了这些花絮之外,性能看起来很好:
const string&
(而不仅仅是string
),以避免不必要的复制。current->child[((int)word[i]+(int)'a')]
前面提取公共子表达式if
,以避免重复并使代码略微缩小,但任何有价值的编译器都会为您进行优化。“风格”建议:
word
包含“a”下面的字符(例如大写字母,数字,标点符号,换行等等),该怎么办?您需要验证输入以避免访问错误的内存位置并崩溃。也不应该是-(int)'a'
而不是+
(我假设您只想支持一组有限的字符:'a'及以上)?wordLength
声明为size_t
(或者更好auto
),但这对于任何实际长度的字符串都不重要(如果size_t
可能会略微影响性能大于int
)。同上i
。答案 1 :(得分:0)
bool search (string word)
调用此函数,将复制字符串word
,
下面的函数类型会更快。
bool search (const string &word)
或
bool search (const char *word)