Re: [sage-support] Re: edges in graphs

2011-02-07 Thread Johannes
Yea, sure. but my problem is a tree like this:

   1
  / \
 23 45

and so on.

but i don't need it in that order I have a few crossing edes in it and
I'd like to have one like

   1
  / \
 35 24

or

  1
 / \
25 34

or someting like that, such that i have just a minimal number of crosssings.

even more, it would be nice, if every vertex is placed under his parent
and not from left to right:

  1
 / \
4   5
   / \   \
  6   7 _ 9

where '_' denotes a free space for a left child node of 5.

greatz
Am 07.02.2011 19:09, schrieb Nathann Cohen:
> Hello !!!
> 
> Among the wealth of tricky options one can use in plot/show, you will find :
> 
> g.plot(layout='tree')
> 
> :-)
> 
> Nathann
> 

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org


Re: [sage-support] Re: edges in graphs

2011-02-07 Thread Nathann Cohen
Hello !!!

Among the wealth of tricky options one can use in plot/show, you will find :

g.plot(layout='tree')

:-)

Nathann

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org


Re: [sage-support] Re: edges in graphs

2011-02-07 Thread Johannes
yea. it's connected. i tried the spanning trees too, but I had to look
ob how the trees differ, depending on how they are build.

I've just one small (opticial) problem remaining.
if I plot the tree all vertices are ordert on each level but beacause of
this many lines are crossing. I dont need to have them sorted, but it
would be nice to have as less as possible edges crossing.

greatz Johannes


Am 05.02.2011 16:02, schrieb Luiz Felipe Martins:
> Oh, I was imprecise. If it has no loops, it is a forest. So you have to get
> a spanning tree for each component.
> 
> On Sat, Feb 5, 2011 at 10:01 AM, Luiz Felipe Martins <
> luizfelipe.mart...@gmail.com> wrote:
> 
>> Sorry, I didn't get the beginning of the thread, but if you need the graph
>> without loops, it is a tree. So, you can compute a maximal spanning tree of
>> the graph, and see if you get the whole graph together. This will also tell
>> you what edges to remove, if the graph is not a tree. Of course, the maximal
>> spanning tree is not unique, so the set of edges to be removed will not be
>> uniquely determined.
>>
>> Sorry if this was already mentioned, or if it is actually unrelated to what
>> you need.
>>
>>
>> On Sat, Feb 5, 2011 at 7:37 AM, Johannes  wrote:
>>
>>> thnx for your answers.
>>>
>>> I'm dealing with an undirectred graph. In the beginning I have a given
>>> number of vertices (53 in my case now) and a list or relations between
>>> them. All I do is adding a new edge (a <-> b) if a is in relatoin to be.
>>> My problem is, i dont know form the beginning if it's loopsless. but I
>>> need to have it without any loops.
>>>
>>> greatz Johannes
>>>
>>>
>>>
>>> Am 05.02.2011 07:53, schrieb Nathann Cohen:

>
> how can i add a new edge (a->b) to a given graph G (n.n. connected),
> just in the case that there is no path (a -> ... -> b) before?


 >From your question, I can not infer whether you are dealing with
>>> directed or
 undirected graphs. So just in case :

 - If your graph is undirected and there are no paths between two
>>> vertices a
 and b, it means that a and b lie in different connected components.
>>> Given a
 graph g, you can obtain the list of connected components with
 g.connected_components(). It is a list of list (a partition of the
 vertices). Two vertices are joined by a path if and only if they are in
>>> the
 same connected component (in a Graph, "being linked by a path" is an
 equivalence relation). As soon as you add an edge between two connected
 components, you "merge" them :-)

 http://en.wikipedia.org/wiki/Connected_component_(graph_theory)

 - If your graph is directed, there is no equivalence relation anymore,
 because it is not even reflexive. You may have a path from a to b, but
>>> no
 path from b to a. We are then talking about strongly connected
>>> components
 (g.strongly_connected_components()), g.is_strongly_connected()). If you
>>> have
 two strongly conected components A and B in your graph, [ (adding one
>>> arc
 from any vertex of A to any vertex of B) AND (adding one arc from any
>>> vertex
 of B to any vertex of A) ] will ensure that for any pair of vertices in
>>> A U
 B there exist paths in both directions. Pretty often you just need to
