创建词典树的复杂性是什么?

时间:2009-10-17 03:11:14

标签: algorithm

创建词典树的复杂性是什么?

4 个答案:

答案 0 :(得分:2)

如果您从输入中创建prefix tree,则可以在固定时间内执行此查询。

修改

查询在搜索字符串的长度上是线性的。我的意思是它在单词列表的大小上是不变的。

答案 1 :(得分:1)

适当的数据结构可能是一个排序列表。在这种情况下,这将成为二分搜索问题,因此O(log n)。

答案 2 :(得分:0)

正如Gabe上面提到的,Trie是一个很好的解决方案,但对于拥有大量单词的词典来说,实现起来有点困难。如果O(n log n)算法适合您,您可以使用二进制搜索解决此问题。这是用C编写的代码:

char dict[n][m]; // where n is number of words in dictionary and 
                 // m is maximum possible length of word
char word[m];    // it's your word

int l = -1, r = n;
while(l+1 < r) {
  int k = (l+r)/2;
  if(strcmp(dict[k], word) < 0) l = k;
  else r = k;
}

int len = strlen(word);
l++; // first word's index with greater or equal prefix then word is l+1
bool matches = (strlen(word[l]) >= len);
for(int i = 0; i < len && matches; i++) {
  if(word[i] != dict[l][i]) {
    matches = 0;
  }
}

if(matches) {
  printf("given word is prefix of %dth word.", l);
} else {
  printf("given word isn't in dictinary.");
}

答案 3 :(得分:-2)

只需使用一个简单的循环运行,并检查每个单词是否以任何内容开头。

在几乎所有语言中都有一个内置函数,用于检查一个字符串是否以另一个字符串开头。

复杂度为O(log n),而n是字典中单词的数量。