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
.