Peter Neubauer wrote:
Hi Patrik,
there is a lot of commits in your lab, maybe it would be cool to have
a small intro on what you are doing and what the status of the algos
are?
/peter
Hi all!
I actually intended to properly introduce myself when my work is added
as a component (which was supposed to happen soon), anyway...
For everyone who does not know about my work, I am working on
implementing some graph algorithms for Neo. So far the focus has been on
finding shortest paths and using that ability to calculate different
centrality measures for nodes in a Neo network.
So far regarding shortest paths, there are implementations of Dijkstra
to find paths between two given nodes (uses bidirectional search) and
also the classic problem of finding the shortest paths from one source
node to all others. For unweighted networks, where the relationships
have an implicit cost of 1, there is a breadth first search which only
differs from Neos BFS traverser in the way that it can find several
paths to each node.
Regarding measures and centrality there is so far support for stress
centrality, betweenness centrality, closeness centrality, eccentricity,
network radius and network diameter. (For definitions of these, I refer
to wikipedia).
What I am working on right now, except for properly documenting what i
have done so far, is experimenting with cutting out parts of a network
(like a subgraph). Since I would appreciate some thoughts/feedback on
this I will here describe it in more detail.
The issue is this. When doing calculations, doing it on the entire
network would just be too much data to handle and take too much time so
we need some way of limiting what part of the network we run the
calculation on. One way of doing this (partly already supported) is to
give each algorithm some kind of limit, for example we can provide our
BFS search with a maximum depth to traverse or our Dijkstra with a
maximum number of relationships to relax/consider.
The other way of doing this is to first create an in-memory copy of the
relevant part of the network, which is what I am working on, and then
release the calculation on that.
A number of questions arise, like if we would like to keep relationship
types (makes most sense) or be able to rearrange/rename them or truncate
them into one combined type.
The most important question however is; how much should we detach this
copy from the real network?
Should we make an entirely detached copy so we can make changes to it
without affecting the "real" network, for example be able to create the
transitive closure or similar? Or should we assume that the algorithm
beeing used is supposed to make some change to the real network so we
need to reflect these changes down to it?
Any feedback and thoughts on this or any other part of my work
(currently in
https://svn.neo4j.org/laboratory/users/patrik/neoalgo/trunk/) is much
appreciated.
This mail became a bit longer than expected, sorry, but thats the way it
happened ;)
Regards
Patrik Larsson
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user