Advertisement
bogdb

Untitled

Apr 25th, 2018
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.05 KB | None | 0 0
  1. int count = trees.Count;
  2. var sim = new TriangularMatrix<double>(count);
  3. var partitioner = Partitioner.Create(0, sim.Length);
  4. var locker = new object();
  5. var calculated = 0;
  6. Parallel.ForEach(partitioner, new ParallelOptions { MaxDegreeOfParallelism = 4 }, (range, loop) =>
  7. {
  8.     var calc = new SymbolicExpressionTreeBottomUpSimilarityCalculator();
  9.     int startRow, endRow, startCol, endCol;
  10.    
  11.     sim.GetMatrixCoordinates(range.Item1, out startRow, out startCol);
  12.     sim.GetMatrixCoordinates(range.Item2 - 1, out endRow, out endCol);
  13.    
  14.     for (int i = startRow; i <= endRow; ++i) {
  15.         var start = i == startRow ? startCol : 0;
  16.         var end = i == endRow ? endCol : i;
  17.                
  18.         for (int j = start; j <= end; ++j) {
  19.             var s = i == j ? 1 : calc.CalculateSimilarity(trees[i], trees[j]);
  20.             sim[i, j] = 1 - s;
  21.         }                    
  22.     }
  23.     lock (locker) {
  24.         calculated += range.Item2 - range.Item1;
  25.         Console.WriteLine("{0} / {1} calculated", calculated, sim.Length);                
  26.     }
  27. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement