小组理论和Python



如何编写python代码以检查集合{0,1,..,n -1}在cayley表中定义的操作∗是否关联。<<<<<<<<<<

我尝试的代码是:

def is_associative_cayley_table(table):
    if not is_cayley_table(table):
        return False
    for i in range (0,len(table)):
        for j in range (0,len(table)):
            for k in range (0,len(table)):
                if (table[table[i][j])][k])==(table[i][(table[j][k])]):
                   print("Okay")
                else
                   return False

而不是打印"Okay" n^3次,您可能只想返回bool

def is_associative_cayley_table(table):
    if not is_cayley_table(table):
        return False
    for i in range (0,len(table)):
        for j in range (0,len(table)):
            for k in range (0,len(table)):
                if (table[table[i][j])][k])!=(table[i][(table[j][k])]):
                   return False
    return True

另外,没有算法可以检查集合的关联性。
您必须使用蛮力。

最好是使用Light的关联测试,该测试"不能改善O(n^3)的最坏情况。它在某些情况下只是简化了任务。"

python中的发电机理解:

def is_associative(table, n):
    return all(table[x][table[a][y]] == table[table[x][a]][y] 
           for a in np.arange(n) for x in range(n) for y in range(n))
# calay table for ({0,1,...,n-1}, +n), addition modulo n, which is an Abelian group
n = 4
calay_table = np.zeros((n, n), dtype=int)
calay_table[0] = np.arange(n)
for i in range(1, n):
    calay_table[i] = np.roll(calay_table[i-1],-1)
print(calay_table)
# [[0 1 2 3]
# [1 2 3 0]
# [2 3 0 1]
# [3 0 1 2]]
is_associative(calay_table, n)
# True

我们可以巧妙地实现Light的关联测试。

相关内容

  • 没有找到相关文章

最新更新