Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/19/17 18:47:00 (7 years ago)
Author:
gkronber
Message:

#2700: made some changes while reviewing the code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/TSNE/HeuristicLab.Algorithms.DataAnalysis/3.4/TSNE/PriorityQueue.cs

    r14414 r14767  
    2929  // implementation based on C++ version from Peter Sanders
    3030  // http://www.mpi-inf.mpg.de/~sanders/programs/spq/
    31   public sealed class PriorityQueue<TK, TV> : IHeap<TK, TV> where TK : IComparable {
     31  public sealed class PriorityQueue<TK, TV> where TK : IComparable {
    3232    private class KNElement {
    3333      public TK Key { get; set; }
     
    3535    }
    3636
    37     private int capacity;
     37    private readonly int capacity;
    3838    private int size; // index of last used element
    3939    private int finalLayerSize; // size of first layer with free space
    4040    private int finalLayerDist; // distance to end of layer
    4141                                //private KNElement[] rawData;
    42     private KNElement[] data;    // alligned version of rawData
     42    private readonly KNElement[] data;    // aligned version of rawData
    4343
    4444    public PriorityQueue(TK supremum, TK infimum, int cap) {
     
    5353    }
    5454
    55     public int Size
    56     {
     55    public int Size {
    5756      get { return size; }
    5857    }
    5958
    60     public TK Supremum
    61     {
     59    public TK Supremum {
    6260      get { return data[capacity + 1].Key; }
    6361    }
    6462
    6563    public KeyValuePair<TK, TV> PeekMin() {
    66       if (size == 0) {
     64      if(size == 0) {
    6765        throw new InvalidOperationException("Heap is empty");
    6866      }
     
    8785      size = sz - 1;
    8886      finalLayerDist++;
    89       if (finalLayerDist == finalLayerSize) {
     87      if(finalLayerDist == finalLayerSize) {
    9088        finalLayerSize >>= 2;
    9189        finalLayerDist = 0;
    9290      }
    9391
    94       while (succ < sz) {
     92      while(succ < sz) {
    9593        var minKey = data[succ].Key;
    9694        var delta = 0;
    9795
    9896        var otherKey = data[succ + 1].Key;
    99         if (otherKey.CompareTo(minKey) < 0) {
     97        if(otherKey.CompareTo(minKey) < 0) {
    10098          minKey = otherKey;
    10199          delta = 1;
    102100        }
    103101        otherKey = data[succ + 2].Key;
    104         if (otherKey.CompareTo(minKey) < 0) {
     102        if(otherKey.CompareTo(minKey) < 0) {
    105103          minKey = otherKey;
    106104          delta = 2;
    107105        }
    108106        otherKey = data[succ + 3].Key;
    109         if (otherKey.CompareTo(minKey) < 0) {
     107        if(otherKey.CompareTo(minKey) < 0) {
    110108          minKey = otherKey;
    111109          delta = 3;
     
    137135      pred = pred - layerDist; // finally preds index
    138136
    139       while (data[pred].Key.CompareTo(bubble) > 0) {  // must terminate since inf at root
     137      while(data[pred].Key.CompareTo(bubble) > 0) {  // must terminate since inf at root
    140138        data[hole].Key = data[pred].Key;
    141139        data[hole].Value = data[pred].Value;
     
    159157      finalLayerDist--;
    160158
    161       if (finalLayerDist == -1) { // layer full
    162                                   // start next layer
     159      if(finalLayerDist == -1) { // layer full
     160                                 // start next layer
    163161        finalLayerSize <<= 2;
    164162        finalLayerDist = finalLayerSize - 1;
     
    173171      pred = pred - layerDist; // finally preds index
    174172      var predKey = data[pred].Key;
    175       while (predKey.CompareTo(key) > 0) {
     173      while(predKey.CompareTo(key) > 0) {
    176174        data[hole].Key = predKey;
    177175        data[hole].Value = data[pred].Value;
     
    196194      var sup = Supremum;
    197195      var cap = capacity;
    198       for (var i = 1; i <= cap; i++) {
     196      for(var i = 1; i <= cap; i++) {
    199197        data[i].Key = sup;
    200198      }
Note: See TracChangeset for help on using the changeset viewer.