Changeset 15734 for branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
- Timestamp:
- 02/07/18 17:30:02 (6 years ago)
- Location:
- branches/2886_SymRegGrammarEnumeration
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2886_SymRegGrammarEnumeration
-
Property
svn:ignore
set to
TestResults
-
Property
svn:ignore
set to
-
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
r15725 r15734 158 158 public int CalcHashCode(SymbolString sentence) { 159 159 Debug.Assert(sentence.Any(), "Trying to evaluate empty sentence!"); 160 Debug.Assert(sentence.All(s => s is TerminalSymbol), "Trying to evaluate symbol sequence with nonterminalsymbols!");161 162 Stack< TerminalSymbol> parseStack = new Stack<TerminalSymbol>(sentence.OfType<TerminalSymbol>());163 164 TerminalSymbol peek = parseStack.Peek();160 // Debug.Assert(sentence.All(s => s is TerminalSymbol), "Trying to evaluate symbol sequence with nonterminalsymbols!"); 161 162 Stack<Symbol> parseStack = new Stack<Symbol>(sentence); 163 164 Symbol peek = parseStack.Peek(); 165 165 int[] subtreeHashes = GetSubtreeHashes(parseStack); 166 166 return AggregateHashes(peek, subtreeHashes); 167 167 } 168 168 169 private int[] GetSubtreeHashes(Stack< TerminalSymbol> parseStack) {170 TerminalSymbol currentSymbol = parseStack.Pop();169 private int[] GetSubtreeHashes(Stack<Symbol> parseStack) { 170 Symbol currentSymbol = parseStack.Pop(); 171 171 172 172 // VARIABLE 173 if (Var.VariableTerminalSymbols.Contains(currentSymbol)) {174 return currentSymbol.StringRepresentation.GetHashCode().ToEnumerable().ToArray();175 }173 // if (Var.VariableTerminalSymbols.Contains(currentSymbol)) { 174 // return currentSymbol.StringRepresentation.GetHashCode().ToEnumerable().ToArray(); 175 // } 176 176 177 177 // MULTIPLICATION … … 220 220 return result.ToArray(); 221 221 } 222 throw new ArgumentException("Trying to hash malformed sentence!"); 223 } 224 225 private int AggregateHashes(TerminalSymbol rule, IEnumerable<int> hashes) { 222 223 // var 224 return currentSymbol.StringRepresentation.GetHashCode().ToEnumerable().ToArray(); 225 226 227 // throw new ArgumentException("Trying to hash malformed sentence!"); 228 } 229 230 private int AggregateHashes(Symbol operatorSym, IEnumerable<int> hashes) { 226 231 // If multiple subtrees are "merged" (e.g. added, multiplied, etc.), consider the executed operation 227 232 var hashesArray = hashes.ToArray(); 228 int start = hashesArray.Length > 1 ? rule.StringRepresentation.GetHashCode() : 0;233 int start = hashesArray.Length > 1 ? operatorSym.StringRepresentation.GetHashCode() : 0; 229 234 return hashesArray.Aggregate(start, (result, ti) => ((result << 5) + result) ^ ti.GetHashCode()); 230 235 }
Note: See TracChangeset
for help on using the changeset viewer.