>>> add
 ONE arc instead of two. You can get this information with the method
 strongly_components_digraph

 Strongly connected components :
 http://en.wikipedia.org/wiki/Strongly_connected_component

 In any case, you will often have a HUGE number of paths in your graphs,
 while checking whether there exists a path from a to b is almost
 instantaneous. You can do it manually with g.distance(a,b) <= g.order()
>>> or
 len(g.shortest_path(u,v)) > 0. The methods connected_components() or
 strongly_connected_components() actually test all the pairs at the same
 time, which is faster than actually computing shortest paths or
>>> distances
 between all pair. These methods are the most efficient you will find in
>>> Sage
 : they are very simple and implemented in Cython, as they appear very,
>>> very
 often in graph algorithms.

 (if I missed your point, please also tell me whether you are dealing
>>> with
 graphs/digraphs) :-)

 Nathann

>>> g
>>>
>>> --
>>> To post to this group, send email to sage-support@googlegroups.com
>>> To unsubscribe from this group, send email to
>>> sage-support+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/sage-support
>>> URL: http://www.sagemath.org
>>>
>>
>>
> 

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org


Re: [sage-support] Re: edges in graphs

2011-02-05 Thread Luiz Felipe Martins
Oh, I was imprecise. If it has no loops, it is a forest. So you have to get
a spanning tree for each component.

On Sat, Feb 5, 2011 at 10:01 AM, Luiz Felipe Martins <
luizfelipe.mart...@gmail.com> wrote:

> Sorry, I didn't get the beginning of the thread, but if you need the graph
> without loops, it is a tree. So, you can compute a maximal spanning tree of
> the graph, and see if you get the whole graph together. This will also tell
> you what edges to remove, if the graph is not a tree. Of course, the maximal
> spanning tree is not unique, so the set of edges to be removed will not be
> uniquely determined.
>
> Sorry if this was already mentioned, or if it is actually unrelated to what
> you need.
>
>
> On Sat, Feb 5, 2011 at 7:37 AM, Johannes  wrote:
>
>> thnx for your answers.
>>
>> I'm dealing with an undirectred graph. In the beginning I have a given
>> number of vertices (53 in my case now) and a list or relations between
>> them. All I do is adding a new edge (a <-> b) if a is in relatoin to be.
>> My problem is, i dont know form the beginning if it's loopsless. but I
>> need to have it without any loops.
>>
>> greatz Johannes
>>
>>
>>
>> Am 05.02.2011 07:53, schrieb Nathann Cohen:
>> >
>> >>
>> >> how can i add a new edge (a->b) to a given graph G (n.n. connected),
>> >> just in the case that there is no path (a -> ... -> b) before?
>> >
>> >
>> >>From your question, I can not infer whether you are dealing with
>> directed or
>> > undirected graphs. So just in case :
>> >
>> > - If your graph is undirected and there are no paths between two
>> vertices a
>> > and b, it means that a and b lie in different connected components.
>> Given a
>> > graph g, you can obtain the list of connected components with
>> > g.connected_components(). It is a list of list (a partition of the
>> > vertices). Two vertices are joined by a path if and only if they are in
>> the
>> > same connected component (in a Graph, "being linked by a path" is an
>> > equivalence relation). As soon as you add an edge between two connected
>> > components, you "merge" them :-)
>> >
>> > http://en.wikipedia.org/wiki/Connected_component_(graph_theory)
>> >
>> > - If your graph is directed, there is no equivalence relation anymore,
>> > because it is not even reflexive. You may have a path from a to b, but
>> no
>> > path from b to a. We are then talking about strongly connected
>> components
>> > (g.strongly_connected_components()), g.is_strongly_connected()). If you
>> have
>> > two strongly conected components A and B in your graph, [ (adding one
>> arc
>> > from any vertex of A to any vertex of B) AND (adding one arc from any
>> vertex
>> > of B to any vertex of A) ] will ensure that for any pair of vertices in
>> A U
>> > B there exist paths in both directions. Pretty often you just need to
>> add
>> > ONE arc instead of two. You can get this information with the method
>> > strongly_components_digraph
>> >
>> > Strongly connected components :
>> > http://en.wikipedia.org/wiki/Strongly_connected_component
>> >
>> > In any case, you will often have a HUGE number of paths in your graphs,
>> > while checking whether there exists a path from a to b is almost
>> > instantaneous. You can do it manually with g.distance(a,b) <= g.order()
>> or
>> > len(g.shortest_path(u,v)) > 0. The methods connected_components() or
>> > strongly_connected_components() actually test all the pairs at the same
>> > time, which is faster than actually computing shortest paths or
>> distances
>> > between all pair. These methods are the most efficient you will find in
>> Sage
>> > : they are very simple and implemented in Cython, as they appear very,
>> very
>> > often in graph algorithms.
>> >
>> > (if I missed your point, please also tell me whether you are dealing
>> with
>> > graphs/digraphs) :-)
>> >
>> > Nathann
>> >
>> g
>>
>> --
>> To post to this group, send email to sage-support@googlegroups.com
>> To unsubscribe from this group, send email to
>> sage-support+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/sage-support
>> URL: http://www.sagemath.org
>>
>
>

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org


