Построение префикса Trie в C ++, суффикс Trie

Я использовал видео чтобы понять префиксный три (хотя в конце концов я пытаюсь добраться до трифона с суффиксом), однако ссылка на пример кода не работает, поэтому я пришел к этому из видео, есть две функции: вставка и поиск, как показано ниже

  void insert(string word)
{
node* current=head;
current->prefix_count++;
for(unsigned int i=0;i<word.length();++i)
{
int letter=(int)word[i]-(int)'a';
if (current->child[letter]==NULL)
current->child[letter]=new node();
current->child[letter]->prefix_count++;
current=current->child[letter];
}
current->is_end=true;
}

bool search(string word)
{
node *current=head;
for(int i=0;i<word.length();++i)
{
if(current->child[((int)word[i]-(int)'a')]==NULL)
return false;
current=current->child[((int)word[i]-(int)'a')];
}
return current->is_end;
}

Затем реализовано основное следующим образом:

int main(){
node* head=NULL;

string s="abbaa";
init();
insert(s);
if(search("ab")==true) cout<<"Found"<<endl;
else cout<<"Not found"<<endl;

}

И я получаю следующий вывод: не найден

Это сбивает с толку, так как ab находится в строке s.

И, наконец, я пытаюсь понять эту строку:

int letter=(int)word[i]-(int)'a';

Означает ли это, что мы получаем код ASCII для «а», а затем вычитаем из кода ASCII текущего символа?

Спасибо

1

Решение

Есть некоторая разница между суффиксами и деревьями префиксов.

Префиксное дерево — это дерево, которое содержит все слова (или некоторые другие куски, разделенные некоторым символом) из данного текста. Например. для текста «у вас есть текст» дерево префиксов содержит 4 слова: [«вы», «иметь», «а», «текст»] (но не «hav»).

Суффикс дерево — это префиксное дерево, который содержит все суффиксы из данного слова. Например. для строки «abacaba» дерево суффиксов содержит 7 слов: [«abacaba», «bacaba», «acaba», «caba», «aba», «ab», «a»]].

Наивная реализация дерева суффиксов основана на реализации дерева префиксов, которая заполняется всеми подстроками некоторой входной строки в O (N ^ 2) (поэтому в вашем коде вы должны вставить все суффиксы строки S в Trie), но вы можете найти умнее Алгоритм Укконена который работает в линейном времени.

Обычно дерево префиксов используется, когда вы хотите найти слово (например, из некоторого словаря и т. Д.) В тексте; дерево суффиксов, используемое для поиска некоторого шаблона в качестве подстроки текста.

Таким образом, вы должны выбрать, какое дерево вам нужно, в зависимости от вашей проблемы.

И да, вы правы в своем последнем вопросе.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]