SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
2014/01/11 @ DSIRNLP 5

Cache-Oblivious
データ構造入門
秋葉 拓哉 (@iwiwi)
アウトライン
1. B-Tree が何故使われるのか? (復習)

2. Cache-Oblivious の考え方と意義
3. Cache-Oblivious 探索木 (vEB Layout)
4. 世の中の Cache-Oblivious 事例

Cache-Oblivious データ構造入門 (@iwiwi)

3
MySQL の索引のデータ構造は?
http://dev.mysql.com/doc/refman/5.1/ja/mysql-indexes.html

Cache-Oblivious データ構造入門 (@iwiwi)

!!!
4
MySQL の索引のデータ構造は?

B-Tree!
MySQL に限らず多くのデータベースシステムは
B-Tree を使います

Cache-Oblivious データ構造入門 (@iwiwi)

5
MySQL の索引のデータ構造は?

なんで B-Tree?
普通の二分探索木じゃだめ?

Cache-Oblivious データ構造入門 (@iwiwi)

6
なぜ B-Tree?

と
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Memory_module_DDRAM_20-03-2006.jpg

http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Hdd_medalist.jpg

があるから
Cache-Oblivious データ構造入門 (@iwiwi)

7
なぜ B-Tree
メモリは高速
でも小さい
ディスクは遅い
でも大きい
大規模なデータベースは
ディスクに保存されていて
メモリに読み込みながら処理をする.
Cache-Oblivious データ構造入門 (@iwiwi)

8
B-Tree のデータ構造
普通の二分探索木

B-Tree

多分木になってる
(最大の分岐数 m)

Cache-Oblivious データ構造入門 (@iwiwi)

9
なぜ B-Tree の方が良いか?
大事な前提(若干雑)
1. ディスクの読み込み時間 >> 計算時間
2. ディスクである箇所を読み込むと周辺も含
めてそこそこ大きく読まれる

前提より
• ディスクを読み込む回数だけを考える
– 普段の議論:「O(ほげ) 時間」
– 今回の議論:「ディスクI/O 𝑂(ほげ) 回」

• 一度に読み込まれるサイズを 𝐵 とおく
Cache-Oblivious データ構造入門 (@iwiwi)

10
データの探索にかかる I/O 回数
二分探索木
• 𝑂 log 𝑛 回
一回の I/O で 2 分岐

B-Tree
• 𝑂 log 𝐵 𝑛 回

一回の I/O で Θ(𝐵) 分岐!

↑ノードのサイズをブロックサイズ 𝐵に合わせる

B-Tree のほうが log 𝐵 倍ぐらい早い
これは平気で 10 倍とかになるので大違い!
Cache-Oblivious データ構造入門 (@iwiwi)

11
このように

ディスクとメモリを使うなら
そのことを意識したデータ構造を
使う必要がある!

Cache-Oblivious データ構造入門 (@iwiwi)

12
ちなみに
メモリとキャッシュメモリ間でも
似たようなことを考えないといけない
より一般に,「メモリ階層」を意識しないといけない
(↓こういうやつ)
レジスタ
L1
L2
L3
メモリ
ディスク
テープ?

Cache-Oblivious データ構造入門 (@iwiwi)

13
Cache-Oblivious とは

Cache-Oblivious データ構造入門 (@iwiwi)

14
Cache-Oblivious

Cache-oblivious = キャッシュを忘れて
Cache-Oblivious データ構造入門 (@iwiwi)

15
Cache-Oblivious

えっ!?

忘れてしまうの?
Cache-Oblivious データ構造入門 (@iwiwi)

16
Cache-Oblivious

えっ!?

忘れてしまうの?
Cache-Oblivious データ構造入門 (@iwiwi)

17
Cache-Aware vs. Cache-Oblivious
Cache-Aware = 普通
ブロックのサイズ 𝐵 を事前に
知っていて,それを使ってデータ構造を設計する
(例:B-Tree)

