1 3 4 5An example of a simplicial complex is as follows.
1 2 3 4 1 3 5 4 1 4 5 8 2 3 5 4 3 5 4 9The example above shows a 3-dimensional simplicial complex with 5 facets. (This example is shellable.)
The program rsshell is a program (written in C)
to check shellability of
a given (pure) simplicial complex.
The method is to search a ``shellable h-assignment'' (discussed by Sonoko Moriyama) by using a kind of reverse search. (This idea is essentially suggested by Jörg Rambau in a short conversation during ICM2002. I thank him very much.)
Primitive simple-minded implementation of ``finding shellable h-assignments'' method is done by Moriyama-Nagai-Imai (presented at ICMS2002), which in a search tree trys to keep all intermediate steps in a hash table in order to avoid re-searching. (Of course it is impossible to keep all intermediate steps because the size of the memory is finite. To keep the table small enough, they used some heuristical methods to discard some information of already-checked nodes, that is, their atempt of avoiding re-searching is imperfect. By this they dared claim their implementation is ``space-efficient'' although it involves a quite large (c.a.64M) hash table!)
Moreover, their implementation uses a random-number table for the coding
of the entries of the hash-table.
In short, in their implementation
each h-assignment is encoded into a constant-bit number so that,
they expect, different ones are encoded into different numbers.
Of course this makes their implementation to be just a probabilistic checker:
If it answers nonshellable, it means that it is nonshellable in high
(I don't know for what reason they gave up to be exact. Maybe in order to reduce the size of the hash table, or to make the computation faster and easier. This is not a good idea at all if one really wants to know the shellability of the examples he constructed, even if the probability of error is very small. The probability of error is not estimated in their paper (even no mentioning that it is probabilistic). If the size of the complex is small, it is very small. If the size gets larger, it tends to 1.)
On the other hand, our method uses no such tables during the searching. Instead it just uses a reverse search. It uses very small memory. Of course it computes exact answer for our question of asking the shellability of simplicial complexes.
The search method used in M-N-I implementation is a depth-first-search as follows. (Although their description has a little bit different look.)
What we propose is that there is no need of using such a heuristical
way at all if we use the reverse search for this depth-first search.
For this we assume some fixed ordering of facets and for each assignment
we define its real parent to be the lexicographically smallest assignment.
(Here lexicographic ordering is based on an order relation `assigned'<`not assigned'.)
In precise, what we need to do is the following.
In this searching method, what we need to keep is only the current assignment, thus we need no hash table nor search path to the current status. That is, this method is really ``space-efficient''.
In the implementation of rsshell, we keep a list of cancellable facets and the maximum one among them in each step in order to make the computation efficient.