【问题标题】:Algorithm for generating n X n nonisomorphic binary matrices生成 n X n 非同构二进制矩阵的算法
【发布时间】:2020-03-19 09:15:24
【问题描述】:
#include <stdio.h>
int main()
{
    for (int i = 0; i < 1 << 4; i++)
    {
        printf("%d %d\n", (i >> 0) & 1, (i >> 1) & 1);
        printf("%d %d\n", (i >> 2) & 1, (i >> 3) & 1);
        printf("\n");
    }
    return 0;
}

n×n的二元矩阵有2^(n^2)个可能,同构意味着板子的旋转和反射的对称操作都算作一个。
例如,有 6 个非同构的 2 X 2 矩阵,

[0 0] [0 0] [0 0] [0 1] [0 1] [1 1]
[0 0] [0 1] [1 1] [1 0] [1 1] [1 1]。


在 python 或 C 中生成这样的 n X n 二进制矩阵的有效方法是什么?

【问题讨论】:

    标签: python c algorithm matrix


    【解决方案1】:

    尝试回答的最佳方法是计算 3x3 的组合数。

    你必须区分 3 类细胞:

    1. 旋转/反射不变的中心
    2. 4 条边
    3. 四个角

    由于中心是不变的,它是完全独立的,所以我们必须将不包括中心的解的数量乘以 2

    x x x     x x x
    x 0 x  +  x 1 x
    x x x     x x x
    

    有6种不同的角组合:

    0 x 0   1 x 0   1 x 1   1 x 0   1 x 1   1 x 1
    x   x   x   x   x   x   x   x   x   x   x   x
    0 x 0   0 x 0   0 x 0   0 x 1   1 x 0   1 x 1
    

    边缘也一样。我们现在可以检查边和角的组合,为此,我使用一张表,其中的件数设置为 1。
    请注意,放置 1 或放置 0 是同一个问题,因此我们的行和列是对称的...
    我没有给出组合的细节,只是我发现的不同组合的数量:

    x   0 1 2 3 4
    
    0   1 1 2 1 1
    1   1 2 4 2 1
    2   2 4 7 4 2
    3   1 2 4 2 1
    4   1 1 2 1 1
    

    所以是 51,与中心组合时乘以 2,所以是 102 个组合。

    现在我们知道了该系列的前 3 个术语,我们可以继续 OEIS 并搜索匹配的 2,6,102

    https://oeis.org/search?q=2%2C6%2C102&sort=&language=french&go=Chercher

    我们找到https://oeis.org/A054247

    在二面体群作用下的 n X n 二元矩阵的个数 正方形 D_4

    我不再继续,这个问题在这里给出完整的答案有点困难,但至少你现在有自己找到的链接......

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多