Algorithm 生成大小为N的位网格的其他选项有哪些

Algorithm 生成大小为N的位网格的其他选项有哪些,algorithm,language-agnostic,Algorithm,Language Agnostic,众所周知,可以使用蛮力算法计算平方位网格的置换,其中可以使用位掩码将0…((2^cells)-1)的整数循环转换为每个网格置换。举几个例子: Grid size 2 (4 cells): 0-->15 Grid size 3 (9 cells): 0-->511 这对于达到一定大小的网格非常有效,但对于大小为7或更大的网格,循环操作的绝对数量将达到万亿 还有什么其他选择 我已经有了大小为6的网格的工作代码,但是quick在我的工作站上有一个大小为7的网格,最多使用76年,所有CP

众所周知,可以使用蛮力算法计算平方位网格的置换,其中可以使用位掩码将0…((2^cells)-1)的整数循环转换为每个网格置换。举几个例子:

Grid size 2 (4 cells): 0-->15

Grid size 3 (9 cells): 0-->511
这对于达到一定大小的网格非常有效,但对于大小为7或更大的网格,循环操作的绝对数量将达到万亿

还有什么其他选择

我已经有了大小为6的网格的工作代码,但是quick在我的工作站上有一个大小为7的网格,最多使用76年,所有CPU…:-(

目标应用程序

关于上述网格的实际应用,这与a的情况基本相同,但我只对可以在X轴或Y轴上镜像的网格感兴趣(最好两者都是)。因此一些合适的模式可能是菱形(X&Y)、字母D(Y)或字母a(X)

现有效率

由于目标应用程序的变化无常,有许多候选程序可以放弃:

  • 那些没有在网格边缘创建单元的
  • 无法跨X轴或Y轴镜像的对象
  • 那些细胞被隔离的地方
样本输出(N=4)


有大小为n的2^n位掩码。您不可能希望以小于2^n的复杂度生成所有掩码。您可能需要一个替代解决方案来解决您的问题,即您不生成所有位掩码,或者您将无法提高此值。

信息守恒要求无法生成所有数组模式in优于O(2 ^细胞)-你必须考虑每种情况至少一次。

但是,您可以通过使用压缩位集和SIMD并行生成每个阵列阵列模式来优化它

有一种系统地生成位模式的技术,称为最大长度序列。生成算法的关键特征是,每个可能的位模式(对于一定数量的单元)只生成一次。它使用XOR迭代计算连续值,可以对其进行优化(达到合理的大小)使用SSE/MMX


链接:

如果您只对可以镜像的网格感兴趣,那么只需生成网格的四分之一或一半,然后镜像即可

对于7x7:

X和Y镜像:生成所有可能的X轴和Y轴置换2^(7+7-1)倍于所有可能的3x3置换2^(3*3)。因为3x3将在4个角上镜像,所以只需生成2^13*2^9置换4194304

X或Y镜像:为1轴2^7生成置换,为3x7栅格2^21生成置换,总计268435456

对于8x8:

X和Y镜像:所有4x4排列2^16或65536


X或Y镜像:所有4x8排列2^32~40亿(现代计算机应能在一分钟内完成此操作).

你想生成所有可能的网格吗?对不起,什么是位网格?你是说位数组吗?对不起,是的-位数组。@MichaelSPriz由于我使用网格所做的工作,它只是其中的一小部分,因为我希望所有形状都接触网格的两侧。因此,考虑到最后一行上必须有某些内容,实际上我可以从bo开始ttom左位值(例如,对于4x4栅格为4096)我想他指的是宽度为7的正方形网格,相当于49个长的位pattern@willywonka_dailyblah为什么是49?网格的尺寸是多少?根据他自己的评论,OP指的是位数组。假设网格的大小是正方形,你当然是对的,但如果是正方形,答案的本质仍然是正确的那么它将是O(4^n)>>O(2^n).但你是right@willywonka_dailyblah在OP的最后一次编辑之后,我相信他真的是指方形网格。回答编辑我已经在问题中添加了一些我已经内置的效率,为什么是MLS?这会比仅仅增加更好吗?@harold一般来说,这是一个很好的观点,但特别是对于SIMD并行化,
xorps
instx86体系结构上的运算速度快于
addps
。参见@harold,当然,SSE 4.2+仍然不支持对128位整数求和,也不适合整数计算。而XOR是按位运算,不考虑数据如何通过浮点指令进行解释?我只是在考虑paddq(同时执行两个),当然不是128位,但遍历128位空间是没有希望的anyway@harold正如我所说的,xorps不能以浮点形式处理数据——只是一种位模式(并且没有进位)。我不知道你所说的迭代是什么意思,因为它是并行的
Current value is : 28662
 ## 
####
####
 ## 

Current value is : 40953
#  #
####
####
#  #

Current value is : 63087
####
 ## 
 ## 
####

Current value is : 63903
####
#  #
#  #
####

Current value is : 65535
####
####
####
####

Grid size 4, done in 22 milliseconds