理論計算機科学 (Thoerotical Computer Science) の色んな定理やアルゴリズムを紹介していきます. 基本的には日本語の資料がほとんどないような知見を解説していきます. 執筆者: 清水 伸高 https://sites.google.com/view/nobutaka-shimizu/home NII主催のグラフコンペティション Graph Golfに助教とM2の先輩と僕の3人チームで参加して優勝し、12/10に札幌で開かれたCANDAR'15にて講演をしました。(めっちゃ高そうな盾とかもらいました!!!)ということでGraph Golfの問題内容や背景、および僕らのとった手法の概略について適当に書いていきます。 前提知識として知っておいてほしい単語は以下の2つくらいです。 グラフ(点と点が繋がってるアレのこと) 次数(頂点に繋がってる辺の本数のこと) 問題内容 自
なんか前回伸びたので 参考 hamayanhamayan.hatenablog.jp ei1333's page 宣伝 beet-aizu.hatenablog.com 以下とりあえず辞書順(そのうち典型度順にしたい) Binary Indexed Tree 一点加算、先頭からの区間和、k番目に大きい値が で可能 library/binaryindexedtree.cpp at master · beet-aizu/library · GitHub 容易に多次元に拡張が可能(実用上は2次元くらい? library/binaryindexedtree2D.cpp at master · beet-aizu/library · GitHub Binary Trie 二進数を管理するTrie木 全体にXOR、k番目に大きい値、lower_bound等が で可能 library/binarytri
>>7 いや就職はあるだろ glassdoor/careercup見ればわかる、アルゴリズム問題ばっかやぞ
いつも忘れるので整理してまとめるぞい 数え上げ Bell Number: 区別できる n 個のボールを区別できない k 個以下の箱に分割する 特にB(n,n)は n 個のボールを任意個のグループに分割する方法の数である。 Stirling Number: N個の数字をK個の非空のsubsetに分割する通り数 Montmort Number: 撹乱順列の個数 ソートして大きいものから考える 区間の端だけ求めると で求められる 候補の区間が複数ある場合は最長のものだけ考える ちょうどK個 = K個以下 - (K-1)個以下 全てのx∈Gに対しf(x)∈Hを数えるとき、y∈Hに対しf^-1(y)=xなるものを数えることもできる 多項式の係数のGCDは積に対して準同型をなす( c(P)*c(Q) = c(P*Q) sum(C(i,j)) の形は高速に求められることがある(黒白がX,Y枚あって、その
0. はじめに 二分探索法は単純ながらも効果が大きく印象に残りやすいもので、アルゴリズム学習のスタート地点に彩られた花という感じです。二分探索というと「ソート済み配列の中から目的のものを高速に探索する」アルゴリズムを思い浮かべる方が多いと思います。巨大なサイズのデータを扱う場面の多い現代ではそれだけでも十分実用的ですが、二分探索法はもっとずっと広い適用範囲を持っています。 本記事では、二分探索法のエッセンスを抽象化して、適用範囲の広い「二分探索法の一般形」を紹介します。同時に無数にある二分探索の実装方法の中でも「めぐる式二分探索」がバグりにくいと感じているので、紹介したいと思います。 注意 1: 二分探索の計算時間について 二分探索の計算時間について簡単に触れておきたいと思います。例えば「$n$ 個の要素からなるソート済み配列から目的の値を探索する」というよく知られた設定であれば、 単純な
無向グラフ上で特殊な数え上げをする場合に使えるテク集 スペクトルグラフ理論 無向グラフをあるルールで行列に変換したものを使って色んな問題を解決する 参考1 参考2 ラプラシアン行列の固有値0の個数は無向グラフでの連結成分の個数と同じ 解説 行列木定理(ラプラシアン行列の任意の余因子は無向グラフの全域木の個数と等しい) 解説 隣接行列の行列式の偶奇とそのグラフの完全マッチングの総数の偶奇が一致する 解説 ケイリーの公式 参考 n頂点のラベル付きの木の総数はn^(n-2)通りある ラベル付きなので、木の形の組合せと木の頂点に数を割り当てる組合せを全て考慮した組み合わせ数 ケイリーの定理の問題は「行列木定理+多項式補間」の組合せでも解けるっぽい(かなり不確定)(HEのColorful Spanning Treesはこの組合せなのでケイリーの定理っぽくやっても解ける?)(Stranger Tree
ケイリーの公式の証明たちの紹介です。 ケイリーの公式とは ケイリーの公式とは 頂点のラベル付きの木の総数 が であるという公式のことです。 ここで、ラベル付きであるとは、それぞれの頂点を区別するということです。 たとえば のとき、頂点を区別しない場合は長さ のパスのみの 通りですが、ラベル付きの木の場合は , , の 通りです。 証明 1 (プリューファーコード) [1] おそらく一番有名な証明です。 頂点のラベル付きの木の集合から への全単射を以下のように構成します。 最もラベルが小さい葉を木から取り除き、その葉と繋がっていた頂点のラベル を数列の最初の値とします。 続けて、最もラベルが小さい葉を木から取り除き、その葉と繋がっていた頂点のラベル を数列の 番目の値とします。 以下同様に頂点が つになるまで操作を続けます。 こうしてできた数列 が木の値となります。 この数列をプリューファー
注意 このページにアクセスするには、承認が必要です。 サインインまたはディレクトリの変更を試すことができます。 このページにアクセスするには、承認が必要です。 ディレクトリの変更を試すことができます。 February 2018 Volume 33 Number 2 テストの実行 - C# を使用した Thompson Sampling James McCaffrey Thompson Sampling は、多腕バンディット問題の解を求めるために使用できるアルゴリズムです。用語「多腕バンディット」は、ギャンブルに使われるスロットマシンの俗称が「one-armed bandit (片腕バンディット)」だったことに由来します。 ここに 3 台のスロットマシンがあるとします。3 台のうちの 1 台のハンドルを引くと、誰も知らない何らかの確率分布に従って、掛け金を失うか、1 ドルが払い戻されます。
りんごさん方式の記事 正当性を証明するにはユニークな多項式の形にしてmodを素数にしておけば、Schwartz–Zippel lemmaを使えて良いっぽい? multisetのハッシュ、0になりやすいなぁと思ったけど0になる確率がat most n/modなのか。 記事での根付き木のハッシュの取り方を日本語にまとめておきます。 根付き木のハッシュ まず、深さ i に対応する乱数 を [0,mod) から取っておきます。 深さ i の頂点 v について、v 以下の部分木のハッシュは「( + 子のハッシュ)の積」として計算します。 特に、葉のハッシュ値は 1 です。 詳細は実際に記事を読んで下さい。 僕は根付き木のハッシュをどのように取っていたかの話と、それは良くなかったという話と、ならどうすれば良かったかの話をします。 計算法 まず素数p,modを用意する。 ある頂点以下の部分木ハッシュ値は
DP tsutaj (@_TTJR_) Hokkaido University B4 February 20, 2018 tsutaj (Hokkaido Univ.) DP February 20, 2018 1 / 54 1 2 ( ) ( ) HSI 3 4 RareItems (Hard) 5 tsutaj (Hokkaido Univ.) DP February 20, 2018 2 / 54 (Dynamic Programming) tsutaj (Hokkaido Univ.) DP February 20, 2018 3 / 54 DP DP DP tsutaj (Hokkaido Univ.) DP February 20, 2018 4 / 54 A P(A) = A : 6 1 5 P(x ≥ 5) = 1+1 6 = 1 3 A P(Ā) = 1 − P(A)
ARC 090 E - Avoiding Collision で話題になったこともあり、簡単にメモします。 最短経路を求める DP 的処理をするとき、DAG上のDP だろうと、BFS だろうと、Dijkstra だろうと、以下のような緩和処理をやっています // Edge e の緩和 int dp[MAX_V]; // dp[v] := 始点 s から頂点 v への最短経路長 if (dp[e.to] < dp[e.from] + e.cost) { dp[e.to] = dp[e.from] + e.cost; } これをちょっと変えるだけで、最短経路の本数も一緒に数え上げられます。 // Edge e の緩和 int dp[MAX_V]; // dp[v] := 始点 s から頂点 v への最短経路長 int num[MAX_V]; // num[v] := 始点 s から頂点
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 以下の問題を考えます. 1次元の直線上に地点 $x[0] < x[1] < \cdots < x[n-1]$ がある.我々は車を用いて地点 $x[0]$ から地点 $x[n-1]$ まで移動したい.途中の地点で休憩することができるが,頻繁な休憩も過剰な運転も避けたいので,休憩を挟まずに移動する距離がおよそ $a$ 程度になるようにしたい.具体的には休憩を挟まずに距離 $b$ だけ移動したとき,ペナルティとして $(b - a)^2$ がかかるとし,全体のペナルティが最小になるように移動したい.どのようにすればよいか. この問題は以下の動
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 0. はじめに --- 二部マッチング問題は実世界で超頻出 はじめまして。NTTデータ数理システムでアルゴリズムを探求している大槻 (通称、けんちょん) です。 好きなアルゴリズムはタイトルにもある二部マッチングですが、会社ではなぜか「DP が好きな人」と呼ばれています。 以前に動的計画法 (DP) の典型パターンを整理した記事を執筆したのですが、DP と並んで超頻出の話題として二部マッチング問題があります。二部マッチング問題とは、例えばマッチングアプリなどに見られるように、2 つのカテゴリ間で最適なマッチングを構成していく問題です。実
Qiita に移植しました 重みつき Union-Find 木とそれが使える問題のまとめ、および、牛ゲーについて
最下段が N-1 から始まるのと、親と子の取得方法がわかってればセグ木は書けます (ホンマか?)— 009_tsutaj@CODE FESTIVAL (@_TTJR_) 2017年3月29日 この記事は前記事: 「セグメント木をソラで書きたいあなたに」の続編です。セグ木をソラで実装するのはまだ厳しい・・・という方はまずはこちらの記事を読んでみてください。 tsutaj.hatenablog.com この記事は「セグメント木はソラで書けるけど、遅延評価セグ木は書けない・・・」という人を対象にしています。 遅延評価って何? まず遅延評価について軽く説明しておきます。 遅延評価というのは、値の伝播*1を遅らせるテクニックです。これは区間に対して更新を行うときに必要になる時が多いです。例えば、値の更新を普通のセグメント木でやろうとしたとき、範囲の長さを とするとこの範囲の長さだけクエリを呼ばなけれ
Competitive Programming Advent Calendar 2016 - Adventarの12日の記事になります。 この記事では、競技プログラミングの問題にたまに出てくる、グランディ数についての解説記事です。解説と言いつつ、ひたすら自己流の証明を書きなぐった記事みたいになってしまったので、読みづらいかもしれません・・・。内容としてはグランディ数の基礎的な部分しか扱っていないので、知っている人は読む必要がないかもしれません。 グランディ数を知ると何ができる? 競技プログラミングでたまに見かける、2人で交互に行う系のゲームの勝敗判定を行う問題の解法によくグランディ数が使われます。実装自体はとても簡単なので、知らないと全くわからないが、知っていると超簡単になる傾向があります。なので知っていて損ではないと思います。グランディ数自体はとても面白いので、少し興味があれば知っておく
Q:これは何の構造を表しているでしょう? グラフ理論 上の構造のように、頂点(ノードともいいます)の集まりと、2つの頂点をつなぐ辺(エッジともいいます)の集まりでできたもののことを「グラフ」あるいは「ネットワーク」と呼び*1、このような構造を研究する分野こそが「グラフ理論(Graph theory)」です。今回はそんなグラフを使うと、身近なものの新たな側面が見えてくる話。 (余談ですが「グラフ」という用語は、数学だと関数のグラフとか円グラフみたいなやつもあって検索精度が悪いです。グラフ理論に関してわからないことがあった場合に「グラフ ○○」や「グラフ理論 ○○」とググるよりも、「ネットワーク ○○」とググったほうが得たい情報にリーチしやすいというライフハックが知られています) さて、冒頭のグラフです。グラフ理論の知識なんかひとつもなくても、このグラフから読み取れることはいくつもあります。例
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く