Problem mit Binary Heap



  • Hi Leute!

    Ich hab mal etwas mit einem "Binary Heap" rumgespielt. Das Problem ist, das auf (Array) Position [0] nicht immer der kleinste Wert steht (Wie es aber eigentlich sein sollte). Woran liegt das ? Müssen in einem "BinHeap" alle eingefügten Elemente verschieden sein ? (Dürfen die selben Werte mehrmals vorkommen ?)

    Hier ist der Source zum Einfügen, Sortieren und Auslesen des Heap:

    #define PARENT(i) ((i-1)/2)
    #define LEFT(i)   (2*(i)+1)
    #define RIGHT(i)  (2*(i)+2)
    
    type heap[MAXN];
    int heapsize=0;
    
    void heapify (int i) // Ein Element auf die Richtige Position bringen (quasi sortieren)
    {
      int l,r,smallest;
      type tmp;
    
      l = LEFT(i);
      r = RIGHT(i);
      smallest = l<heapsize && less(heap[l],heap[i]) ? l : i;
      if (r<heapsize && less(heap[r],heap[smallest])) smallest = r;
      if (smallest!=i)
        {
          tmp=heap[i]; heap[i]=heap[smallest]; heap[smallest]=tmp;
          heapify(smallest);
        }
    }
    
    void insert (type x) // Ein Element einfügen
    {
      int i = heapsize++;
      while (i>0 && less(x,heap[PARENT(i)]))
        {
          heap[i] = heap[PARENT(i)];
          i = PARENT(i);
        }
      heap[i] = x;
    }
    
    type minimum() // Kleinstes Element holen
    { 
       return heap[0]; 
    }
    
    type extract_min() // Kleinstes Element zurückgeben und dann rausschmeissen
    {
      type min;
    
      assert(heapsize>=1);  
      min = heap[0];
      heap[0] = heap[--heapsize];
      heapify(0);
      return min;
    }
    

Anmelden zum Antworten