Cache-Oblivious = 縛りプレイ
ブロックのサイズ 𝐵 を知らないことにする!
知らないなりに頑張る
𝐵 がどんな値であったとしてもいい感じになるよう頑
張る
※本当はメモリサイズ 𝑀 というパラメータもあって,同様にそれも知らない
ことにする.今回は出てこないので省略
Cache-Oblivious データ構造入門 (@iwiwi)

18
Cache-Aware vs. Cache-Oblivious
計算機の動きの前提は同じ
• 読み込みの回数を計算量とする
• 一回に 𝐵 バイト読み込まれる

やりたいことも同じ (例:探索木)
ただし,Cache-Oblivious データ構造は
𝑩 の値を使ってはいけない
(つまり𝐵の値を事前に知らない)
Cache-Oblivious データ構造入門 (@iwiwi)

19
Cache-Oblivious でない例
B-Tree は Cache-Oblivious ではない

↑ノードのサイズをブロックに合わせる

ブロックサイズ 𝐵 を知らないと
何分木にしていいかわからない!
ブロックサイズ 𝐵 を使ってデータ構造を設計している

Cache-Oblivious データ構造入門 (@iwiwi)

20
なんでそんなことをするのか?
Cache-Oblivious データ構造の利点

1つめ:
ブロックサイズに合わせたパラメータ調整を環境
ごとに行う必要がない!
ポータブル,手軽に使える

Cache-Oblivious データ構造入門 (@iwiwi)

21
なんでそんなことをするのか?
Cache-Oblivious データ構造の利点

2つめ:
全てのメモリ階層ギャップに最適化される
• ディスク ⇔ メモリ・・・ 𝐵Mem
• メモリ ⇔ キャッシュ・・・𝐵Cache
どんな 𝐵 の値でも性能が出る
→ どこのギャップに関しても良い性能!
Cache-Oblivious データ構造入門 (@iwiwi)

22
なんでそんなことをするのか?
Cache-Oblivious データ構造の利点

2つめ:
全てのメモリ階層ギャップに最適化される
データの大きさによってボトルネックは変わる
• メモリに収まる? → 𝐵Cache
• 収まらない? → 𝐵Mem
扱うデータのサイズによらず高性能なプログラム
にできる
Cache-Oblivious データ構造入門 (@iwiwi)

23
そんな都合の良いものが作れるの?
作れるんです!

Cache-Oblivious データ構造入門 (@iwiwi)

24
Cache-Oblivious 探索木
(vEB Layout)
Cache-Oblivious データ構造入門 (@iwiwi)

25
二分探索木があります

Cache-Oblivious データ構造入門 (@iwiwi)

26
以降,三角形を二分探索木と思って下さい

Cache-Oblivious データ構造入門 (@iwiwi)

27
でかい二分探索木をイメージして下さい

𝑛 ノード

Cache-Oblivious データ構造入門 (@iwiwi)

28
このツリーをディスクによさげに保存する

𝑛 ノード

高さ
ℎ = log 2 𝑛

ディスク
Cache-Oblivious データ構造入門 (@iwiwi)

29
高さがだいたい半分のところで切る

高さ ℎ/2

Cache-Oblivious データ構造入門 (@iwiwi)

30
上半分は約

𝒏 ノードの木になる

約 𝒏
ノード

Cache-Oblivious データ構造入門 (@iwiwi)

高さ ℎ/2

31
切れ目(=上半分の木の葉)には約

𝒏 ノード

約 𝑛
ノード

約

𝒏

Cache-Oblivious データ構造入門 (@iwiwi)

32
下半分にぶら下がってる木も約

𝒏 ノード

約 𝑛
ノード

高さ ℎ/2

約 𝑛
ノード

Cache-Oblivious データ構造入門 (@iwiwi)

33
それが約

𝒏 個ある

約 𝑛
ノード

…… 約

𝑛
ノード

……
約

𝒏個

Cache-Oblivious データ構造入門 (@iwiwi)

34
約 𝒏 ノード × 約 𝒏 個

𝑇0
……

𝑇1 𝑇2

𝑇

Cache-Oblivious データ構造入門 (@iwiwi)

