問題
解説
に対し、 は、 で割って 余るような数の、3 進数表示の下から 桁目(0 - based index です。)を 増加させる写像だとします。
すると、
上述の可換性を鑑みて、 に対して、 と書きましょう。
すると、サルサとルンバの生成する群の任意の元は、 と書けます。これは、サルサやルンバがこの形でかけることと、この形の元に左からサルサやルンバを掛けてもこの形であることから従います。
あとは、いままで作用したもの全部の掛け算を先述の形で管理して、適宜更新をしていくと良いです。サルサの更新は簡単です。ルンバの更新は、元を 個掛ける必要がありますが、それぞれについて 回程度の交換をすることで適切な位置まで持っていくことが出来ます。さらに共役作用は余りを見て適宜条件分岐をするだけですから、定数時間です。したがって更新の時間計算量は で、これを 回行いますから、合計で のお時間が掛かります。
ツイッターのご様子
勉強しました、面白かったです。
— maspy (@maspy_stars) May 26, 2020
なるほどルンバを、桁ごとの構造に分解しようとすると、わりと自然なんでしょうか。こういうことやって交換子で閉じた生成系が得られるという経験があまりないのですが、今回は上手いこといくのですね。
計算量は、N^2(|T| + 3^N) とかかなと思いました。
そのとおりです。 です。ごめんなさい。
勉強になりました.自分では,SRS^{-1} がうまく表現できないところで諦めていました.SもRも各桁の値はそこより上の桁には影響されないことがポイントでしょうか.ところで,計算量は O(T・N^2 + N・3^N) でしょうか?
— yamate11 (@_yamate11) May 29, 2020
う、そのとおりです。修正を怠ってしまって申し訳ない気持ちです(泣)