comp.lang.ada
 help / color / mirror / Atom feed
From: "isaac2004" <isaac_2004@yahoo.com>
Subject: Re: Topological Sort Help
Date: 5 Feb 2007 12:30:21 -0800
Date: 2007-02-05T12:30:21-08:00	[thread overview]
Message-ID: <1170707421.136089.281290@l53g2000cwa.googlegroups.com> (raw)
In-Reply-To: <87sldllhpt.fsf@ludovic-brenta.org>

On Feb 4, 1:45 pm, Ludovic Brenta <ludo...@ludovic-brenta.org> wrote:
> isaac2004 writes:
> > hello i am trying to further my knowledge of graphs and i keep running
> > into this function called topological sort. i read the definition and
> > somewhat understand it as a function that does the following
>
> > 1. searches for a directed cycle
> > 2. sorts vertices of a graph in order onto a stack or array of some
> > type so the nodes can be popped in order
>
> > so my questions are
>
> > are these reasonable thoughts on this algorithm
>
> Have you read [1]http://en.wikipedia.org/wiki/Topological_sort?
>
> The first algorithm explained works the other way: it sorts the nodes
> first, and removes edges from the graph as it goes.  If there are
> edges remaining after the sort, then the graph has a cycle and cannot
> be sorted.
>
> In fact, how are you going to find cycles in a graph without doing a
> topological sort? :)
>
> > how would i write up an algorithm of this nature, would it be just
> > like traversing down a list and adding elements to a stack. thanks
> > for any help
>
> The first step is to devise a representation of the graph as a data
> structure.  In a directed graph, there are nodes and edges; each edge
> links two nodes and has a direction. One naive way of representing
> such a graph is with a two-dimensional array of Booleans, where
> Graph(X, Y) is True iff there is an edge from X to Y.  But that
> representation does not scale well to many nodes, so you may have to
> create a more memory-efficient data structure if your problem warrants
> that.
>
> I suggest you start with the naive representation first, write your
> algorithm, and then change the data structure if you run into memory
> problems.
>
> HTH
>
> --
> Ludovic Brenta.

well i have this data structure i found online that builds a matrix
from a input file and then creates a graph from the matrix. my goal is
to add and delete edges from this structure, that way i can use the
top search to just direct pointers. here is the algorithm for the
matrix and graph builder

FUNCTION BuildMatrix ( Size : Natural ) RETURN Digraph IS
		G : Digraph( Vertices'First ..
Vertices'Val(Vertices'Pos(Vertices'First) + Size - 1),
					 Vertices'First .. Vertices'Val(Vertices'Pos(Vertices'First) +
Size - 1))
					 := (OTHERS => (OTHERS => False));
	BEGIN
		RETURN G;
	END BuildMatrix;

	-- constructor
	FUNCTION CreateGraph (InputFile : String) RETURN DigraphPointer IS
		Input 		: File_Type;
		NumVertices : Natural;
		G			: DigraphPointer;
		A, B		: Vertices;
		Ac,Bc		: Character;
	BEGIN
		Open(Input,In_File,InputFile);
		Get(Input,NumVertices);
		G := NEW Digraph'(BuildMatrix(NumVertices));

		WHILE NOT End_Of_File(Input) LOOP
			Get(Input,Ac); -- read source node
			Get(Input,Bc); -- read in space
			Get(Input,Bc); -- now read destination node
			A := Vertices(Ac);
			B := Vertices(Bc);
			G.all(A,B) := True;
		END LOOP;

		Close(Input);
		RETURN G;
	END CreateGraph;

how would i set up a function to add or delete items from the data
structure. thanks




  reply	other threads:[~2007-02-05 20:30 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-04 19:54 Topological Sort Help isaac2004
2007-02-04 21:45 ` Ludovic Brenta
2007-02-05 20:30   ` isaac2004 [this message]
2007-02-05 20:39     ` Ludovic Brenta
2007-02-06  2:18       ` isaac2004
2007-02-06  9:06         ` Ludovic Brenta
2007-02-08  1:19           ` isaac2004
2007-02-08  9:25             ` Ludovic Brenta
2007-02-08 18:14               ` isaac2004
2007-02-08 18:24                 ` Ludovic Brenta
2007-02-08 18:29                   ` isaac2004
2007-02-08 18:54                     ` Ludovic Brenta
2007-02-08 19:14                       ` isaac2004
2007-02-08 19:27                         ` Ludovic Brenta
2007-02-08 20:22                           ` isaac2004
2007-02-09  2:04                             ` isaac2004
2007-02-08 18:38             ` Jeffrey R. Carter
2007-02-08 18:53               ` isaac2004
2007-02-09  4:57                 ` Jeffrey R. Carter
2007-02-10  8:37 ` s053914
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox