Submit Search
Upload
ZDD基礎
•
Download as PPTX, PDF
•
4 likes
•
7,023 views
R
reew2n
Follow
slide of JOI summer seminar
Read less
Read more
Presentations & Public Speaking
Report
Share
Report
Share
1 of 57
Download now
Recommended
ZDD入門-お姉さんを救う方法
ZDD入門-お姉さんを救う方法
nishio
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
続き (動的木編) はこちら http://www.slideshare.net/iwiwi/2-12188845
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Union find(素集合データ構造)の解説です
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
Competitive Programming Advent Calendar 2012の12/01担当分の記事です。
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
情オリ2012春合宿講義資料
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
最小カットを使って「燃やす埋める問題」を解く方法について、問題とソースコードつきで、まとめました。ニコニコ生放送「TopCoderでプログラムしてみた」2000回記念放送の資料です。
Recommended
ZDD入門-お姉さんを救う方法
ZDD入門-お姉さんを救う方法
nishio
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
続き (動的木編) はこちら http://www.slideshare.net/iwiwi/2-12188845
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Union find(素集合データ構造)の解説です
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
Competitive Programming Advent Calendar 2012の12/01担当分の記事です。
指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
情オリ2012春合宿講義資料
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
最小カットを使って「燃やす埋める問題」を解く方法について、問題とソースコードつきで、まとめました。ニコニコ生放送「TopCoderでプログラムしてみた」2000回記念放送の資料です。
Chokudai search
Chokudai search
AtCoder Inc.
直交領域探索
直交領域探索
okuraofvegetable
JOI夏季セミナー2016 コンピュータ・ジオメトリ
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Nov 05, 2018 北海道大学競技プログラミングサークル勉強会
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
2013/1/9に統数研チャンネルにて、ウェーブレット木の解説をしました。岩波書店より出版されました「高速文字列解析の世界」の解説になっています。
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
ローリングハッシュとサフィックスアレイ
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
BIT
直前合宿 講義スライド
直前合宿 講義スライド
tozan gezan
DP Optimizationの解説をしました
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
PFIセミナー 2016/04/28
双対性
双対性
Yoichi Iwata
JOI春合宿2018講義資料
最適輸送の解き方
最適輸送の解き方
joisino
最適輸送問題(Wasserstein 距離)を解く方法についてのさまざまなアプローチ・アルゴリズムを紹介します。 線形計画を使った定式化の基礎からはじめて、以下の五つのアルゴリズムを紹介します。 1. ネットワークシンプレックス法 2. ハンガリアン法 3. Sinkhorn アルゴリズム 4. ニューラルネットワークによる推定 5. スライス法 このスライドは第三回 0x-seminar https://sites.google.com/view/uda-0x-seminar/home/0x03 で使用したものです。自己完結するよう心がけたのでセミナーに参加していない人にも役立つスライドになっています。 『最適輸送の理論とアルゴリズム』好評発売中! https://www.amazon.co.jp/dp/4065305144 Speakerdeck にもアップロードしました: https://speakerdeck.com/joisino/zui-shi-shu-song-nojie-kifang
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
勉強会: トポロジカルソート
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
ダブリング
ダブリング
satanic
高さMの根付き木において、ある頂点からN回親を辿って到達する頂点を調べるクエリを、準備O(MlogM)、クエリO(logN)で達成します。
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
KMCの例会講座で用いたスライドを一部編集したものです。 ビット演算を組み合わせたトリッキーな方法で様々な操作を高速に行う方法を紹介します。
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
色々なダイクストラ高速化とありますが結局はRadixHeapの解説です
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
2019年3月のJOI春合宿で行った講義のスライドです
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
競技プログラミングに特有のコーディングテクニックを紹介
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
前編 (平衡二分探索木編) はこちら http://www.slideshare.net/iwiwi/2-12188757
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
More Related Content
What's hot
Chokudai search
Chokudai search
AtCoder Inc.
直交領域探索
直交領域探索
okuraofvegetable
JOI夏季セミナー2016 コンピュータ・ジオメトリ
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Nov 05, 2018 北海道大学競技プログラミングサークル勉強会
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
2013/1/9に統数研チャンネルにて、ウェーブレット木の解説をしました。岩波書店より出版されました「高速文字列解析の世界」の解説になっています。
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
ローリングハッシュとサフィックスアレイ
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
BIT
直前合宿 講義スライド
直前合宿 講義スライド
tozan gezan
DP Optimizationの解説をしました
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
PFIセミナー 2016/04/28
双対性
双対性
Yoichi Iwata
JOI春合宿2018講義資料
最適輸送の解き方
最適輸送の解き方
joisino
最適輸送問題(Wasserstein 距離)を解く方法についてのさまざまなアプローチ・アルゴリズムを紹介します。 線形計画を使った定式化の基礎からはじめて、以下の五つのアルゴリズムを紹介します。 1. ネットワークシンプレックス法 2. ハンガリアン法 3. Sinkhorn アルゴリズム 4. ニューラルネットワークによる推定 5. スライス法 このスライドは第三回 0x-seminar https://sites.google.com/view/uda-0x-seminar/home/0x03 で使用したものです。自己完結するよう心がけたのでセミナーに参加していない人にも役立つスライドになっています。 『最適輸送の理論とアルゴリズム』好評発売中! https://www.amazon.co.jp/dp/4065305144 Speakerdeck にもアップロードしました: https://speakerdeck.com/joisino/zui-shi-shu-song-nojie-kifang
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
勉強会: トポロジカルソート
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
ダブリング
ダブリング
satanic
高さMの根付き木において、ある頂点からN回親を辿って到達する頂点を調べるクエリを、準備O(MlogM)、クエリO(logN)で達成します。
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
KMCの例会講座で用いたスライドを一部編集したものです。 ビット演算を組み合わせたトリッキーな方法で様々な操作を高速に行う方法を紹介します。
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
色々なダイクストラ高速化とありますが結局はRadixHeapの解説です
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
2019年3月のJOI春合宿で行った講義のスライドです
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
競技プログラミングに特有のコーディングテクニックを紹介
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
前編 (平衡二分探索木編) はこちら http://www.slideshare.net/iwiwi/2-12188757
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
What's hot
(20)
Chokudai search
Chokudai search
直交領域探索
直交領域探索
最大流 (max flow)
最大流 (max flow)
ウェーブレット木の世界
ウェーブレット木の世界
Rolling hash
Rolling hash
Binary indexed tree
Binary indexed tree
直前合宿 講義スライド
直前合宿 講義スライド
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
双対性
双対性
最適輸送の解き方
最適輸送の解き方
Topological sort
Topological sort
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
ダブリング
ダブリング
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
明日使えないすごいビット演算
明日使えないすごいビット演算
色々なダイクストラ高速化
色々なダイクストラ高速化
充足可能性問題のいろいろ
充足可能性問題のいろいろ
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
冬のLock free祭り safe
冬のLock free祭り safe
ZDD基礎
1.
スライドの前に この発表の後数え上げお姉さんの問題が登場 します。 こいつの言ってること全然よくわかんねぇな ~ってなったら諦めて数え上げお姉さんの動 画でも見て暇を潰そう。
2.
組み合わせ集合
3.
組み合わせ集合 組み合わせの集合です(完)
4.
組み合わせ集合 組み合わせの集合です(完) 例:{H,T,D,N}の組み合わせ集合 {{H,D,N}, {T,D,N}} {{φ(空集合)}, {T},{H,T,N}} etc…
5.
組み合わせ集合 組み合わせの集合です(完) 愚直に列挙は列挙数が増えると大変
6.
場合分け二分木
7.
場合分け二分木 場合分け二分木とは
8.
場合分け二分木 場合分け二分木とは 葉以外のノードに要素、辺と葉に1/0を割り当 てた二分木 子への辺は有向辺とする
9.
場合分け二分木 場合分け二分木とは 葉以外のノードに要素、辺と葉に1/0を割り当て た二分木 子への辺は有向辺とする 組み合わせ集合を表すときに用いられるデータ構造。 ある組み合わせが木のパスと対応する。
10.
場合分け二分木の例 {{H,D,N},{T,D,N}} 実線は要素を用いる 1の枝 破線は要素を用いない 0の枝 T D NN 0 0 0
0 D NN 0 0 0 1 T D NN 0 0 0 1 D NN 0 0 0 0 H
11.
場合分け二分木の問題点 ノードが増えすぎる!!!
12.
場合分け二分木の問題点 ノードが増えすぎる!!! 要素が1つ増えるだけでノード数が二倍以上に 要素数が多くなるとメモリが足りなくなる どうしよう?
13.
アイデア 部分木が等しければまとめられそう? T D NN 0 0 0
0 D NN 0 0 0 1 T D NN 0 0 0 1 D NN 0 0 0 0 H
14.
アイデア 部分木が等しければまとめられそう? T D NN 0 0 0
0 D NN 0 0 0 1 T H ※もっとまとめられそう (下のN-0-0とか)
15.
zero-suppress (ゼロサプレス)という考え方 ざっくり言うと0を省くという考え方
16.
zero-suppress (ゼロサプレス)という考え方 ざっくり言うと0を省くという考え方 例 電卓の00000334→334 これをさっきの場合分け二分木に適用しよう! (??)
17.
zero-suppress (ゼロサプレス)という考え方 T D NN 0 0 0
0 D NN 0 0 0 1 T D NN 0 0 0 1 D NN 0 0 0 0 H
18.
zero-suppress (ゼロサプレス)という考え方 T D NN 0 0 0
0 D NN 0 0 0 1 D NN 0 0 0 1 H good bye… ※他もまとめられます
19.
ZDD
20.
ZDDのルール 基本は場合分け二分木
21.
ZDDのルール 基本は場合分け二分木 それに加え以下の圧縮規則を適用(適用順は 任意) 等価節点の共有 等価なノード(自身のラベルと子が等しい) を共有する。
22.
ZDDのルール 基本は場合分け二分木 それに加え以下の圧縮規則を適用(適用順は任意) 等価節点の共有 等価なノード(自身のラベルと子が等しい)を共有 する。 冗長節点の削除 1の枝が0を指しているノードを削除して0の枝の子に直 結させる。
23.
ZDDのルール 基本は場合分け二分木 それに加え以下の圧縮規則を適用(適用順は任意) 等価節点の共有 等価なノード(自身のラベルと子が等しい)を共有 する。 冗長節点の削除 1の枝が0を指しているノードを削除して0の枝の子に直 結させる。 これ以上圧縮出来ない形のZDDを既約なZDDという
24.
ZDDの例 T D NN 0 0 0
0 D NN 0 0 0 1 T D NN 0 0 0 1 D NN 0 0 0 0 H T 0 D N 1 H
25.
冗長節点の削除について 冗長節点の削除 1の枝が0を指しているノードを削除して0の枝の 子に直結させる。(謎規則) 背景にゼロサプレスという考え方がある
26.
冗長節点の削除について 冗長節点の削除 1の枝が0を指しているノードを削除して0の枝の 子に直結させる。(謎規則) 背景にゼロサプレスという考え方がある 数千個のものから2つ、3つ選ぶとき、全部分 岐するのは冗長でしょみたいな たまご・牛乳・パンケーキの集合ために何千 個の商品の0の枝を指すのはアホらしい
27.
有効な場面 組み合わせ集合、中でも疎な集合に 有効(密な場合はBDDの方が良いこ とも)
28.
有効な場面 組み合わせ集合、中でも疎な集合に 有効(密な場合はBDDの方が良いこ とも) 辺の集合からグラフの集合とかも表 せる(例:お姉さん問題)
29.
有効な場面 組み合わせ集合、中でも疎な集合に有 効(密な場合はBDDの方が良いこと も) 辺の集合からグラフの集合とかも表せ る(例:お姉さん問題) 今回の後ろの発表はグラフがメインっぽ い(本もグラフ列挙)
30.
有効な場面 組み合わせ集合、中でも疎な集合に有効 (密な場合はBDDの方が良いことも) 辺の集合からグラフの集合とかも表せる (例:お姉さん問題) 今回の後ろの発表はグラフがメインっぽい (本もグラフ列挙) ※BDDはZDDの原型で圧縮ルールが少し違う データ構造
31.
ZDDの作り方 全探索しても作れるが、ZDDの意味が薄くなる
32.
ZDDの作り方 全探索しても作れるが、ZDDの意味が薄くなる ボトムアップ的手法とトップダウン的手法がある ボトムアップ的な手法は集合(ZDD)に対して 様々な演算(2つの集合をくっつけたり、集合の ある要素をON,OFFしたりなど)を行って構築す る。(つらそう)
33.
フロンティア法
34.
フロンティア コロンビアではない グラフの頂点の内、処理済みの辺と未処理の 辺両方に接続されている頂点の集合 A.フ ロ ン
テ ィ ア
35.
フロンティア法 ZDDをトップダウン的な手法で構築する手法。 こっちも結構難しい(小並感)
36.
フロンティア法 ZDDをトップダウン的な手法で構築する手法。 こっちも結構難しい(小並感) 既約な形で出来るとは限らない 雰囲気はグラフを幅優先で枝刈り探索みたい な
37.
フロンティア法の背景 ZDDを上から作っていきたい
38.
フロンティア法の背景 ZDDを上から作っていきたい ZDDの全部の頂点を保持しておくのはヤバイ
39.
フロンティア法の背景 ZDDを上から作っていきたい ZDDの全部の頂点を保持しておくのはヤバイ 作りながら枝刈りやノードの共有をしたい
40.
フロンティア法の背景 ZDDを上から作っていきたい ZDDの全部の頂点を保持しておくのはヤバイ 作りながら枝刈りやノードの共有をしたい しかし子が生まれてないので難しい
41.
フロンティア法の背景 ZDDを上から作っていきたい ZDDの全部の頂点を保持しておくのはヤバイ 作りながら枝刈りやノードの共有をしたい しかし子が生まれてないので難しい 集合の状態を持つことで共有できるかどうか 判定しよう
42.
例:グラフのs-t経路の列挙 連結成分と次数だけを覚えておけばよい
43.
例:グラフのs-t経路の列挙 連結成分と次数だけを覚えておけばよい しかしそれだけでもZDDの1頂点あたりO(頂 点数)だけ記憶領域が必要
44.
例:グラフのs-t経路の列挙 連結成分と次数だけを覚えておけばよい しかしそれだけでもZDDの1頂点あたりO(頂 点数)だけ記憶領域が必要 グラフの全部の頂点を覚えるのはヤバそう
45.
例:グラフのs-t経路の列挙 連結成分と次数だけを覚えておけばよい しかしそれだけでもZDDの1頂点あたりO(頂 点数)だけ記憶領域が必要 グラフの全部の頂点を覚えるのはヤバそう 実はフロンティアの連結と次数だけ覚えてお けばよい
46.
例:グラフのs-t経路の列挙 S S T T
47.
フロンティア法まとめ ZDD作ると記憶領域爆発しちゃうよぅ・・・
48.
フロンティア法まとめ ZDD作ると記憶領域爆発しちゃうよぅ・・・ 枝刈りとかして乗り切ろう!
49.
フロンティア法まとめ ZDD作ると記憶領域爆発しちゃうよぅ・・・ 枝刈りとかして乗り切ろう! 状態持たせすぎて爆発しちゃうよぅ・・・
50.
フロンティア法まとめ ZDD作ると記憶領域爆発しちゃうよぅ・・・ 枝刈りとかして乗り切ろう! 状態持たせすぎて爆発しちゃうよぅ・・・ フロンティアの状態だけ覚えてなんとかしよ う!
51.
フロンティア法まとめ ZDD作ると記憶領域爆発しちゃうよぅ・・・ 枝刈りとかして乗り切ろう! 状態持たせすぎて爆発しちゃうよぅ・・・ フロンティアの状態だけ覚えてなんとかしよ う! 辺の処理順はうまくやろう(フロンティアが 爆発する可能性アリ)
52.
ふぇぇ・・・ZDD難しそうだよぅ・・・ C++のライブラリがあります(やったぜ) https://github.com/junkawahara Graphillionとかいう強そうなPythonのライブ ラリもある https://github.com/takemaru/graphillion/ wiki
53.
まとめ ZDDは組み合わせ集合を表すのに便利なデー タ構造 場合分け二分木をゼロサプレスという考え方 などを用いて圧縮 ZDDの代表的な作り方はボトムアップ的手法 とフロンティア法がある ライブラリで殴ろう(?)
54.
おまけ1 BDD
55.
BDDとZDD ZDDは元々BDDの派生 ゼロサプレスではなくあってもなくてもどっ ちでもいいような要素を省略する(適当)
56.
おまけ2 競プロの問題を 解く
57.
Alien Message 時間足りずにスライド書けなかったゾ~ 入力のグリッドマップをグラフに変換します グラフをライブラリに投げてハルミトン閉路 を検出します 終わり(やったぜ)
Download now