       Constructing a huge graph

• To: mathgroup at smc.vnet.net
• Subject: [mg122090] Constructing a huge graph
• From: Martin <mfpublic at gmail.com>
• Date: Thu, 13 Oct 2011 03:47:53 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com

```Hi

I am currently trying to construct a very large weighted graph but I
find myself in huge troubles :-). I simply lack the experience in
Mathematica to figure out how to get around the issue below.

The data: I have a large number of points, more specifically > 15 000
pairs of integer coordinates (x, y) in a list.

The aim: Construct a weighted (undirected) graph with an edge between
any two points (so the total number of edges is more than Binomial[15
000, 2] -- quite a lot). The point is that I want to find a shortest
path between two specific vertices.

The code: I have written looks like this:
GraphDistance[
(Graph[
#1, (* the edges *)
EdgeWeight -> First[#2]] &) @@
Reap[
(Module[{},
Sow[weight @@ #]; (* compute weight *)
UndirectedEdge @@ # (* make edge *)
] &) /@ Subsets[coords,{2}],
startP,
targetP,
Method --> "Dijkstra" (* weights are >= 0 *)
]

The problem: The code is sooo slow - even for 5000 points :-), and
Mathematica (for Students) aborts the computation because of
"insufficient memory" already when I have 10000 points.

Help: I have tried to look through a number of ressources on the
internet but I have to admit that all the different pieces of advice
on how to construct efficient code is a bit overwhelming for me as an
inexperienced Mathematica programmer.
I believe that it should be possible to get a reasonably efficient
code for the above problem, but I do not know how to accomplish that.

My own thoughts: First of all, the Subsets function constructs a huge
list, and afterwards I use Map, to get two lists that are used for the
Graph object - I believe this is where the problem is.
I guess that, if I could produce my own subsets function where I would
be able to compute the weight directly on each pair of points (x,y),
and then put it directly in a SparseArray, could reduce both time, and
memory consumption??

I hope that you can maybe point me in the right direction, or have any
specific advice for my particular graph problem :-).