I wouldn't restrict the weight to Comparable.  What if the user wanted to
provide their own Comparator?
On Dec 11, 2011 7:07 PM, "Claudio Squarcella" <squar...@dia.uniroma3.it>
wrote:

> Hi all,
>
> I explored a bit more the (rather philosophical) dilemma that came from a
> thread from last week, quoted below
>
>> One step further. A weight is not necessarily a double: in some cases not
>> even a number, but rather a "comparable" of some sort. So I would suggest
>> to make use of generics in some way, possibly the smartest. Suggestions are
>> welcome :-)
>>
>
> The question is: *what do we mean by weight when dealing with graphs?*
>
> "Real number" is a standard answer in graph theory: see, e.g.,
> http://www.math.jussieu.fr/~**jabondy/books/gtwa/pdf/**chapter1.pdf<http://www.math.jussieu.fr/~jabondy/books/gtwa/pdf/chapter1.pdf>(pag.
>  15). What we have now in the code is a {{getWeight()}} method that
> returns a double. That serves well for all the algorithms currently
> implemented, and probably for many more to come. However it is also true
> that:
>
>  * some domains of interest and/or algorithms might be more restrictive
>   on the type and sign of "real number" for the weights: integers,
>   non-negative rationals, etc.
>  * strictly speaking, the basic operations associated with weights are
>   usually just a few. Comparison and sum are enough at least for the
>   algorithms implemented so far in the project (please correct me if I
>   am wrong). Maybe scaling? Additive inverse?
>  * each algorithm is aware of the subset of required operations. E.g.
>   Prim's algorithm for minimum spanning trees only requires edge
>   weights to be comparable, so they could even be Strings or whatever...
>  * some very abstract user might want to use a new class (not
>   necessarily a number) as a weight, provided that it meets the
>   requirements of the domain.
>
> So here is a high-level view of what I propose:
>
>  * the basic weight is nothing more than a {{Comparable}}, which is
>   hopefully generic enough;
>  * where needed, algorithms define more specific constraints on the
>   input graph in their signature (e.g. Dijkstra can use {{Double}}).
>
>
> Looking forward for comments,
> Claudio
>
> --
> Claudio Squarcella
> PhD student at Roma Tre University
> E-mail address: squar...@dia.uniroma3.it
> Phone: +39-06-57333215
> Fax: +39-06-57333612
> http://www.dia.uniroma3.it/~**squarcel<http://www.dia.uniroma3.it/~squarcel>
>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> dev-unsubscribe@commons.**apache.org<dev-unsubscr...@commons.apache.org>
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to