ヤング図形と競技プログラミング
数学の様々な分野に登場するヤング図形について解説します。競技プログラミングと関係のありそうなトピックを多めに選びましたが、競技プログラミングのことを知らなくても楽しめると思います。
(2024/08/04: 大幅に改訂しました)
ヤング図形とは
ヤング図形とは、自然数の分割を箱を用いて可視化したものです。例えば 5 の分割
このヤング図形を
より厳密に説明すると、正の整数
ヤング図形をテーマにした競技プログラミングの問題を 1 つ紹介します。
Codeforces Round #609 (Div. 2) D. Domino for Young
ヤング図形が与えられます。最大で何枚のドミノを敷くことができますか。
ヤング図形の定義はとてもシンプルですが、奥深い理論が展開されます。その一部を見ていきましょう。
分割数
箱の総数が
競技プログラミングにおいては
分割数
個の互いに区別できない荷物があります。これらを互いに区別できない N 個の容器に入れる方法は何通りありますか。 M
これはプログラミングコンテストチャレンジブック (蟻本) の p. 66 の問題で、写像 12 相の 1 つです。蟻本を含め多くの文献で解説されているので、ここでは解説しません。この問題は動的計画法を用いて時間計算量
実は分割数は
共役図形
ヤング図形
例えば
共役の共役が元の図形であることは明らかです。
共役を使うことで次の定理が簡単にわかります。
このように、条件 A をみたす分割の個数と条件 B をみたす分割の個数が等しいという定理は多くあります。興味のある方はぜひ調べてみてください。
yukicoder No.2092 Conjugation
ヤング図形の共役を求めてください。
この問題は累積和と呼ばれるテクニックを用いると解くことができます。
マヤ図形とマヤゲーム
マヤゲーム (あるいは佐藤・ウェルターのゲーム) と呼ばれる、次のようなゲームがあります。
直線状に並ぶマスの上に
個の石が置かれています。石 N の位置は左から i 番目のマスです。先手と後手は交互にこれらの石のうち 1 つを選び、左に動かします。1 マス以上であれば何マスでも左に動かすことができます。1 つのマスに 2 つ以上の石を置くことはできません。動かすことができなくなった人の負けです。お互いが最善を尽くすとしたとき、どちらが勝つでしょうか。 A_i
ゲームは次のように進行します。
このゲームは、実はヤング図形と関連します。空きマスを→、石のあるマスを↑と置き換えてみましょう。
経路が得られました。これをヤング図形の境界と見なすことで、ゲームの盤面からヤング図形を得ることができます。では、石を動かすというルールはヤング図形ではどのようになるでしょうか。
それを調べるためにフックについて説明します。ヤング図形のあるマスについて、そのマスを角とするフックとは、そのマスより右または下にあるマスからなる図形 (そのマス自身を含む) です。フックに含まれるマスの個数をフック長といいます。
実は、マヤゲームにおける操作は、ヤング図形からフックを 1 つ選んで抜くことと対応します。
マヤゲームの盤面のことをマヤ図形と呼びます。ヤング図形を調べるにあたってはマヤ図形を調べることが大切になることもあります。
この問題はマヤゲームと同じです。この問題を解くにはマヤゲームの解析をする必要がありますが、ここでは省略します。有名なニムゲームと比べて難しいです。
解法
0,1 列をマヤ図形だと思うことで、操作はヤング図形からフックを引き抜く操作となります。この言い換えにより解くことができるようです。
カタラン数
競技プログラミングでは組合せの問題も出題されますが、その中でもカタラン数は重要です。カタラン数は
- 括弧列の個数
- 二分木の個数
- 対角線を跨がない経路の個数
など、様々な場面で現れます。カタラン数の詳しい解説はここではしないので、他の記事をご覧ください。
ここでは簡単な解説にとどめます。
ヤング図形との関連を述べましょう。
また、次のような関連もあります。
-
文字目がi (
であるとき、1 行目の最も左にある空箱に を書く。i -
文字目がi )
であるとき、2 行目の最も左にある空箱に を書く。i
括弧列が (()())
のときは次のようになります。
構成から明らかなように、ヤング図形に数字を書き込んだものは次の性質を満たします。
-
から1 までの正の整数が 1 回ずつ書かれている。2n - 1 行目について単調増加
- 2 行目について単調増加
- 各列について 1 行目にある数よりも 2 行目にある数の方が大きい
次の節ではこれを一般化します。
標準タブローとフック長公式
箱の総数が
- 各行について書かれている数は単調増加
- 各列について書かれている数は単調増加
与えられたヤング図形
すなわち、すべてのフック長をかけあわせて
であることから、標準タブローの個数は
フック長公式の証明は表現論を用いるもの、全単射を構成するもの、確率を用いるものなど、さまざまな手法があります。詳しくは以下の記事をご覧ください。
Judge System Update Test Contest 202004 C - Numbering Blocks
(問題文省略)
まさに標準タブローの個数を求める問題なので、フック長公式で解くことができます。なお制約が小さいので全探索でも解けます。
正しい括弧列の一般化
個の文字 A a
と個の文字 B b
からなる文字列であって、どの接頭辞においてもa
の個数がb
の個数以上となるものは何通りありますか。
解法
yukicoder No.2149 Vanitas Vanitatum
ヤング図形から縦または横向きのドミノを引き抜くことを繰り返して空にする方法は何通りありますか。
解法
マヤ図形を考えると、ドミノを引き抜く操作は黒石を 2 つ左の空きマスに移動させる操作と対応します。マヤ図形の偶数番目と奇数番目を取り出すことで 2 つのマヤ図形が得られます。ここからヤング図形を復元し、フック長公式を使います。以下の記事もご覧ください。
半標準タブロー
標準タブローとよく似た、半標準タブローと呼ばれるものがあります。それはヤング図形
- 各行について書かれている数は広義単調増加
- 各列について書かれている数は狭義単調増加
をみたすものです。
定義から、書き込まれた数の最大値は
ここで
yukicoder No.2556 Increasing Matrix
成分が正の整数である次正方行列であって、次の条件を満たすものは何通りありますか。 N
- 各行について広義単調増加
- 各列について広義単調増加
に対して、 i=1,2,…,N 成分は (i,i) である。 A_i
この問題は半標準タブローの個数を求める問題に帰着されます。
最長増加部分列とロビンソン・シェンステッド対応
数列
与えられた数列の最長増加部分列の長さを求める方法として、次の有名なアルゴリズムがあります。
-
:i=1 dp=(1,\infty,\infty,\infty,\infty) -
:i=2 dp=(1,2,\infty,\infty,\infty) -
:i=3 dp=(1,2,3,\infty,\infty) -
:i=4 dp=(1,1,3,\infty,\infty) -
:i=5 dp=(1,1,3,4,\infty)
これを見ると、更新箇所は 1 箇所で、それは
更新というのは元の数を新しい数で置き換えるという操作ですが、捨てちゃうのはもったいないですよね?そこで 2 本目の配列を用意して、元の数をそちらに移動させることを考えましょう。2 本目の配列でも更新操作が行われ、そこで追い出される数は 3 本目の配列に移動させます。配列の
すると、最長増加部分列の長さを求めるアルゴリズムは次のように拡張されます。まずタブロー
- タブロー
の 1 行目の数字がすべてP_{k-1} 以下ならば、1 行目の末尾にx_0 を追加して終了。x_0 - そうでなければ 1 行目にある
より大きい数字の中で最も左にある数をx_0 とおく。1 行目のx_1 をx_1 で置き換える。x_0 -
の 2 行目にある数字がすべてP_{k-1} 以下ならば、2 行目の末尾にx_1 を追加して終了。x_1 - そうでなければ 2 行目にある
より大きい数字の中で最も左にある数をx_1 とおく。2 行目のx_2 をx_2 で置き換える。x_1 -
の 3 行目にある数字がすべてP_{k-1} 以下ならば、3 行目の末尾にx_2 を追加して終了。x_2 - そうでなければ 3 行目にある
より大きい数字の中で最も左にある数をx_2 とおく。3 行目のx_3 をx_3 で置き換える。x_2 - 以下これを繰り返す。
このようにして得られるタブローを
これは数列からタブローへの写像を定めます。さらにこのタブローは半標準タブロー(数列が
そこで、新たなタブローの列
作り方から明らかに、
このようにしてタブローの組の列
ロビンソン・シェンステッド対応はこのサイトで遊べるので遊んでみましょう。
順列ではなく一般の正整数列の場合も似たような結果が成り立ちます。この場合、
ロビンソン・シェンステッド対応には次の性質があります。
ロビンソン・シェンステッド対応が最長増加部分列の長さを求めるアルゴリズムの拡張であったことから、次の定理の 1 つ目の主張がわかります。
最長増加部分列に関する問題をロビンソン・シェンステッド対応の観点から紹介します。
Chokudai SpeedRun 001 H - LIS
数列から好きな整数を好きなだけ取り除き、単調増加な数列を作るとき、その数列の長さの最大値を求めなさい。 a
最長増加部分列の典型問題です。
自作問題
長さの数列 N が与えられます。次の条件を満たすように各数を赤・緑・青のいずれかで塗ります。 (A_1,A_2,\ldots,A_N)
- 赤く塗られた数からなる部分列を取り出すと広義単調増加になっている。
- 青く塗られた数からなる部分列を取り出すと広義単調増加になっている。
緑色で塗られた数の個数の最小値を求めてください。
ヤング図形の 1 行目の箱の個数が最長増加部分列の長さなら、2 行目の箱の個数は何を表すか気になった方もいるかもしれません。実は次の性質があります。
AtCoder Regular Contest 091 E - LISDL
の順列であって次を満たすものがあれば構築してください。 (1,2,\ldots,N)
- 最長増加部分列の長さが
A - 最長減少部分列の長さが
B
解法
上で述べた定理から、1 行目の箱の個数が
Codeforces Round #502 C. The Phone Number
長さの順列のうち最長増加部分列の長さと最長減少部分列の長さの和が最小となるようなものを構築してください。 n
上の問題に帰着できます。考えてみてください。
yukicoder No.2048 L(I+D)S
の順列であって、最長増加部分列の長さと最長減少部分列の長さの和が (1,2,\ldots,N) となるものの個数を求めてください。 N
ここまでに登場した定理を使って解くことができます。
降下点集合
順列
実はロビンソン・シェンステッド対応は降下点集合とも大いに関係します。それを見るために、順列の降下点集合に加えてタブローの降下点集合も定義します。
標準タブロー
この定理は
自作問題
順列がグラスマンであるとは、 p となる p_i>p_{i+1} がただ 1 つ存在することをいいます。 i
の順列 (1,2,\ldots,N) であって、 p も p もグラスマンであるものはいくつありますか。 p^{-1}
解法
自作問題
の順列であって、最長増加部分列の長さが (1,2,\ldots,N^2) 、最長減少部分列の長さが N 、かつ交代的なものを 1 つ構築してください。 N
ぜひ考えてみてください。
yukicoder No.2794 I Love EDPC-T
の順列であって、最長増加部分列の長さが 2 であり、降下点集合が指定されたものであるものはいくつありますか。 (1,2,\ldots,N)
難しいです。
ロビンソン・シェンステッド・クヌース対応とコストカ数
ロビンソン・シェンステッド対応を一般化した、ロビンソン・シェンステッド・クヌース対応 (RSK 対応) を考えます。
順列
とも表記されます。上に並ぶ
非負整数成分の行列
のとき対応する 2 行配列は
となります (並べる順番に注意)。
このようにして作った 2 行配列について、上側の数列を
半標準タブローにおいて
形が分割
AtCoder Beginner Contest 256 C - Filling 3x3 array
のマス目があり、各マスに正の整数を書き込みます。 3\times 3 行目の和が i 、 h_i 列目の和が j となる書き込み方は何通りありますか。 w_j
まさに
ただし、コストカ数の計算は #P-complete と呼ばれるクラスに属していて、効率的にはできないようです。
3 次元ヤング図形
この記事の締めくくりとして 3 次元ヤング図形を紹介します。まず次の問題を考えてみましょう。
yukicoder No.2023 Tiling is Fun
六角形 ABCDEF に三種類の図形を敷き詰める方法は何通りありますか。
図が立体的に見えると思った人もいるかもしれません。実際、この問題は 3 次元ヤング図形の特別なものとなっています。ヤング図形は平面上に正方形を並べたものでしたが、3 次元ヤング図形は空間内に立方体を並べたものです。
平面分割とは平面上に並べられた非負整数列
a_{i,j}\ge a_{i,j+1} a_{i,j}\ge a_{i+1,j} - 総和は有限
をみたすものです。座標
上の図は平面分割
これを平面的に見ることで、上記の問題のように 3 次元ヤング図形と敷き詰めが対応します。
問題では一本の経路と対応していましたが、一般には複数本の経路の組と対応します。
どの 2 つの経路も交わりません。よって 3 次元ヤング図形の数え上げは非交差経路の数え上げに帰着され、LGV 公式と呼ばれる式により計算することができます。結果だけ述べると、箱
となります。
マクマホンの公式によれば、この式は
に等しくなります。
4 次元以上のヤング図形も考えたくなりますが、あまりよい性質がないようです。
参考文献
本
- W. Fulton (池田岳・井上玲・岩尾慎介 訳), ヤング・タブロー ―表現論と幾何への応用―, 丸善出版, 2019.
- ヤング図形の入門書と言えばやはりこれです。第 1 部は予備知識を特に必要としません。最長増加部分列と RSK 対応についても述べられています。続く第 2 部は表現論、第 3 部は幾何学への応用で、それなりに予備知識が要ります。
- 雪江明彦, 代数学 1 群論入門, 日本評論社, 2010.
- 基礎的な群論の教科書です。対称群の共役類がヤング図形により記述されることが載っています。
- 池田岳, テンソル代数と表現論, 東京大学出版会, 2022.
- 基本的な線型代数を学んだ人がその先にある奥深い数学を学び始めるのに最適な本です。第 1 章~第 3 章がジョルダン標準形と線型常微分方程式への応用で、ジョルダン標準形の記述にヤング図形が現れます。第 4 章はテンソル代数で、この先で大いに用いられます。第 5 章から本格的な群の表現論が展開され、対称群と一般線形群の既約指標を求めるという問題に向かって進んでいきます。後半部においてもヤング図形が活躍します。
- 高崎金久, 線形代数と数え上げ (増補版), 日本評論社, 2021.
- 3 次元ヤング図形の話から始まります。他には完全マッチングの数え上げや行列木定理など、競プロ er にとって興味深そうな話題が豊富です。
- Richard Stanley, Enumerative Combinatorics.
- 競プロ er のファンも多い数え上げ組合せ論の本です。7 章では対称関数や対称群との関係などについて述べられており、ヤング図形が活躍します。
- Amritanshu Prasad, Representation Theory: A Combinatorial Viewpoint (Cambridge Studies in Advanced Mathematics)
- 組合せ論的な表現論の本です。
- Bruce E. Sagan, The Symmetric Group: Representations, Combinatorial Algorithms, and Symmetric Functions.
- 対称群の教科書です。
Web 記事
Discussion