Re: [sage-support] Re: edges in graphs

2011-02-05 Thread Luiz Felipe Martins
Sorry, I didn't get the beginning of the thread, but if you need the graph
without loops, it is a tree. So, you can compute a maximal spanning tree of
the graph, and see if you get the whole graph together. This will also tell
you what edges to remove, if the graph is not a tree. Of course, the maximal
spanning tree is not unique, so the set of edges to be removed will not be
uniquely determined.

Sorry if this was already mentioned, or if it is actually unrelated to what
you need.

On Sat, Feb 5, 2011 at 7:37 AM, Johannes  wrote:

> thnx for your answers.
>
> I'm dealing with an undirectred graph. In the beginning I have a given
> number of vertices (53 in my case now) and a list or relations between
> them. All I do is adding a new edge (a <-> b) if a is in relatoin to be.
> My problem is, i dont know form the beginning if it's loopsless. but I
> need to have it without any loops.
>
> greatz Johannes
>
>
>
> Am 05.02.2011 07:53, schrieb Nathann Cohen:
> >
> >>
> >> how can i add a new edge (a->b) to a given graph G (n.n. connected),
> >> just in the case that there is no path (a -> ... -> b) before?
> >
> >
> >>From your question, I can not infer whether you are dealing with directed
> or
> > undirected graphs. So just in case :
> >
> > - If your graph is undirected and there are no paths between two vertices
> a
> > and b, it means that a and b lie in different connected components. Given
> a
> > graph g, you can obtain the list of connected components with
> > g.connected_components(). It is a list of list (a partition of the
> > vertices). Two vertices are joined by a path if and only if they are in
> the
> > same connected component (in a Graph, "being linked by a path" is an
> > equivalence relation). As soon as you add an edge between two connected
> > components, you "merge" them :-)
> >
> > http://en.wikipedia.org/wiki/Connected_component_(graph_theory)
> >
> > - If your graph is directed, there is no equivalence relation anymore,
> > because it is not even reflexive. You may have a path from a to b, but no
> > path from b to a. We are then talking about strongly connected components
> > (g.strongly_connected_components()), g.is_strongly_connected()). If you
> have
> > two strongly conected components A and B in your graph, [ (adding one arc
> > from any vertex of A to any vertex of B) AND (adding one arc from any
> vertex
> > of B to any vertex of A) ] will ensure that for any pair of vertices in A
> U
> > B there exist paths in both directions. Pretty often you just need to add
> > ONE arc instead of two. You can get this information with the method
> > strongly_components_digraph
> >
> > Strongly connected components :
> > http://en.wikipedia.org/wiki/Strongly_connected_component
> >
> > In any case, you will often have a HUGE number of paths in your graphs,
> > while checking whether there exists a path from a to b is almost
> > instantaneous. You can do it manually with g.distance(a,b) <= g.order()
> or
> > len(g.shortest_path(u,v)) > 0. The methods connected_components() or
> > strongly_connected_components() actually test all the pairs at the same
> > time, which is faster than actually computing shortest paths or distances
> > between all pair. These methods are the most efficient you will find in
> Sage
> > : they are very simple and implemented in Cython, as they appear very,
> very
> > often in graph algorithms.
> >
> > (if I missed your point, please also tell me whether you are dealing with
> > graphs/digraphs) :-)
> >
> > Nathann
> >
> g
>
> --
> To post to this group, send email to sage-support@googlegroups.com
> To unsubscribe from this group, send email to
> sage-support+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/sage-support
> URL: http://www.sagemath.org
>

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org


Re: [sage-support] Re: edges in graphs

2011-02-05 Thread Johannes
thnx for your answers.

I'm dealing with an undirectred graph. In the beginning I have a given
number of vertices (53 in my case now) and a list or relations between
them. All I do is adding a new edge (a <-> b) if a is in relatoin to be.
My problem is, i dont know form the beginning if it's loopsless. but I
need to have it without any loops.

