[Olsr-dev] Improving SPF with binary heaps

Ferry Huberts (spam-protected)
Mon Jul 13 18:08:46 CEST 2015


Be aware that olsrd runs on many many platforms, including very small 
embedded ones.

Doing a 1/x is very much not preferred for lack of floating point 
hardware on those platforms.
Try to stick to integer math where possible.

On 13/07/15 18:01, Saulo Queiroz wrote:
> Yes,
> something like 1/priority_value (for instance) might work.
>
> On 13 July 2015 at 03:12, Henning Rogge <(spam-protected)
> <mailto:(spam-protected)>> wrote:
>
>     Hi,
>
>     just that I understand it right... you can normally only access "one
>     end" of the PQ easily... so if you want to get a "maximum queue" you
>     need some code-change... or you just have to negate the key before
>     inserting an element.
>
>     Henning
>
>     On Sun, Jul 12, 2015 at 2:56 PM, Saulo Queiroz
>     <(spam-protected) <mailto:(spam-protected)>> wrote:
>      > Yes with a little remark to functions of type first/last. We have
>     two kinds
>      > o PQs: MINimum and MAXimum. In min PQs, item priority means being
>     associated
>      > to low values (case of Dijkstra). In this case, get_first would
>     return the
>      > item with lowest number but get_last doesn't make sense. Similar
>     situation
>      > happens for max priority queues.
>      > ....
>      >
>      > the lower the priority number associated
>      >
>      > Em 12/07/2015 04:26, "Henning Rogge" <(spam-protected)
>     <mailto:(spam-protected)>> escreveu:
>      >>
>      >> On Sun, Jul 12, 2015 at 3:48 AM, Saulo Queiroz
>     <(spam-protected) <mailto:(spam-protected)>>
>      >> wrote:
>      >> >> Basics for both lists and AVL trees in OONF (which is the base of
>      >> >> OLSRv2)
>      >> >> is
>      >> >> - init
>      >> >> - insert
>      >> >> - remove
>      >> >> - get(key)
>      >> >> - get_first
>      >> >> - get_last
>      >> >>
>      >> >> and a good way to iterate over the elements of the tree/list
>     (which
>      >> >> would enable me to write iterator macros like the ones in
>      >> >>
>      >> >>
>      >> >>
>     http://olsr.org/git/?p=oonf.git;a=blob;f=src-api/common/list.h;h=a6146dcc9eb4d70ef1c2ae32b382df0460d948b0;hb=master#l315
>      >> >> ).
>      >> >>
>      >> >> Can we have the same functions for a binary heap?
>      >> >
>      >> > It is possible but i think few procedures don't sound
>     reasonable because
>      >> > binary heaps
>      >> > are Priority Queues (PQs) by nature being different from the
>     typical
>      >> > data
>      >> > structures.
>      >> > In general, one employs priority queues when all items are
>     expected to
>      >> > leave
>      >> > the structure until the end of the execution of a procedure
>     (what is
>      >> > very
>      >> > usual in the so-called "greedy algorithms" like Dijkstra). In
>     "normal"
>      >> > data
>      >> > structures, there is no problem if an item stay in the structure
>      >> > "forever".
>      >>
>      >> Okay,
>      >>
>      >> so its more like
>      >>
>      >> - insert
>      >> - remove first/last
>      >> - get first/last
>      >>
>      >> Maybe even with get and remove combined into the same function, so
>      >> that you can get the first/last element of the heap and remove it.
>      >>
>      >> Does this make more sense?
>      >>
>      >> Henning
>
>
>
>
> --
> Saulo Jorge bq
> -
> "In theory, there is no difference between practice and theory, in
> practice there is"
> -- Someone
>
>

-- 
Ferry Huberts




More information about the Olsr-dev mailing list