![]() |
Sorting Network Search
Backtracking for Small Sorting Networks
|
Searchable sorting network. More...
#include <Searchable.h>
Public Member Functions | |
CSearchable () | |
Constructor. More... | |
virtual void | Backtrack () |
Backtracking search. More... | |
const size_t | GetCount () const |
Get count. More... | |
![]() | |
C1NF () | |
Constructor. More... | |
![]() | |
CSortingNetwork () | |
Constructor. More... | |
~CSortingNetwork () | |
Destructor. More... | |
![]() | |
CComparatorNetwork () | |
Constructor. More... | |
virtual | ~CComparatorNetwork () |
Destructor. More... | |
void | Save (const std::string &) |
Save to file. More... | |
Protected Member Functions | |
void | FirstComparatorNetwork (size_t) |
Set to first comparator network. More... | |
bool | NextComparatorNetwork () |
Change to next comparator network. More... | |
void | SynchMatchingRepresentations (size_t) |
Synchronize the two different matching representations. More... | |
void | InitMatchingRepresentations (size_t) |
Initialize the two different matching representations. More... | |
virtual void | Save () |
Save comparator network. More... | |
virtual void | SetToS () |
Set top of stack. More... | |
virtual void | Process () |
Process a candidate comparator network. More... | |
void | Search () |
Do the actual search. More... | |
![]() | |
void | Initialize () |
Initialize the sorting test. More... | |
bool | Sorts () |
Does it sort all inputs? More... | |
bool | StillSorts (const size_t) |
Does it still sort when a bit is changed? More... | |
bool | EvenSorts () |
Does it sort if there are an odd number of inputs and we fix the value on the last channel? More... | |
![]() | |
virtual void | Initialize () |
Initialize the sorting test. More... | |
virtual bool | Sorts () |
Does it sort? More... | |
virtual bool | StillSorts (const size_t) |
Does it still sort when a bit is changed? More... | |
size_t | FlipInput (size_t, const size_t, const size_t) |
Recompute network values when a bit is changed. More... | |
void | InitValues (const size_t, const size_t) |
Initialize the network values to the all zero input. More... | |
Protected Attributes | |
size_t | m_nCount = 0 |
Number of comparator networks found that sort. More... | |
CMatching | m_cMatching [MAXDEPTH] |
Matchings that make up comparator network in a form that makes searching faster. More... | |
int | m_nStack [MAXDEPTH] = {0} |
Stack to remove recursion from search. More... | |
int | m_nToS = 0 |
Top of stack. More... | |
size_t | m_nNumMatchings = 0 |
Number of matchings of this size. More... | |
size_t | m_nTop = 0 |
Topmost level. More... | |
![]() | |
CBinaryGrayCode * | m_pGrayCode = nullptr |
Gray code generator. More... | |
size_t | m_nValue [MAXDEPTH][MAXINPUTS] = {0} |
Values at each level when sorting. More... | |
size_t | m_nZeros = 0 |
Number of zeros in the input. More... | |
![]() | |
size_t | m_nComparator [MAXDEPTH][MAXINPUTS] = {0} |
Comparator array. More... | |
Additional Inherited Members | |
![]() | |
static void | SetWidth (const size_t) |
Set width. More... | |
static void | SetDepth (const size_t) |
Set depth. More... | |
![]() | |
static size_t | m_nWidth = 9 |
Comparator network width. More... | |
static size_t | m_nDepth = 6 |
Comparator network depth. More... | |
The searchable sorting network class will perform a backtracking search for a sorting network of a given depth and number of inputs.
Definition at line 39 of file Searchable.h.
CSearchable::CSearchable | ( | ) |
Compute the number of matchings and store it in m_nNumMatchings
.
Definition at line 30 of file Searchable.cpp.
|
virtual |
Initialize and then start a backtracking search for all sorting networks of given width and depth.
Reimplemented in C2NF.
Definition at line 82 of file Searchable.cpp.
|
protected |
Set to first comparator network from some given level down to the bottom.
toplevel | Top level of comparator network we are constructing here. |
Definition at line 91 of file Searchable.cpp.
const size_t CSearchable::GetCount | ( | ) | const |
Reader function for the number of sorting networks found.
Definition at line 160 of file Searchable.cpp.
|
protected |
Initialize m_nComparator and m_cMatching to the first matching at a given level.
level | The level at which to initialize matchings. |
Definition at line 120 of file Searchable.cpp.
|
protected |
Change to next comparator network. This implementation uses a stack in the standard way to remove the need for recursion.
Definition at line 135 of file Searchable.cpp.
|
protectedvirtual |
Process a comparator network, which means testing whether it sorts, and if it does, saving it to a file and incrementing a counter.
Reimplemented in CNearsort, and CNearsort2.
Definition at line 60 of file Searchable.cpp.
|
protectedvirtual |
Save a generated sorting network into a file with a suitable name. Save comparator network to a file whose name encodes number of inputs, depth, and order found. For example, an 8-input comparator network of depth 5 that is the 20th sorting network found would be saved to file w8d5n20.txt
.
Reimplemented in C2NF.
Definition at line 42 of file Searchable.cpp.
|
protected |
Perform a backtracking search, assuming everything has been initialized in a suitable fashion.
Definition at line 70 of file Searchable.cpp.
|
protectedvirtual |
Set top of stack m_nToS
to the last level of the sorting network.
Reimplemented in CAutocomplete, CNearsort, and CNearsort2.
Definition at line 53 of file Searchable.cpp.
|
protected |
Synchronize m_nComparator to m_cMatching at a given level. The latter is assumed to be correct.
level | The level at which to synchronize matchings. |
Definition at line 102 of file Searchable.cpp.
Definition at line 43 of file Searchable.h.
|
protected |
Definition at line 41 of file Searchable.h.
|
protected |
Definition at line 48 of file Searchable.h.
|
protected |
Definition at line 45 of file Searchable.h.
|
protected |
Definition at line 49 of file Searchable.h.
|
protected |
Definition at line 46 of file Searchable.h.