グループ 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