1

グループ G={a,b,e} があるとします。ここで、a、b は任意の要素であり、e は中立要素を表します。特定の Cayley テーブルを思いついたので、結合性をチェックして、自分が行ったことが正しいことを確認したいと考えています。

つまり、x(yz)=(xy)z である G の任意の x、y、z をチェックしたいということです。これは、手で 3*3*3 = 27 のケースをチェックする必要があるためです。

私はこれまでのところ、コーディングがうまくいかなかったので、この問題に取り組むためのヒントやエレガントな方法を教えていただければ幸いです。私は python の初心者ですが、ループと関数の基本的な理解があります。

プログラムの私の考え:

文字列を入力として受け取るグループと言う関数を定義します。.extend(string) 関数で文字列を特定のリストに追加すると、指定された入力を 1 つずつ分析できます。

if ステートメントを使用して、次のように言いましょう。

if checklist[0] == "a" and checklist[1] == "b":
    checklist.pop[0]
    checklist[0] = "e"

最初にリストの最初のエントリを削除してから、目的の新しい値に置き換えることができます。私はそのように if ステートメントをどんどん追加し続け、最後に再帰的に関数を再度呼び出しました。チェックリストの長さが 1 に等しい場合、関数は終了します。

ただし、これは非常に洗練されたコードではなく、特殊なケースでも問題が発生します。したがって、私の努力は無駄だったと信じており、この問題にはもっと単純で洗練された解決策があると信じるべきです。それを見つけるために正しい方向に私を導くのを手伝ってくれることを願っています.


コード例(完全ではありませんが、概念的なものです):

checklist = []

def group(abc):
    if len(checklist) == 1:
        return checklist
    else:
        checklist.extend(abc)
        if (checklist[0] == "a" and checklist[1] == "a"):
            checklist.pop(0)
            checklist[0] = "b"
        if (checklist[0] == "a" and checklist[1] == "b"):
            checklist.pop(0)
            checklist[0] = "e"
        if (checklist[0] == "a" and checklist[1] == "e"):
            checklist.pop(0)
            checklist[0] = "a"
        if (checklist[0] == "b" and checklist[1] == "a"):
            checklist.pop(0)
            checklist[0] == "e"
        if (checklist[0] == "b" and checklist[1] == "b"):
            checklist.pop(0)
            checklist[0] = "a"
        if (checklist[0] == "b" and checklist[1] == "e"):
            checklist.pop(0)
            checklist[0] = "b"
        if (checklist[0] == "e" and checklist[1] == "a"):
            checklist.pop(0)
            checklist[0] = "a"
        if (checklist[0] == "e" and checklist[1] == "b"):
            checklist.pop(0)
            checklist[0] = "b"
        if (checklist[0] == "e" and checklist[1] == "e"):
            checklist.pop(0)
            checklist[0] = "e"
        group(checklist)
        return checklist
4

2 に答える 2

2

グループitertools.productの要素の各トリプルを生成し、トリプルが関連性があることを確認するために使用します。x, y, zG

特定のトリプルに対するグループ操作が結合的であるかどうかを確認する関数を定義してから、グループ内の可能な各トリプルを順番に確認することができます。"associativity fails..."が印刷されている場合G、グループ操作では関連付けられていません。

import itertools

G = [0, 1, 2, 3, 4, 5] # or whatever your group might be

def is_associative(x, y, z):
    if (x*y)*z == x*(y*z):
        return True
    return False

xyz = itertools.product(G, repeat=3)

for three in xyz:
    if not is_associative(*three):
         print("associativity fails for %s, %s, %s") % three

明らかに、 の定義では、グループ操作が何であれis_associative置き換えたいと思うでしょう。*

于 2014-10-12T18:08:31.437 に答える