📄 binarydebruijn.cc
字号:
#include "binarydebruijn.h"ulongbinary_debruijn::func(ulong n)//// Knuths algorithm// specialized for m=2// muenchhausenized: recursive part{ ulong xret = x_[n]; if ( (0!=x_[n]) && (t_[n]>=n) ) goto R3; R2: y_[n] = (n==2 ? func2() : func(n-1)); R3: if ( 1==y_[n] ) ++t_[n]; else t_[n] = 0; if ( (t_[n]==n ) && (0!=x_[n]) ) goto R2; x_[n] ^= y_[n]; return xret;}// -------------------------ulongbinary_debruijn::next()// muenchhausenized: top level{// R1: word_ <<= 1; word_ |= xx; word_ &= (ndb_-1); if ( (0!=xx) && (tt>=nn) ) goto R3; R2: if ( nn>2 ) yy = func(nn-1); else { if ( nn==2 ) yy = func2(); else yy = func1(); } R3: if ( 1==yy ) ++tt; else tt = 0; if ( (tt==nn ) && (0!=xx) ) goto R2; xx ^= yy;// goto R1; return word_ & 1;}// -------------------------voidbinary_debruijn::make_seq(ulong *z, ulong ndb/*=0*/){ if ( 0==ndb ) ndb = ndb_; ulong sct = 0; do z[sct] = next(); while ( ++sct<ndb );}// -------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -