下面提供了周期序列,在0.2秒内有12位(使用C或编译函数可以大大改进)。其思想是通过考虑所有循环中对应于最大值的循环来定义规范形式。在以下方面数学软件代码,这是通过将位转换为十进制来完成的(From数字
).
can[l_]:=块[{list},lists=NestList[RotateLeft,l,Length[l]-1];压扁@MaximalBy[列表,FromDigits[#,2]&,1]]
例如罐[{1,0,1}]
和罐头[{0,1,1}]
两个返回{1,1,0}
.
然后将所有二进制数从$0$转换为$2^{12}$并删除重复项就足够了:
PadLeft[#,12]&/@表格[can[Integer Digits[i,2]],{i,1,2^12}]//删除重复项//绝对计时(* {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0} ...*)
16位数字需要5秒钟(同样,它可以大大减少)。