greatz Johannes



Am 05.02.2011 07:53, schrieb Nathann Cohen:
> 
>>
>> how can i add a new edge (a->b) to a given graph G (n.n. connected),
>> just in the case that there is no path (a -> ... -> b) before?
> 
> 
>>From your question, I can not infer whether you are dealing with directed or 
> undirected graphs. So just in case :
> 
> - If your graph is undirected and there are no paths between two vertices a 
> and b, it means that a and b lie in different connected components. Given a 
> graph g, you can obtain the list of connected components with 
> g.connected_components(). It is a list of list (a partition of the 
> vertices). Two vertices are joined by a path if and only if they are in the 
> same connected component (in a Graph, "being linked by a path" is an 
> equivalence relation). As soon as you add an edge between two connected 
> components, you "merge" them :-)
> 
> http://en.wikipedia.org/wiki/Connected_component_(graph_theory)
> 
> - If your graph is directed, there is no equivalence relation anymore, 
> because it is not even reflexive. You may have a path from a to b, but no 
> path from b to a. We are then talking about strongly connected components 
> (g.strongly_connected_components()), g.is_strongly_connected()). If you have 
> two strongly conected components A and B in your graph, [ (adding one arc 
> from any vertex of A to any vertex of B) AND (adding one arc from any vertex 
> of B to any vertex of A) ] will ensure that for any pair of vertices in A U 
> B there exist paths in both directions. Pretty often you just need to add 
> ONE arc instead of two. You can get this information with the method 
> strongly_components_digraph
> 
> Strongly connected components : 
> http://en.wikipedia.org/wiki/Strongly_connected_component
> 
> In any case, you will often have a HUGE number of paths in your graphs, 
> while checking whether there exists a path from a to b is almost 
> instantaneous. You can do it manually with g.distance(a,b) <= g.order() or 
> len(g.shortest_path(u,v)) > 0. The methods connected_components() or 
> strongly_connected_components() actually test all the pairs at the same 
> time, which is faster than actually computing shortest paths or distances 
> between all pair. These methods are the most efficient you will find in Sage 
> : they are very simple and implemented in Cython, as they appear very, very 
> often in graph algorithms. 
> 
> (if I missed your point, please also tell me whether you are dealing with 
> graphs/digraphs) :-)
> 
> Nathann
> 
g

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org


[sage-support] Re: edges in graphs

2011-02-04 Thread Nathann Cohen

>
> how can i add a new edge (a->b) to a given graph G (n.n. connected),
> just in the case that there is no path (a -> ... -> b) before?


>From your question, I can not infer whether you are dealing with directed or 
undirected graphs. So just in case :

- If your graph is undirected and there are no paths between two vertices a 
and b, it means that a and b lie in different connected components. Given a 
graph g, you can obtain the list of connected components with 
g.connected_components(). It is a list of list (a partition of the 
vertices). Two vertices are joined by a path if and only if they are in the 
same connected component (in a Graph, "being linked by a path" is an 
equivalence relation). As soon as you add an edge between two connected 
components, you "merge" them :-)

http://en.wikipedia.org/wiki/Connected_component_(graph_theory)

- If your graph is directed, there is no equivalence relation anymore, 
because it is not even reflexive. You may have a path from a to b, but no 
path from b to a. We are then talking about strongly connected components 
(g.strongly_connected_components()), g.is_strongly_connected()). If you have 
two strongly conected components A and B in your graph, [ (adding one arc 
from any vertex of A to any vertex of B) AND (adding one arc from any vertex 
of B to any vertex of A) ] will ensure that for any pair of vertices in A U 
B there exist paths in both directions. Pretty often you just need to add 
ONE arc instead of two. You can get this information with the method 
strongly_components_digraph

Strongly connected components : 
http://en.wikipedia.org/wiki/Strongly_connected_component

In any case, you will often have a HUGE number of paths in your graphs, 
while checking whether there exists a path from a to b is almost 
instantaneous. You can do it manually with g.distance(a,b) <= g.order() or 
len(g.shortest_path(u,v)) > 0. The methods connected_components() or 
strongly_connected_components() actually test all the pairs at the same 
time, which is faster than actually computing shortest paths or distances 
between all pair. These methods are the most efficient you will find in Sage 
: they are very simple and implemented in Cython, as they appear very, very 
often in graph algorithms. 

(if I missed your point, please also tell me whether you are dealing with 
graphs/digraphs) :-)

Nathann

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org