C ++ Trie搜索性能

时间:2012-03-01 02:06:21

标签: c++ performance search trie

所以我制作了一个包含大量数据的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;
}

2 个答案:

答案 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)