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