理論計算機科学 (Thoerotical Computer Science) の色んな定理やアルゴリズムを紹介していきます. 基本的には日本語の資料がほとんどないような知見を解説していきます. 執筆者: 清水 伸高 https://sites.google.com/view/nobutaka-shimizu/home
2021年9月17日金曜日
3SUMのLinear Decision Tree Complexity
2021年8月27日金曜日
小記事: 3SUMのO(n^2)時間アルゴリズム
3SUMと呼ばれる次の判定問題を考えます:
入力 : $n$個の整数値 $A=(a_1,\dots,a_n)$ ただし$a_i\in[-n^c,n^c]$.
出力 : YES iff 相異なる三つ組 $(i,j,k)$ が存在して $a_i+a_j+a_k=0$
この問題は
for i in range(n):
for j in range(n):
for k in range(n):
if a[i]+a[j]+a[k]==0: return YES
return NO
というコードによって$O(n^3)$時間で解けますが, 少し工夫して次のようにすれば $O(n^2\log n)$ 時間で解けます.
L = []
for i in range(n):
for j in range(n):
L.append(a[i]+a[j])
L.sort()
for k in range(n):
if -a[k] is in L: // 二分探索をして-a[k]がLにあるかどうかを判定
return True
return False
しかし尺取り法に基づいた次のアルゴリズムを用いると$O(n^2)$時間で解くことができます (簡単のため, 入力配列$A$の中身は全て相異なる要素であるとします).
A.sort()
for i in range(n):
l = 0
u = n-1
while True:
if u==l: return False
if A[i]+A[u]+A[l]==0: return True
elif A[i]+A[u]+A[l]>0: u-=1
elif A[i]+A[u]+A[l]<0: l+=1
3SUMという問題は計算幾何学や精緻な計算量理論において非常に重要な問題の一つとされていて, 任意の定数$\epsilon>0$に対して$O(n^{2-\epsilon})$時間では解けないと予想されています.
一方で$\mathrm{polylog}(n)$倍の改善はなされています.
2021年7月27日火曜日
講義を完走した感想
人生で初めて講義(教える側)をしたのですが、とても濃い経験になったので備忘録として残そうかと思います。大学で講義を「する」という経験は一般的に見ればなかなかない経験であまり想像がつかないと思いますので、どういう感じなのかを説明します。講義資料の準備で意識したことや悩んだことなども綴っていくので、これから講義をする機会のある方には参考になる部分もあるんじゃないかと思います。既に幾つも講義を受け持っているプロフェッショナルな方々には自身の経験を思い出して温かい目で見守っていただけたら幸いです。コロナ禍という特殊な環境ではあったものの初の対面講義で奮闘した一人の助教の記録です。
0. 背景
自分が担当した講義はプログラミングの発展的な内容を扱うもので、学部2年生向けの講義です。まだ学部2年生の前期なのでまだあまり専門分野を学んでいない状態です。とはいえプログラミングの基礎的な部分はある程度学んでいてPythonは少しは分かるという状態です。また、必修科目というわけでもないので、受講者はある程度プログラミングに興味を持っているという想定です。また、ORなどに興味を持ちそうな理系向けの講義になっています。
1. 講義内容と形式の決定
自分が最初に苦労したのはこの部分です。特に何をすべきかが厳密に定まっておらず、内容はほとんどを任されていましたが、昨年度までの資料を見る限りでは基礎的なアルゴリズムをやっていたためその方向性は守ろうと思いました。他の先生に話を聞くと「ダイクストラ法はやってほしい」みたいな声も聞いたので、この辺りはちゃんと取り込もうと思いました(もちろんダイクストラは元々やるつもりでしたが)。昨年度までは本当に幅広く(平面幾何、乱択アルゴリズム、組合せ最適化など)さまざまなアルゴリズムを軽く紹介するという感じだったので、組合せ最適化の内容を主に扱い、最後に自分の趣味(ランダムグラフ、ランダムウォークなど)を少し取り入れた感じにしようと考えていました。
私の所属する大学はクォーター制度を導入していたため、講義は全7回です (6月頭〜7月末)。週1回講義と演習の時間がそれぞれ100分ずつあります(なので計200分あります!)。また、2020年度はコロナ禍の影響でオンライン講義になっていたようですが、私が赴任した2021年度は演習ということもあり対面授業になるとのことでした。
私がD3だった2020年度はコロナ禍が始まった年ということもあり仕方のないことですが対面講義と比べるとオンライン講義はあまり楽しいものではありませんでした。なので対面で講義できるというのは嬉しく思いました。特に受講生の顔で反応を見ながらインタラクティブに教えたりするのは教育の楽しい部分だと個人的に思います。
とはいえ緊急事態宣言が発出されている状況なのでいつオンライン講義に変更になっても対応できるように、昨年度と同様に google colab (jupyter notebookをブラウザ上で動かすgoogleのサービス) のドキュメントを講義資料とすることにしました。特にgoogle colabだと学生のPCにpythonを動かすためのソフトを入れる必要もなく, googleアカウントさえあれば誰でも動かせるのもあって導入が非常に簡単です (今の時代だとほとんどの人がYouTubeを観たりするのでgoogleアカウントは持っています). ipynbファイルを講義資料として配布し、受講生は自分のPCを持参してもらえれば普通に講義を行うことができます。
2. 講義資料の準備 (第1回〜第3回)
4月に着任して早々に講義をどうするかが頭をよぎったので、かなり前もって準備をすることにしました。今思えばこの選択はかなり良かったです(何事も余裕を持って準備しておくことは非常に大切です)。
講義資料を作る前に自分の中ではグラフアルゴリズムをメインに据えるということを意識しました。グラフ理論やグラフアルゴリズムは自分が非常に得意とする分野であり、何度も実装したことがあるからです。そこで、当初は次の二つの事項を講義で扱おうと考えました:
1. Pythonを用いて基礎的なアルゴリズムを理解
キーワード: 再帰, DFS, BFS, 貪欲法, 最短経路問題 (Dijkstra, Warshall—Floyd), DP.
2. 応用を知る: ネットワーク解析
キーワード: ランダムウォーク, ランダムグラフ (BAモデル), ネットワーク中心性 (PageRank, 媒介中心性) など.
ひとまず第1回の講義はPythonの復習を行い、その後は基礎的なアルゴリズムをひたすら紹介していき、最後の第7回講義で自分の趣味を交えた講義を行うという計画を立てました。
この方向で講義を組み立てて実際に講義資料を作り始めたのが4月の中旬 (講義開始2ヶ月前) でした。初回の講義資料が完成したので見返しました。初回はPythonの文法の復習だけやって「1から1000までの7の倍数の和を求めるコード」とかを1時間やるものだったので、純粋に「これはツマランな」と心配になりました。そこで少しでも退屈を紛らわそうと再帰関数の紹介を行いました。再帰を使ってフィボナッチ数列や階乗の計算のプログラムを書き、最後に非自明な例として分割数の漸化式を示しつつ分割数を計算するコードも紹介しました。
第1回の課題は「与えられた自然数が素数かどうか判定せよ」みたいな問題を出していましたが、なんとなく味気ないのでコラッツ予想を絡めた問題も出題してみました。こんな感じです。
この調子で第2回講義資料も取り掛かり、計算量とグラフの定義を行いました。グラフの隣接行列や隣接リストを紹介し、「グラフの次数列を計算せよ」「三角形(長さ3の閉路)の個数を求める関数を書け」といった課題を出していました。
課題を考える時に意識したのはデキる人でも退屈しない内容にしたいということです。講義そのものは流石に集中が散ったりするのでしょうがない部分もあるかもしれませんが、せめて競技プログラミングのように、問題を解く部分に楽しみを見出して楽しんでもらいたいと思っていました。第2回講義以降は毎週の課題の中に一つだけ学部2年生向けの講義にしてはありえないくらレベルの高い難問を設けることにしました (難問はチャレンジ課題枠としてあり、解けなくても成績に影響は出ないことを明言した上で出題しました)。
ちなみに第2回講義で出題した難問は以下の問題です:
要するに長さ4の閉路の判定を$O(n^2)$時間で行えという問題で、この記事にも紹介したように鳩の巣原理を使うと計算量が抑えられるという問題です。これを計算量の概念とグラフの定義を学んだばかりの学部2年生に出すのは正気の沙汰とは思えません。こんなん知らない状態から解けるやつおらんやん...
第1回と第2回の講義資料と課題の準備が一通り終わったので、他の先生や学生TAに難易度や分量を含めて確認してもらい、大丈夫そうとのことだったのでここでようやく一息つきました。ここまでの講義の内容は必須事項だったのであまり迷いはありませんでしたが、以降の構成に頭を悩ませることになりました。
ひとまず考えた計画としては残りの5回で
・可視化ライブラリ(matplotlibとnetworkx)の紹介、幅優先探索、深さ優先探索
・貪欲法、クラスカル法
・動的計画法
・Dijkstra、Warshall--Floyd、Bellman--Ford
・フロー (Ford--Fulkerson)
をやるか、または最後のフローはやらずに代わりに自分の趣味(ランダムグラフなど)を紹介するか、どちらかにしようと決めました。
いずれにしてもグラフアルゴリズムをやることは決まっていたので、せっかくなのでアルゴリズムの可視化を行うことを思いつきました。ひとまずgoogle colab上でのアニメーションの方法を学び、試しにDFSやBFSのアニメーションを書いて遊びつつ講義資料の準備を進めました。
ちなみにこんな感じのアニメーションを作りました。受講生はgoogle colabで開いている講義資料にあるPythonコードを実行するとこのようなアニメーションが出てくるというようになっています。アルゴリズム自体を可視化しているのでグラフは自由に変えられます。また、ボタンを押した時に一コマだけ進ませるというようなことも可能です。
3. 対面講義初回
結論からいうと初回講義は機器の不調なども重なって非常に大変でした。そもそも自分の担当は講義100分+演習100分だったのですが、実は当時の自分は勘違いをしていて講義100分の中に演習が組み込まれているものと思っていました(なので実際の講義は想定の倍あったということになります)。
元々70分程度の想定の下で準備していた講義を緊張もあって少し早口で進めていき、めちゃ早く終わっちゃうと内心焦っていたら、突然PCの調子が悪くなり学生TAのPCを急遽借りて講義を再開して案の定めちゃくちゃ早く講義部分が終わって演習時間がものすごく長くなるなど、思い返しても大変な1日になってしまいました。結局初回は課題が簡単だったのでほとんどの学生がすぐに帰る感じになっていました。
今にして思えばもっとやりようはあっただろうとも思えますが、2ヶ月弱前から準備していたしやれることはやったのであまり気にせずとりあえず講義を進めていくことになります。
第2回講義は使用PCも変えたので第1回と比べるとかなりスムーズに終えられました。第2回課題には第1回とは違い難問も用意していましたが、これは予想以上に反応が良かったです。計算量を気にしてプログラムを書くということをあまり経験してこなかった学生がほとんどだと思うので四角形の高速な判定にどこまで取り組んでくれるか心配したのですが、10人弱の学生が18時くらいまで残って議論しながら取り組んでくれました。これには教員側からしてもとても嬉しかったです。
4. 講義の改善点の洗い出し
まだ2回ではあるもののここまで講義をやってきていくつか変更点が見えました。まず、そもそも講義時間を勘違いしたまま準備していたので単純問題として内容は倍にできる。どうするか?
また、学生の質問を受け付けていくうちに色々改善した方がいいかもなぁというものも多く出てきました。例えば
- google colabのインデント幅の設定が人によって違う
- 自身が書いたコードがちゃんと正しく動いてるかを確認するのが面倒(学生が自分でテストケースを用意して確認しなければならないが、グラフアルゴリズムだと自分で隣接リストなどを用意しなければならない)
- printfデバッグみたいなことを教えた方がいいのか?
*)完全に問題がAtCoder感があるかもしれませんが、こういう文章題は少なくて、普通の問題はグラフ理論の用語を使った問題文になっています。
また、課題の採点を楽にするためにテストケースを用意しました。基本的にはテストケースで正解していて大丈夫そうなコードを書いていたらその課題を満点にするという感じにしました。これのおかげで採点は劇的に楽になりました。
もちろん、サンプルケース, Checker, テストケースによる自動採点の準備はかなり大変でこれを講義資料の準備と並行して行うのは非常に時間がかかり大変でした。しかし、特にCheckerの導入は受講生にはかなり高評価だったようで、さらに「Checkerを走らせたらエラーが出た/Wrong answerだった」という類の質問がきてくれたことは良かったです(Checker導入以前はあまり質問をしてくれる学生がいなくて寂しかったです)。やはり、自分の書いたプログラムがちゃんと動いているかの確認が簡単にできるということは準備の大変さに目を瞑ればメリットしかありません。
5. 以降の講義資料の準備と講義
ここまで来ると講義自体も少しずつ慣れてきて、講義内容も固まってくるので特に悩むこともなくなってきます。以前立てた計画通り
・貪欲法、クラスカル法
・Dijkstra、Warshall--Floyd、Bellman--Ford
・動的計画法
・フロー (Ford--Fulkerson)
の順番で講義資料を準備していきました。結局最終回はフローと最大二部マッチングをやることにしました。
ちなみに講義資料のために作ったアルゴリズムのアニメーションは
第4回:
- 貪欲法 (コイン支払い問題, 区間スケジューリング問題)
- 最小全域木問題
- クラスカル法
第5回
- 最短経路問題
- ダイクストラ
- ベルマンフォード
- ワーシャルフロイド
第6回
- 動的計画法
- 最長共通部分列問題
- ナップザック問題
- 重み付き区間スケジューリング問題
- Held—Karp のTSP
第7回
- フロー
- 残余グラフ
- Ford—Fulkerson
- Edmonds—Karp
- 二部マッチング
- 割り当て問題
- 第5回以外は意外と早く講義が終わってしまったというのがあります。アルゴリズムを広く浅く紹介して課題で問題を解きながら理解を深めてもらうというスタンスだったので、内容としてはちょうど良いのかもしれませんが講義自体は説明は割と早めに終わってしまいました。この辺りは説明をもっとゆっくりやればちょうど良くなりそうな気配があるので、経験を積むと感覚が掴めてくるのかもしれません。
- 初回の講義についてはPythonの復習にたくさん時間を割くよりも、エラトステネスの篩、ユークリッドの互助法、二分探索などの軽いアルゴリズムの紹介などが出来た気がしています。復習に時間を割くよりもコードで出てくる度に「リストはこうやって要素を追加するよ」と言えば良さそうです。
- 課題の提出についても注意喚起が足りなかった部分があります。課題を解いたのに保存で失敗して白紙の状態で提出してしまったという学生もいました。こういった不運な事故を防ぐ努力(注意喚起)はもうちょっとすべきだったと思います(流石に初めての講義でそこまで気が回らなかったのもしょうがない気がしますが。。。)
6. 感想
2021年4月2日金曜日
次数分離: スパースなグラフで役立つアルゴリズムのアイデア
次数分割の基本アイデア
応用. 三角形(長さ3の閉路$C_3$)の数え上げ
・アルゴリズム1:
・アルゴリズム2:
まとめ
参考文献
2021年3月31日水曜日
学生生活の振り返り
1. D進の理由
2. 学生生活で良かったこと
- とにかく勉強した。学生生活が終わると時間をとって勉強することが出来なくなるのではないかと漠然と思っていたので、将来後悔しないようにとにかくD1の1年間は研究はあまりせずとにかく勉強に打ち込みました。自分の場合は Arora & Barak の Computational Complexity や Frieze & Karonski の Introduction to Random Graphs を約1年くらいかけて読みました。特にランダムグラフの本は自分で手を動かしながら読んだのですが、そのおかげでランダムグラフに関する直感を自分で持つことができて今もたまにその直感が研究に役立つことがあるので、やってて良かったと思っています。
- 色んな学会に参加した。ありきたりですが、全国の同年代の人たちと交流をもったり先生方と知り合いになれたのは本当に良かったと思っています。また色んな学会で発表をして自分を宣伝できれば、アカデミアの世界での就活で多少は有利に働くことになるんじゃないかと思います。
- 共同研究をした。自分は博士の3年間はS先生とずっと研究をし、何本も論文を書きました。S先生は自分とは違うバックグラウンドを持つ方で、共同研究をしていく過程で自分一人では到達しえないアイデアを幾つも提案してくださり、結果としてより真理の深淵に近づけたと思います。確かに学会に参加すれば多くの方と交流する機会は得られますが、研究の技術的にディープな内容を討論することは出来ません。それを補いより研究を深めることが出来たというのは良かったと思います。
3. 辛かったこと
- 「選ばれない」ことのショック。自分は幸運にも、受験などではこれまで「選ばれる」方だったのですが、そのために「選ばれない」経験をほとんどしてこなかったがためにDC1に不採択になった時は精神的ショックはかなり大きかったです。特に一時期は「周囲の知り合いが皆DC1を持っているのに自分だけ...」という部分に大きな負目を感じていました。自分の場合は、1ヶ月後くらいに「自分と他人を比較すべきではないから気にする必要はない。むしろ、これから凄まじい業績を出してDC1とった人たちを超えて当時の審査員を見返そう」と奮起してました。改めて見直すとちょっと引くくらいポジティブですが、なんにせよ失敗をひきずらない精神を持つのは重要だと思います。
- 将来への不安。ありきたりで誰もが持つとは思います。自分の場合は「考えてもしょうがない。業績が出れば将来有利になるから今は研究に集中しよう」と考え、将来のことはほとんど考えないことにしました。
4. 後悔
- 一つの究極的な目標をたててそれに邁進する研究をしたかった。自分は主に、個々の小問題を解決していくような研究をしてきました。それは学問における自分の研究の意義を薄くする要因になります。確かに問題を解くことも大事ですが、問題を解いたその後に何を見出すかもまた大事であり、この部分を蔑ろにしてしまったことへの後悔があります。自分が論文の中で新しく提案した部分はその分野においてどのように貢献するかを明白に意識して論文を書くべきでした。自分はこれが(ゼロではなかったにしても)まだまだ足りなかったためにD論でとても苦労しました。博士の3年間はこの力を養うのに最適な期間だと思うので、D進した方々はぜひ頑張ってください。また、将来のことを考えると業績をあげなければと焦るかもしれませんが、その時の流行のトピックにあやかって論文を書くよりも他の誰もやってないオリジナルの観点に基づいた研究を貫いた方が絶対強いと思います。
- もっと海外に行きたかった。D1の1年間はとにかく勉強に邁進していたため、海外の学会などに参加しませんでした。D2になって国際学会に論文が通ったのですが、予期せぬアクシデント(千葉県を襲った巨大台風のせいで飛行機が飛ばず、代わりの飛行機が取れなかった)のためにこの時は海外に行けず、さらにD3では国際学会に3本論文が通ったのにCOVID19のために全てオンライン開催になってしまいました。そのため自分は修士の間に3回海外に行ったっきりで、Dの3年間は一度も海外に行ってません。今後もCOVID19の影響は続けば海外に行けないのも致し方ないですが、実際に海外のレベルの高い学会に参加してレベルの高い発表を聴いたりすると自分のモチベーションが上がったりするし良い機会になるのでやはり参加できるならばすべきだと思います。
5. 総括
2021年2月22日月曜日
The 123 Theorem
補足
参考文献
2021年2月15日月曜日
ランダム正則グラフの sandwich conjecture
ランダム正則グラフ理論において有名な sandwich conjecture と呼ばれる予想があるのですが, 最近この予想に大きな進展[3,4]が見られたので紹介します. このトピックは私が修士の頃から論文を読んで追っていたトピックなので, 今回の進展をもたらした論文の登場は個人的にはかなり衝撃的でした.
1. ランダム正則グラフとErdős–Rényiグラフ
1.1. 定義
$n$ 頂点 $d$-正則の頂点ラベル付きグラフ全体の集合から一様ランダムに取り出したグラフをランダム$d$-正則グラフと呼び, $G_{n,d}$ で表します. また, $n$頂点の各頂点のペアを独立に確率$p$で辺で引いて得られるランダムなグラフを Erdős–Rényiグラフと呼び, $G(n,p)$ で表します. $G(n,p)$の基本的な性質などは以前の記事を参照してください.
1.2. ランダムグラフの解析
ランダムグラフの解析をする上でそのランダムグラフの生成モデルに対する考察が不可欠です. たとえば,
$p=o(n^{-1})$ に対して $G(n,p)$ は確率 $1-o(1)$ で三角形を含まない
という事実が知られていますが, これは, $X$ を $G(n,p)$内に含まれる三角形の個数と定めたときに, Markovの不等式より
$\Pr[X\geq 1] \leq \mathbb{E}[X] = \binom{n}{3}p^3 \leq (np)^3 = o(1)$
となることから従います. $G(n,p)$を考えると$\mathbb{E}[X]$の期待値が非常に計算しやすいためにこのような簡単に証明できるわけです.
それでは, $G_{n,d}$ に含まれる三角形の個数 $X$ に対して $\mathbb{E}[X]$ を求める時はどのようにすれば良いでしょうか? $G(n,p)$の場合は各辺が独立に出現していたので簡単に $\mathbb{E}[X]$ を求められましたが, $G_{n,d}$ はそうとはいきません.
実は, $G_{n,d}$ には configuration model と呼ばれる生成モデルが知られていて, これを使えば $2^{O(d^2)} nd$ 時間でランダム $d$-正則グラフを生成することができます. 技術的な詳細は省きますが, このconfiguration model に基づけば $d=d(n)$が $n$ に依存しない定数ならば $G_{n,d}$ のさまざまな構造的性質を用意に解析することができます. 例えば, $d$が定数のときは $n\to\infty$ の漸近で三角形の個数$X$ はポアソン分布に従うことが証明できます. また, $d=d(n)$ が $o(\sqrt{\log n})$ くらいまでならなんとかできることもありますが, 例えば $d=(1+o(1))n^{1/3}$ などの場合は難しくなります.
$d=d(n)$ が大きいときの$G_{n,d}$の生成はそれ自体が一つの研究トピックになるほど難しい問題になっていて, 例えば $d=o(n^{1/2})$ に対して $G_{n,d}$ を $O(nd^3)$ 時間でサンプリングする論文がFOCS15に採択されています[6]. このトピックは多くの論文がありますが, 大体は switching method と呼ばれる手法に基づいたものになっていて, この手法を考えることで$G_{n,d}$ の解析を (時にはかなりアドホックな発想も必要になりつつも) 行うことができます ([2]の10章参照). しかしながら switching method を以てしても $d=o(n^{1/2})$ などの条件を課す必要があります.
すなわち, $d=d(n)$ が大きくなるにつれて$G_{n,d}$の生成と解析は困難なものになっていきます.
1.3. 構造的類似性
$G(n,p)$ の平均次数 $np$ が $np=d=\omega(\log n)$ を満たすとき, $G_{n,d}$と近い構造を持つであろうことが以下の議論から推察できます: まず, $G(n,p)$の頂点 $v$ を固定しその次数 $\deg(v)$ を考えます. この値は$G(n,p)$ がランダムに生成されるので確率変数となっていますが, $\deg(v)=\sum_{u\in V\setminus \{v\}} \mathbb{1}_{uv\in E}$ と書けてこれは独立確率変数の和になっているため, 期待値 $(n-1)p\approx np$ に集中します. 具体的には, Chernoff bound (補足の章の補題A.1参照) とUnion boundを組み合わせると, 任意の$t>0$に対し$$ \Pr[\forall v\in V, |\deg(v)-(n-1)p|\geq t] \leq 2n\exp\left(-\frac{t^2}{2(n-1)p+2t/3}\right)$$が示せます. 特に, $np=\omega(\log n)$ が成り立つときに $t=10\sqrt{np\log n}$ を代入すると, 非常に高い確率で, 全ての頂点の次数が $np\pm 10\sqrt{np\log n}$ の範囲におさまることが示せます. この議論から, $G(n,p)$ は "ほぼ" $(np)$-正則グラフとみなすことができるので, $np=d$のときは $G(n,p)$と$G_{n,d}$は似た構造的性質を持つことが予想されます. 実際, 彩色数や最大クリークのサイズなどは漸近的にほぼ同じ値を持つことが知られています.
(*) あくまでもこの類似性は $d=np$ が大きい場合にのみ成り立つことに注意してください. 例えば $d=np=3$ のとき, $G_{n,d}$ は確率 $1-o(1)$ で連結である一方で $G(n,p)$ は確率 $1-o(1)$ で非連結です.
2. Sandwich conjecture
1章で述べた類似性をちゃんと議論した研究が幾つかあります [1,3,4,5]. 一番最初にこの類似性を研究したのは Kim & Vu [5] です. 彼らの定理を述べるために, $\mathcal{G}(n,p)$ を $G(n,p)$ の分布, $\mathcal{G}_{n,d}$ を $G_{n,d}$ の分布とし, $X\sim \mathcal{G}$ と書いた時は確率変数 $X$ は分布$\mathcal{G}$に従うことを意味します. また, 次の定理ではランダムグラフのカップリングについて考えていきます. カップリングの定義などについては補足A.2を参照ください.
定理1 (Informal; Theorem 2 of [5]).
定理1の内容はinformalなもの (特に $p_2$ には実際にはもう少し条件が設定されている) であることに注意してください. 厳密なステートメントを知りたい方は元論文[5]を参照してください.
定理1から, $G_{n,d}$ は $d$ が定理1の条件を満たす場合は $p\approx d/n$ に対し $G(n,p)$ を部分グラフとして含むということが従います. 例えばこの $G(n,p)$ が直径$\leq 10$ であったならば, これを含む $G_{n,d}$ も直径$\leq 10$ になることが直ちに従います. より一般的に, 辺の追加における単調性を持つような性質を$G_{n,d}$が持つという証明をしたい場合は対応する $G(n,p)$ で考えれば良いという議論になるので, ランダム正則グラフの構造的性質の証明が一気にしやすくなるわけです.
その一方で, (2)の結果では単に $G(n,p_2)\setminus G_{n,d}$ の最大次数が抑えられるということしか主張しないので, $G(n,p_2)$が$直径>10$であることが言えたとしてもそこから$G_{n,d}$が直径$>10$になることが従うわけではありません. つまり, 定理1には
予想 (Sandwich conjecture, Conjecture 1 of [5]).
3. Sandwich conjecture 解決への進展
Sandwich conjectureに対する進展を簡単に紹介していきます.
・Kim & Vu [5] では上にあげた二つの問題点を残していました.
・Dudek, Frieze, Ruciński, and Šileikis [1] は, $d=\omega(\log n)$ かつ $d=o(n)$ ならば, ある$p_1=(1-o(1)) d/n$ に対して 定理1 の(1) の条件を満たすようなカップリングがあるということを示しています. 実際には[1]ではランダムグラフを一般化したランダムハイパーグラフを考えてカップリングの存在性を証明しています. ランダムグラフの本[2]の10章にこの結果の説明と証明が載っているので気になる方は参照ください. 実は, 私が2018年にSODAに通した論文も[1]の結果を用いています.
・Gao, Isaev, and McKay [4] は $d=\omega(n/\sqrt{\log n})$ に対して Conjecture 1 が真であることを主張しています. Kim and Vu の問題点だった逆方向の包含関係を ($d$が非常に大きいという仮定の下ではありますが) 解決したものになっています.
・Gao [3] は $d=\Omega((\log n)^7)$ に対して Conjecture 1 は真であることを主張しています. [4]では $d$ の仮定が非常に強いものでしたが, これをほぼ解決したということになります.
4. まとめ
ランダム正則グラフが研究に出てくるときは, $p=d/n$ に対して $G(n,p)$ を考えると良いです. もし $G(n,p)$ が望ましい性質を持つならば, sandwich conjecture より, 対応する $G_{n,d}$ も同様の性質を持つことが言えるかもしれません.
A. 補足
A.1. 集中不等式
補題A.1 (Chernoff bound; Theorem 21.6 of [2]).
$X_1,\ldots,X_n$を独立な確率変数で, $0\leq X_i\leq 1$ とする (必ずしも同一である必要はない). $S=\sum_{i=1}^n X_i$ とし, その期待値を $\mu$ とする. このとき, 任意の$t>0$に対して以下が成り立つ:
$$\Pr[S\geq \mu+t] \leq \exp\left(-\frac{t^2}{2\mu + 2t/3}\right),$$
$$\Pr[S\leq \mu-t] \leq \exp\left(-\frac{t^2}{2\mu + 2t/3}\right).$$
A.2. カップリング
一般に, 連結性といった, 辺の追加でinvariantなグラフの性質ならどんなものでも命題A.2のような結果が例2のカップリングを使えばすぐに示せます.
参考文献
[1] Andrzej Dudek, Alan Frieze, Andrzej Ruciński, and Matas Šileikis. Embedding the Erdős–Rényi hypergraph into the random regular hypergraph and Hamiltonicity, JCTB, 2017.
[2] Alan Frieze, and Michał Karoński. Introduction to random graphs, Cambridge University Press, 2015
[3] Pu Gao, Kim-Vu's sandwich conjecture is true for all $d=\Omega(\log^7n)$. arXiv, 2020. https://arxiv.org/abs/2011.09449
STOC26参加記
STOC2026に参加して4日目にこれを書いている。開催場所はソルトレイキシティで、日本との時差は15時間ある。基本的には夜中の2時に目が覚めて、15時くらいからめちゃくちゃ眠くなる生活が続いている。今回はありがたいことに2本通って2回発表する機会を得たのだが、最後の二日間の夕方...
-
0. 背景 グラフ理論とは文字通り, グラフについて解析する分野です. グラフ理論のモチベーションとしては, 「最小全域木」「最大マッチング」「最大フロー」などのアルゴリズムを考える際に対象となるオブジェクト(この例で言えば全域木, マッチング, フロー)に対する「良い」...
-
概要 焼きなまし法 は遺伝的アルゴリズムなどと並ぶ最適化問題の発見的解法の一つとして有名であり, 競技プログラミングの文脈ではマラソン(厳密解を求めるのが困難とされる一つの最適化問題に長時間取り組み最も最適値に近い解を得るという種目) においては常套手段の一つとして用いられていま...
-
競プロで道具として用いられる様々な賢いアルゴリズムやデータ構造の多くは, 非常に賢い研究者たちによって発見されており, ほとんどは理論計算機科学の論文として国際学会の会議録や学術雑誌の形として出版されています. ここではアルゴリズム系の研究論文がよく出てくる様々な国際会議を紹介し...








