2655
Comment:
|
8268
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
== In Process of Updating... Check back 11/23/06 == | |
Line 10: | Line 11: |
== Class Docstrings == {{{ A collection of constructors of common graphs. USES: A list of all graphs and graph structures in this database is available via tab completion. Type "graphs." and then hit tab to see which graphs are available. The docstrings include educational information about each named graph with the hopes that this database can be used as a reference. PLOTTING: All graphs (i.e., networks) have an associated SAGE graphics object, which you can display: sage: G = WheelGraph(15) sage: p = G.plot() sage: is_Graphics(p) True When creating a graph in SAGE, the default positioning of nodes is determined using the spring-layout algorithm. Often, it is more efficient to pre-set the positions in a dictionary. Additionally, we can use this position dictionary to display the graph in an intuitive manner, whereas the spring-layout would fail if the graph is not very symmetric. For example, consider the Petersen graph with default node positioning vs. the Petersen graph constructed by this database: sage: petersen_spring = Graph({0:[1,4,5], 1:[0,2,6], 2:[1,3,7], 3:[2,4,8], 4:[0,3,9],\ 5:[0,7,8], 6:[1,8,9], 7:[2,5,9], 8:[3,5,6], 9:[4,6,7]}) sage.: petersen_spring.show() sage: petersen_database = graphs.PetersenGraph() sage.: petersen_database.show() For all the constructors in this database (except the random and empty graphs), the position dictionary is filled, instead of using the spring-layout algorithm. ORGANIZATION: The constructors available in this database are organized as follows: Basic Structures: - EmptyGraph - CycleGraph - StarGraph - WheelGraph Named Graphs: - PetersenGraph Families of Graphs: - CompleteGraph - CompleteBipartiteGraph - RandomGNP - RandomGNPFast AUTHORS: -- Robert Miller (2006-11-05): initial version - empty, random, petersen -- Emily Kirkman (2006-11-12): basic structures, node positioning for all constructors -- Emily Kirkman (2006-11-19): docstrings, examples TODO: [] more named graphs [] thorough docstrings and examples }}} |
|
Line 14: | Line 75: |
=== Complete Graphs === * The Complete Graph constructor takes an integer argument, which is the number of vertices to be in the graph. The chosen convention is to display this graph in a cyclic manner with the first node at the top and counterclockwise direction (via a position dictionary of [x,y] tuples). ==== Examples ==== * Here is a complete graph with n=16 attachment:complete_16.png * Below, we used the SAGE !GraphicsArray to show 16 complete graphs at once, starting at n=3 and through n=18. attachment:complete_array.png === Complete Bipartite Graphs === ==== Examples ==== |
=== Empty Graphs === ==== Info ==== * Returns an empty graph (0 nodes and 0 edges). * This is useful for constructing graphs by adding edges and vertices individually or in a loop. ==== Plotting ==== * When plotting, this graph will use the default spring-layout algorithm, unless a position dictionary is specified. ==== Code ==== ==== Examples ==== {{{ # Add one vertex to an empty graph and then show: sage: empty1 = graphs.EmptyGraph() sage: empty1.add_vertex() sage.: empty1.show() }}} attachment:empty1.png {{{ # Use for loops to build a graph from an empty graph: sage: empty2 = graphs.EmptyGraph() sage: for i in range(5): ... empty2.add_vertex() # add 5 nodes, labeled 0-4 ... sage: for i in range(3): ... empty2.add_edge(i,i+1) # add edges {[0:1],[1:2],[2:3]} ... sage: for i in range(4)[1:]: ... empty2.add_edge(4,i) # add edges {[1:4],[2:4],[3:4]} ... sage.: empty2.show() }}} |
Line 27: | Line 112: |
* The Cycle Graph constructor takes an integer argument, which is to be the number of vertices in the graph. The chosen convention is to display this graph in a cyclic manner with the first node at the top and counterclockwise direction. ==== Examples ==== * Here is a cycle graph with n=10 attachment:cycle_10.png * Below, we used the SAGE !GraphicsArray to show 9 cycle graphs at once, starting at n=3 and through n=11 attachment:cycle_array.png |
==== Info ==== * Returns a cycle graph with n nodes. * A cycle graph is a basic structure which is also typically called an n-gon. * This constructor is dependant on vertices numbered 0 through n-1 in NetworkX cycle_graph() ==== Plotting ==== * Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each cycle graph will be displayed with the first (0) node at the top, with the rest following in a counterclockwise manner. * The cycle graph is a good opportunity to compare efficiency of filling a position dictionary vs. using the spring-layout algorithm for plotting. Because the cycle graph is very symmetric, the resulting plots should be similar (in cases of small n). * Filling the position dictionary in advance adds O(n) to the constructor. Feel free to race the constructors below in the examples section. The much larger difference is the time added by the spring-layout algorithm when plotting. (Also shown in the example below). The spring model is typically described as O(n^3), as appears to be the case in the NetworkX source code. ==== Code ==== ==== Examples ==== {{{ # The following examples require NetworkX (to use default) sage: import networkx as NX # Compare the constructors (results will vary) sage.: time n = NX.cycle_graph(3989); spring3989 = Graph(n) # CPU time: 0.05 s, Wall time: 0.07 s sage.: time posdict3989 = graphs.CycleGraph(3989) # CPU time: 5.18 s, Wall time: 6.17 s # Compare the plotting speeds (results will vary) sage: n = NX.cycle_graph(23) sage: spring23 = Graph(n) sage: posdict23 = graphs.CycleGraph(23) sage.: time spring23.show() # CPU time: 2.04 s, Wall time: 2.72 s sage.: time posdict23.show() # CPU time: 0.57 s, Wall time: 0.71 s # View many cycle graphs as a SAGE Graphics Array # With this constructor (i.e., the position dictionary filled) sage: g = [] sage: j = [] sage: for i in range(16): ... k = graphs.CycleGraph(i+3) ... g.append(k) ... sage: for i in range(4): ... n = [] ... for m in range(4): ... n.append(g[4*i + m].plot(node_size=50, with_labels=False)) ... j.append(n) ... sage: G = sage.plot.plot.GraphicsArray(j) sage.: G.show() # Compared to plotting with the spring-layout algorithm sage: g = [] sage: j = [] sage: for i in range(16): ... spr = NX.cycle_graph(i+3) ... k = Graph(spr) ... g.append(k) ... sage: for i in range(4): ... n = [] ... for m in range(4): ... n.append(g[4*i + m].plot(node_size=50, with_labels=False)) ... j.append(n) ... sage: G = sage.plot.plot.GraphicsArray(j) sage.: G.show() }}} |
Line 36: | Line 184: |
==== Info ==== ==== Plotting ==== ==== Code ==== |
|
Line 39: | Line 191: |
==== Info ==== ==== Plotting ==== ==== Code ==== |
|
Line 44: | Line 199: |
* The Petersen Graph is commonly known and often used as a counterexample. * This is actually the graph that inspired the desire for conventional, intuitive graphics - compare below the spring layout versus a planned dictionary of [x,y] tuples. * Our labeling convention here is to start on the outer pentagon from the top, moving counterclockwise. Then the nodes on the inner star, starting at the top and moving counterclockwise. |
==== Info ==== ==== Plotting ==== ==== Properties ==== ==== Code ==== |
Line 56: | Line 212: |
=== Complete Graphs === ==== Info ==== ==== Plotting ==== ==== Code ==== ==== Examples ==== === Complete Bipartite Graphs === ==== Info ==== ==== Plotting ==== ==== Code ==== ==== Examples ==== == Graphs I Plan to Add == |
In Process of Updating... Check back 11/23/06
Introduction
The SAGE Graph Theory Project aims to implement Graph objects and algorithms in ["SAGE"].
The goal of the Graph Database is to implement constructors for many common graphs, as well as thorough docstrings that can be used for educational purposes. Please check below for updates and note the section set aside for suggestions at the bottom of the page.
Emily Kirkman is working on this project.
Class Docstrings
A collection of constructors of common graphs. USES: A list of all graphs and graph structures in this database is available via tab completion. Type "graphs." and then hit tab to see which graphs are available. The docstrings include educational information about each named graph with the hopes that this database can be used as a reference. PLOTTING: All graphs (i.e., networks) have an associated SAGE graphics object, which you can display: sage: G = WheelGraph(15) sage: p = G.plot() sage: is_Graphics(p) True When creating a graph in SAGE, the default positioning of nodes is determined using the spring-layout algorithm. Often, it is more efficient to pre-set the positions in a dictionary. Additionally, we can use this position dictionary to display the graph in an intuitive manner, whereas the spring-layout would fail if the graph is not very symmetric. For example, consider the Petersen graph with default node positioning vs. the Petersen graph constructed by this database: sage: petersen_spring = Graph({0:[1,4,5], 1:[0,2,6], 2:[1,3,7], 3:[2,4,8], 4:[0,3,9],\ 5:[0,7,8], 6:[1,8,9], 7:[2,5,9], 8:[3,5,6], 9:[4,6,7]}) sage.: petersen_spring.show() sage: petersen_database = graphs.PetersenGraph() sage.: petersen_database.show() For all the constructors in this database (except the random and empty graphs), the position dictionary is filled, instead of using the spring-layout algorithm. ORGANIZATION: The constructors available in this database are organized as follows: Basic Structures: - EmptyGraph - CycleGraph - StarGraph - WheelGraph Named Graphs: - PetersenGraph Families of Graphs: - CompleteGraph - CompleteBipartiteGraph - RandomGNP - RandomGNPFast AUTHORS: -- Robert Miller (2006-11-05): initial version - empty, random, petersen -- Emily Kirkman (2006-11-12): basic structures, node positioning for all constructors -- Emily Kirkman (2006-11-19): docstrings, examples TODO: [] more named graphs [] thorough docstrings and examples
Basic Structures
We've begun to implement some basic graph constructors with (hopefully) intuitive graphics. Please browse below and for more information on graph plotting, look at Rober Miller's [http://sage.math.washington.edu:9001/graph_plotting wiki].
Empty Graphs
Info
- Returns an empty graph (0 nodes and 0 edges).
- This is useful for constructing graphs by adding edges and vertices individually or in a loop.
Plotting
- When plotting, this graph will use the default spring-layout algorithm, unless a position dictionary is specified.
Code
Examples
# Add one vertex to an empty graph and then show: sage: empty1 = graphs.EmptyGraph() sage: empty1.add_vertex() sage.: empty1.show()
attachment:empty1.png
# Use for loops to build a graph from an empty graph: sage: empty2 = graphs.EmptyGraph() sage: for i in range(5): ... empty2.add_vertex() # add 5 nodes, labeled 0-4 ... sage: for i in range(3): ... empty2.add_edge(i,i+1) # add edges {[0:1],[1:2],[2:3]} ... sage: for i in range(4)[1:]: ... empty2.add_edge(4,i) # add edges {[1:4],[2:4],[3:4]} ... sage.: empty2.show()
Cycle Graphs
Info
- Returns a cycle graph with n nodes.
- A cycle graph is a basic structure which is also typically called an n-gon.
- This constructor is dependant on vertices numbered 0 through n-1 in NetworkX cycle_graph()
Plotting
- Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each cycle graph will be displayed with the first (0) node at the top, with the rest following in a counterclockwise manner.
- The cycle graph is a good opportunity to compare efficiency of filling a position dictionary vs. using the spring-layout algorithm for plotting. Because the cycle graph is very symmetric, the resulting plots should be similar (in cases of small n).
- Filling the position dictionary in advance adds O(n) to the constructor. Feel free to race the constructors below in the examples section. The much larger difference is the time added by the spring-layout algorithm when plotting. (Also shown in the example below). The spring model is typically described as O(n^3), as appears to be the case in the NetworkX source code.
Code
Examples
# The following examples require NetworkX (to use default) sage: import networkx as NX # Compare the constructors (results will vary) sage.: time n = NX.cycle_graph(3989); spring3989 = Graph(n) # CPU time: 0.05 s, Wall time: 0.07 s sage.: time posdict3989 = graphs.CycleGraph(3989) # CPU time: 5.18 s, Wall time: 6.17 s # Compare the plotting speeds (results will vary) sage: n = NX.cycle_graph(23) sage: spring23 = Graph(n) sage: posdict23 = graphs.CycleGraph(23) sage.: time spring23.show() # CPU time: 2.04 s, Wall time: 2.72 s sage.: time posdict23.show() # CPU time: 0.57 s, Wall time: 0.71 s # View many cycle graphs as a SAGE Graphics Array # With this constructor (i.e., the position dictionary filled) sage: g = [] sage: j = [] sage: for i in range(16): ... k = graphs.CycleGraph(i+3) ... g.append(k) ... sage: for i in range(4): ... n = [] ... for m in range(4): ... n.append(g[4*i + m].plot(node_size=50, with_labels=False)) ... j.append(n) ... sage: G = sage.plot.plot.GraphicsArray(j) sage.: G.show() # Compared to plotting with the spring-layout algorithm sage: g = [] sage: j = [] sage: for i in range(16): ... spr = NX.cycle_graph(i+3) ... k = Graph(spr) ... g.append(k) ... sage: for i in range(4): ... n = [] ... for m in range(4): ... n.append(g[4*i + m].plot(node_size=50, with_labels=False)) ... j.append(n) ... sage: G = sage.plot.plot.GraphicsArray(j) sage.: G.show()
Star Graphs
Info
Plotting
Code
Examples
Wheel Graphs
Info
Plotting
Code
Examples
Named Graphs
Petersen
Info
Plotting
Properties
Code
Examples
- Here is the Petersen Graph as constructed in the database
attachment:petersen_pos.png
- And compare with the Petersen Graph plotted using the spring layout algorithm
attachment:petersen_spring.png
Graph Families
Complete Graphs
Info
Plotting
Code
Examples
Complete Bipartite Graphs
Info
Plotting
Code
Examples
Graphs I Plan to Add
Suggestions
- ???