25 Nisan 2018 Çarşamba

heap

d_ary_heap Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/heap/d_ary_heap.hpp> 
Constructor
Şöyle yaparız.
using NodeID     = std::uint32_t; 
using EdgeWeight = std::int32_t; 
using HeapData   = std::pair<EdgeWeight, NodeID>; 

using HeapContainer = boost::heap::d_ary_heap< 
        HeapData, 
        boost::heap::arity<4>, 
        boost::heap::mutable_<true>, 
        boost::heap::compare<std::greater<HeapData>>>; 

using HandleType = HeapContainer::handle_type; 


HeapContainer heap; 
push metodu
Şöyle yaparız.
auto const none   = heap.s_handle_from_iterator(heap.end());
auto const handle = heap.push(std::make_pair(100, 1)); 
assert(handle != none);

fibonacci_heap Sınıfı
Giriş
Şu satırı dahil ederiz
#include <boost/heap/fibonacci_heap.hpp>
Constructor - type + comparator
En küçük elemanı top() ile almak için > karşılaştırması yaparız. Şöyle yaparız.
struct rnn
{
  float distance;
  int a, b;

  rnn(int a, int b, float dist) : a(a), b(b), distance(dist) { }
};

struct compare_nn
{
  //for min heap implementation
  bool operator()(const rnn& a, const rnn& b) const
  {
    return a.distance > b.distance;
  }
};

boost::heap::fibonacci_heap<rnn, boost::heap::compare<compare_nn>> heap;
pop metodu
Şöyle yaparız.
heap.pop();
push metodu
Örnek
Şöyle yaparız.
fibonacci_heap<int> heap;

heap.push(0);
heap.push(1);
heap.push(3);
heap.push(2);
Örnek
Şöyle yaparız.
heap.push(rnn(1, 2, 10))
top metodu
Şöyle yaparız.
cout << "Min node: " << heap.top().a << endl;

pairing_heap Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/heap/pairing_heap.hpp>
Constructor
En büyük elemanı top() ile almak için şöyle yaparız.
pairing_heap<float> pq;
erase metodu
Şöyle yaparız.
auto handle = pq.push(3.1);
pq.erase(handle); // remove an element by handle
push metodu
Şöyle yaparız.
auto handle = pq.push(3.1);
s_handle_from_iterator metodu
Şöyle yaparız.
using Heap = boost::heap::pairing_heap<float>;
Heap pq;
...
pq.update(Heap::s_handle_from_iterator(pq.begin()), pq.top()*2);
top metodu
Şöyle yaparız.
cout << "pq top=" << pq.top() << endl; // a const_reference to the max element.

Hiç yorum yok:

Yorum Gönder