Что такое «n», которое используется в «O (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 */
индекс для цикла составляет от 0 до п (длина SearchString) -1, так что этот код может выполнить Jn O (N) времени.
Этот код не учитывает случай, когда serach-string не содержится в данном Trie.
Trie? Дерево? который из ? – chouaib
Поскольку OP перечислял его как в заголовке, так и в вопросе, я думаю, что безопасно сказать trie, поскольку он более специфичен для типа рассматриваемого дерева. – polarysekt
@chouaib Я занимаюсь Trie! – coder101