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 :-). Thanks in advance.
- Follow-Ups:
- Re: Constructing a huge graph
- From: DrMajorBob <btreat1@austin.rr.com>
- Re: Constructing a huge graph
- From: DrMajorBob <btreat1@austin.rr.com>
- Re: Constructing a huge graph
- From: Daniel Lichtblau <danl@wolfram.com>
- Re: Constructing a huge graph