1 of 11

群ですか?

Are you a group?

kinaba

2 of 11

群 (Group)

集合 G と二項演算 ☆ が以下の3条件を満たしてたら群と呼ぶ

  • [UNIT] ある e ∈ G があって、すべての a ∈ G に対し� e☆a  =  a☆e  =  a
  • [INVERSE] すべての a ∈G に対し、�a☆z  =   z☆a  =  e�              を満たす z ∈G がある
  • [ASSOCIATIVITY] すべての a,b,c ∈ G に対し�(a☆b)☆c   =    a☆(b☆c)

3 of 11

問題

N × N の表が渡されたときに

群になってるかどうか�判定してね

0

1

2

3

0

0

1

2

3

1

1

2

3

0

2

2

3

0

1

3

3

0

1

2

4 of 11

自明な解法

   G.any? { |e|

       G.all? { |a|  e☆a==a && a☆e==a }

   }

&&

   G.all? { |a|

       G.any? { |z| a☆z==e && z☆a==e }

   }

&&

   G.all? { |a|

       G.all? { |b|

          G.all? { |c| (a☆b)☆c == a☆(b☆c) }�       }

   }

O(N3)

5 of 11

よんだ論文

  • Determining Whether a Groupoid is a Group
    • Robert E. Tarjan
    • Information Processing Letters, vol. 1, 1972
    • http://dx.doi.org/10.1016/0020-0190(72)90012-9
    • それ O( N2 log N ) でできるよ

 

  • Verifying Identities
    • Sridhar Rajagopalan and Leonard J. Schulman
    • FOCS 1996
    • http://doi.ieeecomputersociety.org/10.1109/SFCS.1996.548520 
    • それrandomized algorithmなら O( N2 ) でできるよ

6 of 11

O(N2 log N)

  B = a set of generators of G

  G.all? { |a|

       B.all? { |b|

            G.all? { |c| (a☆b)☆c == a☆(b☆c) }}}

  • Set of generator とは
    • Bの元だけを☆したり逆元とったりしまくったらGが全部作れる
    • 足し算なら { 1 } など
    • 置換群なら { 隣同士をswap } など
  • 群ならば、極小のgeneratorのサイズは
    • |B| ≦ log2 |G|
  • B は適当に貪欲にやれば O(N2) で求まる

7 of 11

おまけスライド: technical detail

  • 「真ん中はgeneratorだけ考えればよい」
    • 任意の x は generator の積 x = b1☆b2☆b3☆...☆bk  で書けるので
    • (a☆x)☆c = (a☆(b1☆b2☆b3☆...☆bk))☆c�= ...(generatorが真ん中の結合則を利用した式変形)...�= a☆((b1☆b2☆b3☆...☆bk)☆c)�= a☆(x☆c)
  • 「Gが群ならば、極小 generator のサイズは log2|G| 以下」
    • B = {b1, b2, b3, ..., bk} が generator とする
    • b1☆「b2 から bk を適当に組合せて作った値」 は b2 から bk だけの組合せでは作れない
      • 理由:仮に b1 ☆ X = Y だとすると、群なので逆元をとって b1 = Y ☆ X-1 なので�b1 が他から作れてしまう。これは B の極小性に反する
    • 同様にどの bi も、「bi を1回だけ使って作った値」は「bi を1個も使わない値」と必ず異なる
    • よって、b1 を使う/使わない、b2を使う/使わない、… の組合せで全部違う値が作れるので
    • 2|B| ≦ |G|
  • 「適当に貪欲にやれば O(N2) でgenerator 求まる」
    • 単位元じゃない元 b1 を適当に選ぶ。その1乗、2乗、3乗、…、-1乗、-2乗、…を求める
    • まだ作れなかった元を b2 として選ぶ {b1, b2} で作れる元を全部求める
    • 以下繰り返すだけ。(点数 N 辺数 Nのグラフの幅優先探索するのと同じ計算量)

8 of 11

O(N2) randomized

