让我们将矩阵M×N矩阵Ai部分地设为:(从row=0列=0开始):
( 1)所有1<=i<=N A=0
2) 0<=j<=M Aj=1
该矩阵进一步构造Ai,具体如下:
对于所有的1<=i<=N和1<=j<=M,Ai=Ai-1^Ai,其中^表示按位的XOR操作。
如果我想得到一些值,我怎么能直接得到它(而不实际计算所有1.j-1和1.i-1的Ai )?有图案吗?给定,M,和,N,太大。
发布于 2017-09-06 22:34:25
让我们画出矩阵A的前16行和列:
1000000000000000
1111111111111111
1010101010101010
1100110011001100
1000100010001000
1111000011110000
1010000010100000
1100000011000000
1000000010000000
1111111100000000
1010101000000000
1100110000000000
1000100000000000
1111000000000000
1010000000000000
1100000000000000
你的问题“是否有模式”的答案非常清楚“是的!”左上角的8x8子矩阵被直接复制到自己下面,也被直接复制到右边,除了右上角的拷贝在左上角有0,而不是1。右下角的8x8子矩阵都是0,但左上角有1。如果我们只研究前8行和前8列,就会出现完全相同的模式:
10000000
11111111
10101010
11001100
10001000
11110000
10100000
11000000
左上角的4x4子矩阵被直接复制到自己下面,也直接复制到右边,除了右边的拷贝左上角有0,而不是1。右下角的4x4子矩阵都是0,但左上角有一个1。
这种递归的自相似性使得矩阵A成为一个分形,非常类似于Sierpinski三角形.
递归自相似性还使我们能够使用i和j的二进制表示轻松地计算Ai。设B是i或j的二进制表示中的最高阶位集。然后,以下过程将返回Ai的正确值。
该算法运行在O(log(max(i,j)运行时,比朴素方法的O(ij)运行时快得多。
让我们通过几个例子来看看这个算法的作用:
该算法的一个有趣的含义是,每一行k(对于k> 0)都有一个周期为2^B的重复模式,其中B是行号二进制表示中最重要的部分。例如,第3行(二进制表示11)重复1100,而第9行(二进制表示1001)重复1111111100000000。这意味着行k>0的完整重复序列可以在O(k)存储中表示,并可以通过分别计算j= 0,1,…,2^log_2( k)-1的Ak,j来计算O(k log k)时间。
https://stackoverflow.com/questions/46080511
复制相似问题