depth
(to backtrack)¶
By default, \(\text{depth} = \infty\), meaning that the algorithm only backtracks one branching stage each time. Otherwise, if at some stage we need to backtrack, the algorithm will “backjump” to the specified \(\text{depth}\).
How to set depth
?¶
There is one known situation where setting depth
to a smaller number would greatly help.
That is, when degree_list
is highly skewed and size_list
is rather uniform.
Let’s pick:
degree_list = [17, 17, 16, 16, 16, 16, 16, 2, 1, 1, 1, 1]
size_list = [3] * 40
This is a degree sequence generated by the (undocumented) simplicial_test.sample
module:
size_list, degree_list, facets = gen_joint_sequence_from_sizes([3] * 40, p=0.001)
Here, you get the sizes
exactly as [3] * 40
, and with degs
sampled as some sequence, which altogether
realizes as the joint degree sequence of the facets
. Try it. You’ll know what I mean.
If we do:
st = Test([17, 17, 16, 16, 16, 16, 16, 2, 1, 1, 1, 1], [3] * 40, verbose=False, depth=1e5, width=1e5, cutoff=1e5)
is_simplicial, facets = st.is_simplicial()
It will take a long time (depending on your cutoff
) and then tell you that it is not simplicial, which is wrong
(because it can be realized by facets
).
If you increase cutoff
to, say, 1e7
, it doesn’t help either.
Now let’s set depth=2
,
st = Test([17, 17, 16, 16, 16, 16, 16, 2, 1, 1, 1, 1], [3] * 40, verbose=False, depth=2)
is_simplicial, facets_found = st.is_simplicial()
Voila! It takes little time.
print(facets_found)
# Out[*]:
# ((0, 1, 8), (0, 1, 9), (0, 3, 10), (0, 2, 3), (1, 2, 6), (0, 4, 5), (3, 5, 6), (0, 2, 5), (2, 5, 6), (2, 6, 7),
# (0, 1, 4), (0, 1, 5), (2, 3, 6), (0, 3, 6), (1, 3, 6), (4, 5, 6), (2, 4, 6), (1, 4, 6), (1, 5, 6), (1, 4, 5),
# (0, 4, 6), (1, 2, 4), (0, 1, 2), (1, 3, 5), (0, 3, 5), (3, 4, 5), (2, 3, 5), (1, 2, 5), (0, 2, 4), (2, 3, 4),
# (1, 3, 4), (3, 6, 7), (0, 1, 3), (0, 1, 6), (0, 1, 7), (0, 2, 6), (0, 3, 4), (2, 4, 5), (2, 3, 11), (4, 5, 12))