注: 群の判定ではなく、結合性の判定のみを行う手法

 ( "群じゃなさそうだったら(結合性があっても)捨て!"

  ができないので、こちらの方が難しい!)

   十分な回数のループ  {

    if(  (結合則が成り立つなら必ず true 

           成り立たないなら、1/8 以上の確率で false

           を返す O(N2) アルゴリズム)  == false )

          return false;

   }

   return true;

9 of 11

確率 1/8

  Random に X = {a1, a2, ..., ax} ⊆ G を選ぶ  Random に Y = {b1, b2, ..., by}⊆ G を選ぶ  Random に Z = {c1, c2, ..., cz} ⊆ G を選ぶ  (X☆Y)☆Z = X☆(Y☆Z) かどうか確かめる

ただし集合同士の ☆ は xor っぽい雰囲気で定義

  • X☆Y = { d  |  ai☆bj=d になる組(i,j)が奇数個 }
    • これらでAssociativityが成り立つ iff  要素ごとのAssociativityが成り立つ

確率 1/8 であることの証明の雰囲気

  • 結合則が成り立たない要素の組を (a,b,c) とする
  • Xにaを足したり引いたり,  Yにbを足したり引いたり, Zにcを足したり引いたり
  • してできる8通りの3つ組のうちどれか一つは、結合則が成り立たない
  • (詳細は次のページ)

10 of 11

おまけスライド: technical detail

  • 集合の xor を A xor B = {c | c は A か B のどちらか一方にだけ入っている} で定義
  • A={a1, ..., ax} と B={b1, ..., by} に対して、A☆B = {a1☆b1} xor ... xor {ax☆by} と定義
  • 分配則が成り立つ
    • A☆(B xor C) = (A☆B) xor (A☆C)
    • (A xor B)☆C = (A☆C) xor (B☆C) 
  • 「集合に対する☆に結合則が成り立つ if and only if 要素毎の☆に結合則が成り立つ」
    • → : {(a☆b)☆c} = ({a}☆{b})☆{c} = {a}☆({b}☆{c}) = {a☆(b☆c)}
    • ← : (A☆B)☆C = (a☆b)☆c ただしa∈A,b∈B,c∈Cの元を全部xorしたもの�       = a☆(b☆c) ただしa∈A,b∈B,c∈Cの元を全部xorしたもの = A☆(B☆C)
  • A xor {a}のことをAaなどと書くことにすると
  • (A☆B)☆C    xor   A☆(B☆C)�xor (A☆B)☆Cc    xor   A☆(B☆Cc)�xor (A☆Bb)☆C    xor   A☆(B☆C)�xor (A☆Bb)☆Cc    xor   A☆(B☆Cc)�xor (Aa☆B)☆C    xor   Aa☆(B☆C)�xor (Aa☆B)☆Cc    xor   Aa☆(B☆Cc)�xor (Aa☆Bb)☆C    xor   Aa☆(Bb☆C)�xor (Aa☆Bb)☆Cc    xor   Aa☆(Bb☆Cc)   =  ({a}☆{b})☆{c} xor {a}☆({b}☆{c}) である。
    • 証明は分配法則を使いまくって式を整理。
  • 前のページのように (a☆b)☆c ≠ a☆(b☆c) の場合、右辺が空でないので、�左辺の8行のどれかは空ではない。よって、A(a) B(b) C(c) の組み合わせどれかは�結合則が成り立たない。つまり集合の3つ組の、8個に1つは結合則が成り立たない

11 of 11

Further Reading

  • 読んだ論文に他に載ってる話題
    • [Tarjan72] 可解群かどうかの判定は O(N2)
    • [RS96] 結合性に限らず、条件の式の両辺に全変数が一度ずつ現れる条件ならなんでも同じ手法が使えるよ

  • Fast Recognition of Rings and Lattices (未読)
    • http://dx.doi.org/10.1007/3-540-10854-8_14
    • 環 (ring) の判定は O(N2)
    • 束 (lattice) の判定は O(N2.5)

  • 群の定義ゴルフ