Sorry, I was on my phone before when I sent that.  Let me elaborate a
bit more.  I would just allow the weights to be of any type.  However,
you can create two different types of scenarios where you either use a
Comparable derivative or you use whatever you want, but you have to
supply a custom Comparator.

On Sun, Dec 11, 2011 at 8:01 PM, James Carman
<ja...@carmanconsulting.com> wrote:
> 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 (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
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to