𝑛

35
それぞれの木を連続部分に保存!

𝑇0
……

𝑇1 𝑇2

ディスク

𝑇0

𝑇

𝑇1
Cache-Oblivious データ構造入門 (@iwiwi)

𝑛

𝑇2

…

𝑇

𝑛

36
それぞれの木はどうやって保存?

約 𝒏
ノード

ディスク
Cache-Oblivious データ構造入門 (@iwiwi)

37
それぞれの木はどうやって保存?

約 𝒏
ノード

再帰的に同じことをする!
またこのツリーを上下に分割

ディスク
Cache-Oblivious データ構造入門 (@iwiwi)

38
こうやってツリーを保存することを

vEB Layout

𝑇0

(vEB = Van Emde Boas)
と呼びます

……

𝑇1 𝑇2

ディスク

𝑇0

𝑇

𝑇1
Cache-Oblivious データ構造入門 (@iwiwi)

𝑛

𝑇2

…

𝑇

𝑛

39
vEB Layout の性質
Cache-Oblivious である!
再帰してるだけ.ブロックサイズ 𝐵 は出てこなかった.
𝐵 を全く知らずに構築したのに……なんと

要素の探索が I/O 𝑂 log 𝐵 𝑛 回でできる!
↑
𝑩 を知ってて作った B-Tree と性能が一致!
(オーダー記号に隠れた定数倍を除いて)

(𝐵 : ブロックのサイズです ← 忘れた人むけ)
Cache-Oblivious データ構造入門 (@iwiwi)

40
vEB Layout の性質
Cache-Oblivious である!
再帰してるだけ.ブロックサイズ 𝐵 は出てこなかった.
𝐵 を全く知らずに構築したのに……なんと

要素の探索が I/O 𝑂 log 𝐵 𝑛 回でできる!
↑
𝑩 を知ってて作った B-Tree と性能が一致!
(オーダー記号に隠れた定数倍を除いて)

最悪の場合でも I/O 回数は
(𝐵 : ブロックのサイズですlog 𝐵 𝑛 回
2 + 4 ← 忘れた人むけ)
Cache-Oblivious データ構造入門 (@iwiwi)

41
計算量
𝑶 𝐥𝐨𝐠

𝑩

𝒏 回の読み込みでできる理由

ツリーのサイズ:𝑛,

𝑛, 4 𝑛, 8 𝑛, 16 𝑛, … …

いつかサイズは 𝐵 以下になる
そしてその時,少なくとも

𝐵

サイズが 𝐵 以下になったら一気に読み込まれる
→ 結局多分木みたいに動作する( Ω 𝐵 分木)
Cache-Oblivious データ構造入門 (@iwiwi)

42
ちなみに:Cache-Oblivious 関係ない話
木でこういう分割をするのは,
vEB Tree というデータ構造でも使う
vEB Tree はキーの値の範囲の条件下で
• 検索が 𝑶 𝐥𝐨𝐠 𝐥𝐨𝐠 𝒏 時間
でできるおもしろデータ構造です
http://en.wikipedia.org/wiki/Van_Emde_Boas_tree

Cache-Oblivious データ構造入門 (@iwiwi)

43
世の中の Cache-Oblivious 事例

Cache-Oblivious データ構造入門 (@iwiwi)

44
他の Cache-Oblivious データ構造・アルゴリズム

データ構造
• 動的な探索木 (CO B-Tree)

– さっきのは静的な木だったので実際に動的にしようと思うと
もっと複雑なものが必要

• 順位キュー
• リスト
• ……

アルゴリズム
•
•
•
•

ソート (Funnel Sort)
FFT,行列乗算
グラフ探索
……

いっぱい
あります!

Cache-Oblivious データ構造入門 (@iwiwi)

45
Cache-Oblivious は本当に実用的か?
利点もあるけど,浸透しにくい
問題点1:
複雑すぎる物が多い
理論屋さんがオーダー記法での計算量だけを考えて作っている実装し
たくないものが多い

問題点2:
Cache-Aware に中々勝てない
定数倍の差はあり実測では速度で負けてしまう

