diff --git a/alib2algo/src/stringology/indexing/SuffixTrieNaive.h b/alib2algo/src/stringology/indexing/SuffixTrieNaive.h index 557cf3df44aaf3e37dc569c47c6bec14b6440f09..fe2e6ffaae8a0dcf2ef0cf425297edcd40bd4da6 100644 --- a/alib2algo/src/stringology/indexing/SuffixTrieNaive.h +++ b/alib2algo/src/stringology/indexing/SuffixTrieNaive.h @@ -39,11 +39,11 @@ public: template < class SymbolType > indexes::SuffixTrie < SymbolType, unsigned > SuffixTrieNaive::construct ( const string::LinearString < SymbolType > & w ) { - std::trie < SymbolType, std::variant < void, unsigned > > trie ( std::variant < void, unsigned >::from < void > ( ) ); - std::set < unsigned > nodeAlphabet; + std::trie < SymbolType, std::variant < void, unsigned > > trie ( std::variant < void, unsigned > ( ( unsigned ) w.getContent ( ).size ( ) ) ); + std::set < unsigned > nodeAlphabet = { ( unsigned ) w.getContent ( ).size ( ) }; - for ( unsigned i = 0; i < w.getContent ( ).size ( ); i++ ) { - unsigned k = i; + for ( unsigned i = w.getContent ( ).size ( ); i > 0; i-- ) { + unsigned k = i - 1; std::trie < SymbolType, std::variant < void, unsigned > > * n = & trie; // inlined slow_find_one from MI-EVY lectures @@ -51,11 +51,11 @@ indexes::SuffixTrie < SymbolType, unsigned > SuffixTrieNaive::construct ( const n = & n->getChildren ( ).find ( w.getContent ( )[k++] )->second; for ( ; k < w.getContent ( ).size ( ); k++ ) { - std::variant < void, unsigned > node = k + 1 < w.getContent ( ).size ( ) ? std::variant < void, unsigned >::from < void > ( ) : std::variant < void, unsigned > ( i ); + std::variant < void, unsigned > node = k + 1 < w.getContent ( ).size ( ) ? std::variant < void, unsigned >::from < void > ( ) : std::variant < void, unsigned > ( i - 1 ); n = & n->getChildren ( ).insert ( std::make_pair ( w.getContent ( )[k], std::trie < SymbolType, std::variant < void, unsigned > > ( node ) ) ).first->second; } - nodeAlphabet.insert ( i ); + nodeAlphabet.insert ( i - 1 ); } return indexes::SuffixTrie < SymbolType, unsigned > ( w.getAlphabet ( ), nodeAlphabet, trie );