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
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"
> 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: squarcel@dia.uniroma3.it
>> Phone: +39-06-57333215
>> Fax: +39-06-57333612
>> http://www.dia.uniroma3.it/~squarcel
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org