Cache-Oblivious データ構造入門 (@iwiwi)

46
事例

TokuDB
MySQL, MariaDB 用ストレージエンジン

Fractal Tree™ Index なるものを使うらしい

Cache-Oblivious データ構造入門 (@iwiwi)

47
Fractal Tree™ Index
Wikipedia

公式

Cache-Oblivious データ構造入門 (@iwiwi)

48
事例

𝑇0
……

𝑇1 𝑇2

𝑇

𝑛

確かにフラクタルっぽい(?)
(※実際には Fractal Tree Index は vEB Layout より複雑なことをしています)

Cache-Oblivious データ構造入門 (@iwiwi)

49
論文 (MIT CSAIL)
Cache-Oblivious Streaming B-trees
Michael A. Bender, Martin Farach-Colton, Jeremy T. Fineman, Yonatan
Fogel, Bradley Kuszmaul, and Jelani Nelson
SPAA’07
Cache-Oblivious String B-Trees
Michael A. Bender, Martin Farach-Colton, and Bradley C. Kuszmaul
PODS’06
Concurrent Cache-Oblivious B-Trees
Michael A. Bender, Jeremy T. Fineman, Seth Gilbert, and Bradley C.
Kuszmaul
SPAA’05

Cache-Oblivious データ構造入門 (@iwiwi)

50
論文 (MIT CSAIL)
Cache-Oblivious Streaming B-trees
Michael A. Bender, Martin Farach-Colton, Jeremy T. Fineman, Yonatan
Fogel, Bradley Kuszmaul, and Jelani Nelson
SPAA’07

Chief Scientist

CTO

Chief Architect

Cache-Oblivious String B-Trees
Michael A. Bender, Martin Farach-Colton, and Bradley C. Kuszmaul
PODS’06
Concurrent Cache-Oblivious B-Trees
Michael A. Bender, Jeremy T. Fineman, Seth Gilbert, and Bradley C.
Kuszmaul
SPAA’05

MIT の Cache-Oblivious 研究ガチ勢の起業!
Cache-Oblivious データ構造入門 (@iwiwi)

51
使っているっぽい雰囲気?
TokuDB の公式サイトにあるスライド

http://www.tokutek.com/wp-content/uploads/2011/11/how-fractal-trees-work.pdf

Cache-Oblivious データ構造入門 (@iwiwi)

52
まとめ
• メモリ階層を意識したデータ構造

• Cache-Oblivious の考え方
• 基礎的テク:ツリーの vEB Layout
• 世の中の事例と課題
ありがとうございましたm(__)m
Cache-Oblivious データ構造入門 (@iwiwi)

53
おまけ:van Emde Boas の発音

https://www.youtube.com/watch?v=AjFtTQevtq0#t=14m15

Peter van Emde Boas と友人である Erik D. Demaine (MIT)
による発音が YouTube で聞けます
Cache-Oblivious データ構造入門 (@iwiwi)

54
謝辞
@kumagi さんのご意見をもとに発表時からスライド
を改訂しています,ありがとうございます.
@tmaehara さんに “van Emde Boas” さんの発音情報
を教えてもらいました,ありがとうございます.

Cache-Oblivious データ構造入門 (@iwiwi)

55

Más contenido relacionado

La actualidad más candente

指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdfcatupper
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
文脈自由文法の話
文脈自由文法の話文脈自由文法の話
文脈自由文法の話kogecoo
 

La actualidad más candente (20)

指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
文脈自由文法の話
文脈自由文法の話文脈自由文法の話
文脈自由文法の話
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 

Más de Takuya Akiba

分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17Takuya Akiba
 
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsTakuya Akiba
 
TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説Takuya Akiba
 
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説Takuya Akiba
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法Takuya Akiba
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-Takuya Akiba
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 
大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズムTakuya Akiba
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端Takuya Akiba
 

Más de Takuya Akiba (9)

分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
 
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
 
TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説
 
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
 

Cache-Oblivious データ構造入門 @DSIRNLP#5