Exemplo n.º 1
0
 // This function applies a strategy when the stored needed tile number equals to the current value of it
 // where we would like to have tiles (multiple of server number) which are close to delta.
 // This strategy will be prosperous for the next phase where the obtained tiles are divided between servers.
 private void applyMinDiffSumStrategy(int[] indicesArray, ref Coords[] partition, 
     ref int neededTileNumber, Coords[] firstPartPartition, Coords[] secondPartPartition, int currentTileNO)
 {
     if (currentTileNO < neededTileNumber)
     {
         neededTileNumber = currentTileNO;
         partition = new Coords[neededTileNumber];
         firstPartPartition.CopyTo(partition, 0);
         secondPartPartition.CopyTo(partition, firstPartPartition.Length);
         partitionArray.SetValue(partition, indicesArray);
         // when the needed tile number is decreased we should set the current value
         // to current indices array
         if (neededTileNumber >= serverNO)
         {
             double currentDiffSum = determineCurrentDiffSum(neededTileNumber,
             firstPartPartition, secondPartPartition);
             diffSumArray.SetValue(currentDiffSum, indicesArray);
         }
     }
     else if ((currentTileNO == neededTileNumber) && (neededTileNumber >= serverNO))
     {
         double currentDiffSum = determineCurrentDiffSum(neededTileNumber, firstPartPartition, secondPartPartition);
         double diffSum = (double)diffSumArray.GetValue(indicesArray);
         if (currentDiffSum < diffSum)
         {
             diffSumArray.SetValue(currentDiffSum, indicesArray);
             partition = new Coords[neededTileNumber];
             firstPartPartition.CopyTo(partition, 0);
             secondPartPartition.CopyTo(partition, firstPartPartition.Length);
             partitionArray.SetValue(partition, indicesArray);
         }
     }
 }
Exemplo n.º 2
0
 private void applySideDifferenceStrategy(int[] indicesArray, ref Coords[] partition,
     ref int neededTileNumber, Coords[] firstPartPartition, Coords[] secondPartPartition, int currentTileNO,
     int[] firstPartIndicesArray, int[] secondPartIndicesArray, int splitDimIdx, int[] movingIndicesArray)
 {
     if (currentTileNO < neededTileNumber)
     {
         neededTileNumber = currentTileNO;
         partition = new Coords[neededTileNumber];
         firstPartPartition.CopyTo(partition, 0);
         secondPartPartition.CopyTo(partition, firstPartPartition.Length);
         partitionArray.SetValue(partition, indicesArray);
     }
     else if (currentTileNO == neededTileNumber)
     {
         double currentDiff = determineCurrentDiffOfSides(splitDimIdx, indicesArray, movingIndicesArray);
         double maxDiff = (double)maxDiffArray.GetValue(indicesArray);
         if (maxDiff < currentDiff)
         {
             maxDiffArray.SetValue(currentDiff, indicesArray);
             partition = new Coords[neededTileNumber];
             firstPartPartition.CopyTo(partition, 0);
             secondPartPartition.CopyTo(partition, firstPartPartition.Length);
             partitionArray.SetValue(partition, indicesArray);
         }
     }
 }