From 26b6d5e74ee5f4899effcbcf6d8f0c8c32125698 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 3 Jan 2017 10:33:37 +0100 Subject: [PATCH] fix construction of suffix trie --- alib2algo/src/stringology/indexing/SuffixTrieNaive.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/alib2algo/src/stringology/indexing/SuffixTrieNaive.h b/alib2algo/src/stringology/indexing/SuffixTrieNaive.h index 557cf3df44..fe2e6ffaae 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 ); -- GitLab