我正在研究一个问题,这个问题要求我找到所有6x6(0,1)矩阵和一些给定的属性:行/列之和必须小于2。在
矩阵不是对称的。在
我使用这个代码:import numpy as np
import itertools as it
n=6
li=[]
for i in it.product([0, 1], repeat = n**2):
if (np.reshape(np.array(i), (n, n)).sum(axis=1) < 2).all() and (np.reshape(np.array(i), (n, n)).sum(axis=0)< 2).all() :
if (np.transpose(np.reshape(np.array(i), (n, n))) != np.reshape(np.array(i), (n, n))).any():
li.append(np.reshape(np.array(i), (n, n)))
问题是这种方法必须遍历所有68719476736(0,1)矩阵。在这段代码之后,我仍然需要附加条件。在
有没有更快的算法来找到这个矩阵列表?在
编辑:
我正在研究的问题是找到一个唯一的邻接矩阵(图论),直到一个特定的等价类。例如,在问题的4x4版本中,我希望找到所有(0,1)矩阵,以便:行/列之和小于2
不是对称的,即A^T!=A
也是一个^T!=P^T A P,其中P是二面体群D8(8阶)的矩阵表示,它是S4的子群。在
在最后一步之后,我得到了一定数量的矩阵。如果A通过关系B=P^T A P与B相关,那么它表示相同的矩阵。我只选择了这个等价类的一个代表。在
在4x4问题中,我从65536变为3。在
在对第一个条件(和)进行排序后,我对结果的估计是46080。在6x6问题中,变换组P的阶数为48。在