Hi James,
welcome in [graph] :)

DirectGraph is a DataStructure, Dijkstra is an algorithm and would be
better in therms of design keeping algorithms implementation separated
from DS.

Moreover, DirectGraph is an interface - users can provide their own
implementations - so no way to provide complete implementations
there...

Best,
-Simo

http://people.apache.org/~simonetripodi/
http://simonetripodi.livejournal.com/
http://twitter.com/simonetripodi
http://www.99soft.org/



On Thu, Dec 22, 2011 at 6:06 PM, James Ring <s...@jdns.org> wrote:
> On Dec 22, 2011 8:39 AM, "Claudio Squarcella" <squar...@dia.uniroma3.it>
> wrote:
>>
>> Hi,
>>
>>
>>> I highly appreciated the last contributions (thanks guys!) but I also
> agree on this point, so let's start from the end.
>>> I think that, no matter what underlying structure we come up with, the
> user should be able to specify e.g. a weighted edge with something like
>>>
>>> public class MyEdge implements Edge, Weighted<Double> { ... }
>>>
>>> and be able to immediately use it as an input for all the algorithms,
> without extra steps required. So the average user is happy, while "graph
> geeks" can dig into advanced capabilities and forge their personalized
> weights :)
>>> I hope we all agree on this as a first step. Complexity comes after.
>>>
>>> I'll take my time as well to re-think.
>>
>>
>> I did think and code a bit more. First of all please take a look at the
> updated code: Weighted<W> is an interface (weight W can be any type) and
> all the algorithms require edges to implement Weighted<Double> for now --
> we did not break it that much ;)
>>
>> About the "HasProperty-vs-Property" question (as in Comparable vs
> Comparator, MonoidElement vs Monoid, etc) I would go for the second one
> only. That is, external classes handle all operations on weights. Downside:
> the # of method parameters would increase linearly with the number of
> properties, but I can live with that (how many properties would weights
> have anyway?). On the other hand we have a neat interface for each
> property/class (Zero, Semigroup, Monoid, Ordering or Comparator, etc) and
> one clean, generic implementation for each algorithm. Dijkstra's signature
> becomes something like:
>>
>> public static <V extends Vertex, W, WE extends WeightedEdge<W>, G extends
> DirectedGraph<V, WE>> WeightedPath<V, WE, W> findShortestPath( G graph, V
> source, V target, Monoid<W> weightMonoid, Comparator<W> weightComparator )
>>
>> Scary uh? But wait, default implementations for Double, Integer, etc. are
> way easier. E.g. Dijkstra's shortcut for Double:
>>
>> public static <V extends Vertex, WE extends WeightedEdge<Double>, G
> extends DirectedGraph<V, WE>> WeightedPath<V, WE, Double> findShortestPath(
> G graph, V source, V target )
>> {
>>    return findShortestPath(graph, source, target, new DoubleMonoid(), new
> DoubleComparator());
>> }
>>
>> where DoubleMonoid and DoubleComparator are part of the library.
>
> Just a disinterested third party, but wouldn't this method be better as a
> non-static method on DirectedGraph? The signature is much nicer then.
>
>>
>> If you guys are fine with this, I'm ready to try and patch [graph] with a
> Christmas gift :)
>> 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