![]() |
Sorting Network Search
Backtracking for Small Sorting Networks
|
Searchable sorting network with nearsort2. More...
#include <Nearsort2.h>
Public Member Functions | |
CNearsort2 (CMatching &, const size_t) | |
Constructor. More... | |
![]() | |
CNearsort (CMatching &, const size_t) | |
Constructor. More... | |
![]() | |
CAutocomplete (CMatching &, const size_t) | |
Constructor. More... | |
![]() | |
C2NF (CMatching &, const size_t) | |
Constructor. More... | |
void | Backtrack () |
Backtracking search. More... | |
![]() | |
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 | |
bool | StillNearsorts2 (const size_t delta) |
Does it still nearsort with this input change? More... | |
bool | EvenNearsorts2 () |
Does it nearly sort, even number of inputs? More... | |
bool | Nearsorts2 () |
Does it nearly sort? More... | |
void | Process () |
Process a candidate comparator network. More... | |
void | SetToS () |
Set top of stack. More... | |
![]() | |
bool | StillNearsorts (const size_t) |
Does it still nearsort with this input change? More... | |
bool | EvenNearsorts () |
Does it nearly sort, even number of inputs? More... | |
bool | Nearsorts () |
Does it nearly sort? More... | |
void | Process () |
Process a candidate comparator network. More... | |
void | SetToS () |
Set top of stack. More... | |
![]() | |
void | SetToS () |
Set top of stack. More... | |
bool | StillSorts (const size_t) |
Does it still sort when a bit is changed? More... | |
void | Initialize () |
Initialize the sorting test. More... | |
void | initLastLevel () |
Initialize the last level of the comparator network. More... | |
bool | Sorts () |
Does it sort? More... | |
![]() | |
void | Save () |
Save comparator network. More... | |
![]() | |
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... | |
Additional Inherited Members | |
![]() | |
static void | SetWidth (const size_t) |
Set width. More... | |
static void | SetDepth (const size_t) |
Set depth. More... | |
![]() | |
bool | m_bReachableFrom [MAXINPUTS][MAXINPUTS] = {false} |
Reachable from. More... | |
int | m_nReachCountFrom [MAXINPUTS] = {0} |
Count of channels reachable from. More... | |
bool | m_bReachableTo [MAXINPUTS][MAXINPUTS] = {false} |
Reachable to. More... | |
int | m_nReachCountTo [MAXINPUTS] = {0} |
Count of channels reachable to. More... | |
bool | m_bReachable [MAXINPUTS][MAXINPUTS] = {false} |
Reachable from or to. More... | |
int | m_nReachCount [MAXINPUTS] = {0} |
Count of channels reachable from or to. More... | |
![]() | |
size_t | m_nLevel2Index = 0 |
Index of current level 2 candidate. More... | |
![]() | |
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... | |
![]() | |
static size_t | m_nWidth = 9 |
Comparator network width. More... | |
static size_t | m_nDepth = 6 |
Comparator network depth. More... | |
CNearsort2 is a version of CNearsort that uses the nearsort2 heuristic, which is based on reachability, to prune two levels from the end.
Definition at line 37 of file Nearsort2.h.
CNearsort2::CNearsort2 | ( | CMatching & | L2Matching, |
const size_t | index | ||
) |
Constructor.
L2Matching | Level 2 matching. |
index | Lexicographic number of level 2 matching. |
Definition at line 33 of file Nearsort2.cpp.
|
protected |
Check whether sorting network nearsorts2 all inputs. Works for even width, and for odd width it doesn't change the last input.
Definition at line 41 of file Nearsort2.cpp.
|
protected |
Check whether sorting network nearsorts2 all inputs. Works for both odd and even m_nWidth
.
Definition at line 59 of file Nearsort2.cpp.
|
protectedvirtual |
Process a comparator network, which is pretty much the same as CNearsort::Process()
except that you stop two levels early and prune if the network so far fails to nearsort2 all inputs. If it fails to nearsort2, then it won't sort. Continue with those that nearsort2 because some of them might actually sort.
Reimplemented from CNearsort.
Definition at line 133 of file Nearsort2.cpp.
|
protectedvirtual |
Set top of stack m_nToS
to the fourth-last level of the sorting network.
Reimplemented from CNearsort.
Definition at line 149 of file Nearsort2.cpp.
|
protected |
Check whether sorting network nearsorts2 when the current input has channel flipped.
delta | Index of channel to flip. |
Definition at line 94 of file Nearsort2.cpp.