您如何遍历C中O(n)时间的特里。我想到做一个for循环,如果匹配到一个字母,则通过1级搜索根链表,然后搜索该链表,但会给我n ^ 2次有什么办法可以加快速度吗?

谢谢!

最佳答案

“ O(n)”中使用的“ n”是什么?如果n表示搜索字符串中的字符数,则可以在O(n)时间执行以下代码。

/* structure of Trie node */
struct trieNode {
   char *value;
   childNode children();
   int childCount;
}

/* structure for childnode in a Trie node. Whichi contains 'key' and pointer to child node */
struct childNode {
   char key;
   trieNode *node;
}


/* setup Trie and search string. (not real code) */
trieNode root=createTrinode(...) ; /* Setup Trie of your problem. */
char* searchString = inputSearchString(...); /* get string for search */

int i;
trieNode curNode;

curNode = root;
for i=0 to len(searchString)-1
{
    curNode = findChildren(curNode,searchString(i)); /* findChildren function returns childnode of first argument, whose key is equal to second argument.  (Code of findChildren is omitted) */
}

/* curNode is the traversed leaf node by  searchStrin */


for循环的索引为0到n(searchString的长度)-1,因此此代码可能执行jn O(n)次。

此代码不考虑给定Trie中不包含serach-string的情况。

关于c - 在C中的O(N)中搜索Trie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26209020/

10-11 16:09