Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/11/15 11:32:13 (10 years ago)
Author:
bburlacu
Message:

#2313:

  • Order nodes in the first tree by decreasing depth when doing the mapping (after the two trees have already been compacted into a directed acyclic graph and the isomorphic subtrees have already been identified).
  • Update unit test with the test case that helped identify this bug
  • Minor changes: rename Label method to GetLabel and make it static, update year in license header
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeMatching/SymbolicExpressionTreeBottomUpSimilarityCalculator.cs

    r11950 r11978  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    8181
    8282      // visit nodes in order of decreasing height to ensure correct mapping
    83       var nodes1 = n1.IterateNodesPrefix().ToList();
     83      var nodes1 = n1.IterateNodesPrefix().OrderByDescending(x => x.GetDepth()).ToList();
    8484      var nodes2 = n2.IterateNodesPrefix().ToList();
    8585      for (int i = 0; i < nodes1.Count; ++i) {
     
    9898        if (w == null) continue;
    9999
    100         // at this point we know that v and w are isomorphic, however, the mapping cannot be done directly (as in the paper) because the trees are unordered (subtree order might differ)
    101         // the solution is to sort subtrees by label using IterateBreadthOrdered (this will work because the subtrees are isomorphic!) and simultaneously iterate over the two subtrees
     100        // at this point we know that v and w are isomorphic, however, the mapping cannot be done directly
     101        // (as in the paper) because the trees are unordered (subtree order might differ). the solution is
     102        // to sort subtrees from under commutative labels (this will work because the subtrees are isomorphic!)
     103        // while iterating over the two subtrees
    102104        var vv = IterateBreadthOrdered(v, comparer).ToList();
    103105        var ww = IterateBreadthOrdered(w, comparer).ToList();
     
    133135      foreach (var n in nodes) {
    134136        if (n.SubtreeCount == 0) {
    135           var label = Label(n);
     137          var label = GetLabel(n);
    136138          if (!labelMap.ContainsKey(label)) {
    137139            var z = new GraphNode { SymbolicExpressionTreeNode = n, Label = label };
     
    209211    }
    210212
    211     private string Label(ISymbolicExpressionTreeNode node) {
     213    private static string GetLabel(ISymbolicExpressionTreeNode node) {
    212214      if (node.SubtreeCount > 0)
    213215        return node.Symbol.Name;
Note: See TracChangeset for help on using the changeset viewer.