| 1 | initial version |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: G = Graph()
sage: G.add_vertices(A)
for u,v in CartesianProduct(A,A):
if u != v and max(u,v) - min(u,v) <=3:
G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C, you could read about "Rips complex".
| 2 | No.2 Revision |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: A = Set([0,3,9,10,17,30,33])
sage: G = Graph()
sage: G.add_vertices(A)
for u,v in CartesianProduct(A,A):
if u != v and max(u,v) - min(u,v) <=3:
G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C, you could read about "Rips complex".
| 3 | No.3 Revision |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: A = Set([0,3,9,10,17,30,33])
sage: G = Graph()
sage: G.add_vertices(A)
sage: for u,v in CartesianProduct(A,A):
....: if u != v and max(u,v) - min(u,v) <=3:
....: G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C, you could read about "Rips complex".
| 4 | No.4 Revision |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: A = Set([0,3,9,10,17,30,33])
sage: G = Graph()
sage: G.add_vertices(A)
sage: for u,v in CartesianProduct(A,A):
....: if u != v and max(u,v) - min(u,v) <=3:
....: G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C, C in my previous answer, you could can read about "Rips complex".
| 5 | No.5 Revision |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: A = Set([0,3,9,10,17,30,33])
sage: G = Graph()
sage: G.add_vertices(A)
sage: for u,v in CartesianProduct(A,A):
....: if u != v and max(u,v) - min(u,v) <=3:
....: G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C in my previous answer, you can read about "Rips complex".
EDIT : The previous method works, but there is a Sage bug when the set is made of RDF elements (see the following discussion and trac ticket 14853). Here is a dirty workaround until the bug is fixed: we replace a RDF element by a tuple made of a single RDF element.
sage: A = Set([RDF(0),RDF(3),RDF(9),RDF(10),RDF(17),RDF(30),RDF(33)])
sage: Atuple = map(lambda x:(x,), A)
sage: G = Graph()
sage: G.add_vertices(Atuple)
sage: for u,v in CartesianProduct(Atuple, Atuple):
....: if u != v and max(u[0],v[0]) - min(u[0],v[0]) <=3:
....: G.add_edge(u,v)
Then,
sage: C = [[c[0] for c in clique] for clique in G.cliques_maximal()] ; C
[[0.0, 3.0], [9.0, 10.0], [17.0], [33.0, 30.0]]
| 6 | No.6 Revision |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: A = Set([0,3,9,10,17,30,33])
sage: G = Graph()
sage: G.add_vertices(A)
sage: for u,v in CartesianProduct(A,A):
....: if u != v and max(u,v) - min(u,v) <=3:
....: G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C in my previous answer, you can read about "Rips complex".
EDIT : The previous This method works, but there is a Sage bug when the set is made of RDF elements (see the following discussion and trac ticket 14853). Here is a dirty workaround until the bug is fixed: we replace a RDF element by a tuple made of a single RDF element.
sage: A = Set([RDF(0),RDF(3),RDF(9),RDF(10),RDF(17),RDF(30),RDF(33)])
sage: Atuple = map(lambda x:(x,), A)
sage: G = Graph()
sage: G.add_vertices(Atuple)
sage: for u,v in CartesianProduct(Atuple, Atuple):
....: if u != v and max(u[0],v[0]) - min(u[0],v[0]) <=3:
....: G.add_edge(u,v)
Then,
sage: C = [[c[0] for c in clique] for clique in G.cliques_maximal()] ; C
[[0.0, 3.0], [9.0, 10.0], [17.0], [33.0, 30.0]]
| 7 | No.7 Revision |
You can also notice that your property defining the set B is a property that is tested on pairs of elements of A. Hence, you can construct the graph corresponding to admissible pairs:
sage: A = Set([0,3,9,10,17,30,33])
sage: G = Graph()
sage: G.add_vertices(A)
sage: for u,v in CartesianProduct(A,A):
....: if u != v and max(u,v) - min(u,v) <=3:
....: G.add_edge(u,v)
What you are looking for is the set of maximal cliques of G:
sage: G.cliques_maximal()
[[0, 3], [9, 10], [17], [33, 30]]
I let you benchmark between the two methods and tell us which is better in which cases !
To understand the link between the cliques of the graph G and the simplicial complex C in my previous answer, you can read about "Rips complex".
EDIT : This method works, but there is a Sage bug when the set is made of RDF elements (see the following discussion and trac ticket 14853). Here is a dirty workaround until the bug is fixed: we replace a RDF element by a tuple made of a single RDF element.
sage: A = Set([RDF(0),RDF(3),RDF(9),RDF(10),RDF(17),RDF(30),RDF(33)])
sage: Atuple = map(lambda x:(x,), A)
sage: G = Graph()
sage: G.add_vertices(Atuple)
sage: for u,v in CartesianProduct(Atuple, Atuple):
....: if u != v and max(u[0],v[0]) - min(u[0],v[0]) <=3:
....: G.add_edge(u,v)
Then,
sage: C = [[c[0] for c in clique] for clique in G.cliques_maximal()] ; C
[[0.0, 3.0], [9.0, 10.0], [17.0], [33.0, 30.0]]
EDIT : The bug has been fixed in sage 5.12, so you can now use this method as well without having to use the workaround, even with vertices in RDF.
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.