feature image

2026年8月31日 | ブログ記事

【競プロ】ざっくり Trace Monoid

この記事は traP 2026 夏のブログリレー 15 日目の記事です。明日の記事は @Oxojo さんの予定です。

この記事には ARC194E Swap 0^X and 1^Y のネタバレが存在します。

文字列に連結演算を入れた構造は、モノイドの公理以外の関係式を持たないことから free monoid と呼ばれています。ここに一部の文字間での可換性を課した構造は free partially commutative monoid あるいは trace monoid と呼ばれ、並列計算におけるジョブ同士の関係を表現できることからコンピュータサイエンス方面でも研究されているらしいです。

「一部の文字ペアについて、その 2 文字での隣接 swap が禁止されている。このとき隣接 swap を繰り返して文字列 から文字列 に変換できるか?」という問題の判定法を提示することを目標とし、trace monoid の性質をざっくりと紹介していきます。

この記事は Trace monoid (en-Wikipedia) を参考にして作成されました。有名な本・記事とは異なる表記をしている可能性があることに注意してください。

定義

簡約律 (Cancellation Property)

文字列に対し、文字 として一番右に現れる位置を最右 と呼ぶことにします。
文字 を含む文字列 について、最右 を削除して得られる文字列を と書きます[1]

右簡約律 が成立することを示します。

(証明)
から に変換する過程を と置く。また、文字列 を最右 で分割して と置く。過程 について

であるから が成立する。 より示された。

左簡約律 (最左削除) も同様にして示せます。系として、文字列 に対し が成立します。

射影による trace 判定 (Projection Lemma)

文字集合 に対し、文字列 から に含まれる文字だけを残してできる文字列を と書きます。これは への射影と呼ばれます。

任意の swap 禁止ペア について、swap の前後で への射影が不変量になることは簡単に分かります。逆に変換可能かどうかは、禁止ペアへの射影が全て一致しているかを見ればよいというのが、以下の Projection Lemma[2] です。

証明 1

を文字列長に関する数学的帰納法で示します。

(証明1)
仮定より であるから、文字 が現れる回数は で等しく、特に である。

文字列長 のとき明らかに成立する。 のときを考える。

文字列 の末尾文字を と置く。仮定から の最右 を末尾まで swap させることが可能であると分かるので である。

文字列長 の Projection Lemma を仮定すると、 に適用することにより が得られて、文字列長 の Projection Lemma が示される。以上の議論に数学的帰納法を用いればよい。

文字列長の和を と置きます。射影ごとに文字列を走査するナイーブな方法で で計算できます。文字ごとの出現位置リストから計算したり、一回の走査で並行して射影を構築したりすることで になります。

後者の方法について、射影を Rolling Hash で表現させると面白い気がします。モノイドが載るデータ構造を利用して部分文字列を調べたり、文字列の累乗が計算できるので例えば かどうか判定したりすることができます。ここにお好みの Rolling Hash に関する典型を追加してください。おまけに空間計算量が落ちます。

証明 2

他の証明も載せます。アルファベット に全順序が定まっているとき、文字列 から変換可能な辞書順最小の文字列 を構築できます。これを標準形 (すなわち同値類の代表元) とすることで trace 判定ができます。

射影は元の文字列のインデックスに関する情報を持たないため dependency graph (en-Wikipedia) というものを経由して Projection Lemma を証明します。

(証明2)
文字列 に対し、 としてグラフ を定義する。このグラフは DAG である。

のトポロジカル順序を受け取り、その順番で文字を並べてできる文字列を返す写像は単射である。また、この写像の像は から変換可能な文字列全体の集合である。よって、文字 を重みとする辞書順最小のトポロジカル順序により生成される文字列が求める文字列 である。


が次の条件を満たすとき dependency graph と呼ぶ。

また、dependency graph の同型性は次のような全単射 が存在するかで定義される。

Projection Lemma の仮定を満たすとき、作られる dependency graph は同型を除いて一意であり、関数 の値を求めるアルゴリズムは dependency graph の同型性に関して不変なので が導ける。

グラフの辺は定義通り張る必要はなく、射影において隣接する頂点に張ればよいです。計算量は です。

ARC194E

ARC194E Swap 0^X and 1^Y / 公式解説

正整数 および長さ の 01 文字列 が与えられる。 の部分文字列 に置き換えたり、その逆ができるとき、 に一致させることは可能か判定せよ。

公式解説の前半の言い換えは同様に行います。
の塊を表す文字 を導入してアルファベット とします。現れる の塊を貪欲に に置き換えるようにして 01 文字列を 文字列に変換したのち、 でのみ swap 可能としてもよいです。あとは かどうかの判定をするだけです。

公式解説の後半はアルファベットに あるいは という順序を入れ、射影から辞書順最小の文字列が一意に定まることを ad-hoc に証明しています。 は swap 禁止ペアなのでどちらの順序を選んでもよいです。

この性質が一般の場合で成り立つという話でした。以上。

あとがき

Gemini に上の問題を投げたら面白そうな話題を返してくれたので、少し勉強して記事にしてみました。よく見返したら Projection Lemma の証明に簡約律を使っていないことに気付いたのですが、消すのも勿体ないので残すことにしました。

trace monoid には面白い話が残っていそうなので、誰か書いてください、頼みました……

この記事は traP 2026 夏のブログリレー 15 日目の記事です。ぜひリンクから他の記事も閲覧してみてください。明日の記事は @Oxojo さんの予定です。


  1. 参考にした Wikipedia の記事では文字 を含まない文字列についても定義されていたが、ここでは未定義とする。 ↩︎

  2. Mathematics Stack Exchange の回答において Projection Lemma と呼ばれているが、一般的に何と呼ばれるかは調べていない。 ↩︎

alyth_sol icon
この記事を書いた人
alyth_sol

25B の Solalyth です。競技プログラミングをします。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2025年9月15日
traPでの一年半を振り返る〜全班所属の体験記(?)〜
gurukun41 icon gurukun41
2024年9月17日
1か月でゲームを作った #BlueLINE
Komichi icon Komichi
2025年9月18日
泥タブに夢と希望を見出した男の物語 【Lenovo Yoga Tab Plus】
mutv625 icon mutv625
2024年8月21日
【最新版 / 入門】JUCEを使ってVSTプラグインを作ろう!!!!【WebView UI】
kashiwade icon kashiwade
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2022年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記