Submit Search
Upload
ダブル配列の豆知識
•
15 likes
•
8,460 views
S
s5yata
Follow
ダブル配列を実装する上で知っていると役に立つかもしれない豆知識を並べたものです.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 27
Download now
Download to read offline
Recommended
ダブル配列の実装方法
ダブル配列の実装方法
Higashiyama Masahiko
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
Kensuke Otsuki
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
Quine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
Recommended
ダブル配列の実装方法
ダブル配列の実装方法
Higashiyama Masahiko
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
Kensuke Otsuki
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
Quine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
ZDD基礎
ZDD基礎
reew2n
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?
jundoll
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
文字列検索のいろいろ
文字列検索のいろいろ
Kazuma Mikami
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Chokudai search
Chokudai search
AtCoder Inc.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
文字列アルゴリズム
文字列アルゴリズム
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
AtCoder Regular Contest 001
AtCoder Regular Contest 001
AtCoder Inc.
様々な全域木問題
様々な全域木問題
tmaehara
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
Shunji Umetani
grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015
s5yata
TrieとLOUDS??
TrieとLOUDS??
Masahiko Hashimoto
More Related Content
What's hot
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
HCPC: 北海道大学競技プログラミングサークル
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
ZDD基礎
ZDD基礎
reew2n
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?
jundoll
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
文字列検索のいろいろ
文字列検索のいろいろ
Kazuma Mikami
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Chokudai search
Chokudai search
AtCoder Inc.
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
文字列アルゴリズム
文字列アルゴリズム
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
AtCoder Regular Contest 001
AtCoder Regular Contest 001
AtCoder Inc.
様々な全域木問題
様々な全域木問題
tmaehara
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
Shunji Umetani
What's hot
(20)
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
ZDD基礎
ZDD基礎
動的計画法を極める!
動的計画法を極める!
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
ウェーブレット木の世界
ウェーブレット木の世界
Rolling hash
Rolling hash
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
文字列検索のいろいろ
文字列検索のいろいろ
最大流 (max flow)
最大流 (max flow)
Chokudai search
Chokudai search
Glibc malloc internal
Glibc malloc internal
文字列アルゴリズム
文字列アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
AtCoder Regular Contest 001
AtCoder Regular Contest 001
様々な全域木問題
様々な全域木問題
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
Viewers also liked
grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015
s5yata
TrieとLOUDS??
TrieとLOUDS??
Masahiko Hashimoto
C言語なWebSocketの遊び方。
C言語なWebSocketの遊び方。
Masahiko Hashimoto
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
takesako
Popcntによるハミング距離計算
Popcntによるハミング距離計算
Norishige Fukushima
Perl で自然言語処理
Perl で自然言語処理
Toshinori Sato
#ABC17 : Alphabet of Innovations, Academic Concepts and Emerging Movements
#ABC17 : Alphabet of Innovations, Academic Concepts and Emerging Movements
Duane Holland
SMARTI
SMARTI
SMARTI ETN Comms
De felipe iii a carlos ii
De felipe iii a carlos ii
rousbell
Bienvenidos actualizando información sobre BETT & ISE 2017
Bienvenidos actualizando información sobre BETT & ISE 2017
groupVision | optimizing group collaboration
Popular Struggles & Movements
Popular Struggles & Movements
Mukund Ingle
New Heavens & New Earth
New Heavens & New Earth
childrensministry
Offshore Maintenance Success: Adding $434M to the Bottom Line
Offshore Maintenance Success: Adding $434M to the Bottom Line
Robert Mason
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
(^-^) togakushi
Insignias digitales. trabajo final.Lucy Fernández
Insignias digitales. trabajo final.Lucy Fernández
Lucy Fernandez
Lipril (Lisinopril Dihydrate Tablets)
Lipril (Lisinopril Dihydrate Tablets)
Clearsky Pharmacy
Finansijski izvjestaj o radu za 2016. godinu - Župa u srcu
Finansijski izvjestaj o radu za 2016. godinu - Župa u srcu
Zupa U srcu
Prepare se para sua startup de sucesso!
Prepare se para sua startup de sucesso!
Igor Fonseca
Event Report - Worforce Software Vision 2017 - Time to start the boosters
Event Report - Worforce Software Vision 2017 - Time to start the boosters
Holger Mueller
UI composition
UI composition
Johan Cambre
Viewers also liked
(20)
grn_ts の紹介 - Groonga Meatup 2015
grn_ts の紹介 - Groonga Meatup 2015
TrieとLOUDS??
TrieとLOUDS??
C言語なWebSocketの遊び方。
C言語なWebSocketの遊び方。
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
Popcntによるハミング距離計算
Popcntによるハミング距離計算
Perl で自然言語処理
Perl で自然言語処理
#ABC17 : Alphabet of Innovations, Academic Concepts and Emerging Movements
#ABC17 : Alphabet of Innovations, Academic Concepts and Emerging Movements
SMARTI
SMARTI
De felipe iii a carlos ii
De felipe iii a carlos ii
Bienvenidos actualizando información sobre BETT & ISE 2017
Bienvenidos actualizando información sobre BETT & ISE 2017
Popular Struggles & Movements
Popular Struggles & Movements
New Heavens & New Earth
New Heavens & New Earth
Offshore Maintenance Success: Adding $434M to the Bottom Line
Offshore Maintenance Success: Adding $434M to the Bottom Line
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
Insignias digitales. trabajo final.Lucy Fernández
Insignias digitales. trabajo final.Lucy Fernández
Lipril (Lisinopril Dihydrate Tablets)
Lipril (Lisinopril Dihydrate Tablets)
Finansijski izvjestaj o radu za 2016. godinu - Župa u srcu
Finansijski izvjestaj o radu za 2016. godinu - Župa u srcu
Prepare se para sua startup de sucesso!
Prepare se para sua startup de sucesso!
Event Report - Worforce Software Vision 2017 - Time to start the boosters
Event Report - Worforce Software Vision 2017 - Time to start the boosters
UI composition
UI composition
Recently uploaded
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Recently uploaded
(10)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
ダブル配列の豆知識
1.
ダブル配列 の 豆知識 矢田
晋 @s5yata 2013/9/1 1 ダブル配列の豆知識 #DSIRNLP
2.
自己紹介 経緯 大学ではダブル配列の研究をしていた
ダブル配列は 10 回以上実装した 実績 Darts-clone Darts(Double-ARray Trie System)のクローン トライだったりトライじゃなかったり 2013/9/1 ダブル配列の豆知識 #DSIRNLP 2
3.
あらすじ トライとダブル配列 トライ
= 抽象データ構造 ダブル配列 = トライの実装 ダブル配列の豆知識 実装の基本 更新時間の短縮 検索速度の向上 空間効率の向上 2013/9/1 3 ダブル配列の豆知識 #DSIRNLP
4.
トライとダブル配列 トライ 文字列をキーとする連想配列の実装
キーの一部をラベルとする木構造 情報検索や自然言語処理における用途 基礎語彙やキーワードの辞書化 ダブル配列 配列ベースのトライ実装 配列 BASE, CHECK [, TAIL] 2013/9/1 ダブル配列の豆知識 #DSIRNLP 4
5.
トライ ラベル付きの木構造 ラベルは節点もしくは枝に貼り付ける
経路上のラベルをつなげると文字列になる 終端ラベル(‘$’)を入れると実装しやすい 2013/9/1 ダブル配列の豆知識 #DSIRNLP 5 N U M A L L P T R O T R $ $ $ $ $
6.
ダブル配列 配列によるトライの実装 BASE
= 子ノード番号へのオフセット 子ノード番号 = オフセット + ラベル CHECK = 親ノード番号 2013/9/1 ダブル配列の豆知識 #DSIRNLP 6 0 1 2 3 4 5 6 7 … BASE 3 … CHECK 1 1 … オフセット + ラベル
7.
実装の基本 2013/9/1 ダブル配列の豆知識 #DSIRNLP 7
8.
内部データ構造 理論的構成 Array<BASE>,
Array<CHECK> BASE, CHECK の参照で個別にキャッシュミス 現実的構成 Node = { BASE, CHECK } Array<Node> Node がキャッシュラインに収まる キャッシュミスを半減できる 2013/9/1 ダブル配列の豆知識 #DSIRNLP 8
9.
演算方法 排他的論理和の方が実装しやすい BASE
= 子ノード番号へのオフセット 子ノード番号 = オフセット ⊕ ラベル 排他的論理和の利点 オーバーフローとアンダーフローの不安がない ダブル配列をブロック単位で管理できる ラベルが 8-bit のときブロックの大きさは 256 2013/9/1 ダブル配列の豆知識 #DSIRNLP 9
10.
末尾文字列の圧縮 TAIL 根から直近の分岐までの文字列をまとめる
ノードの削減によりメモリ使用量が減る 動的なダブル配列では隙間が気になる 2013/9/1 ダブル配列の豆知識 #DSIRNLP 10 N U M L L P O T R $ $ $ A$ TR$
11.
更新時間の短縮 2013/9/1 ダブル配列の豆知識 #DSIRNLP 11
12.
使いまーす 入ってまーす 更新の手順 入力文字列に対する経路を確認 なければ追加する
使おうとした Node が使えないとき(衝突) 2013/9/1 ダブル配列の豆知識 #DSIRNLP 12 0 1 2 3 4 5 6 7 … Node … 0 1 2 3 4 5 6 7 … Node …
13.
入ってまーす 衝突の解決 動かしやすい方を選択する 兄弟の数が少ないノードを選択する
兄弟の数が多いほど動かしにくいため 動かしやすい方を退避する 退避先として使える隙間を探す 2013/9/1 ダブル配列の豆知識 #DSIRNLP 13 使いまーす Node … …
14.
隙間探しの効率化 未使用ノードの双方向連結リスト化 BASE
に次の未使用ノード CHECK に前の未使用ノード 2013/9/1 ダブル配列の豆知識 #DSIRNLP 14 0 1 2 3 4 5 6 7 … BASE –3 –7 –1 … CHECK –7 –1 1 –3 …
15.
隙間探しの効率化 隙間探しのポイント 常に先頭から探索するのは危険
理由:前の方に使いにくい隙間がたまる可能性 対処 1:前回の探索位置から再開する 対処 2:探索ノード数を制限する 静的な構築では後半だけの探索で十分 理由:衝突は完全に回避できる 対処:探索範囲を後半 N ノードのみにする 2013/9/1 ダブル配列の豆知識 #DSIRNLP 15
16.
兄弟探しの効率化 連結リストベースのトライに歩み寄り 先頭の子ノードのラベルを保持
次の兄弟ノードのラベルを保持 ノード番号はオフセットを使って求める 利点 1:兄弟探しにおいて総当りしなくてよい 利点 2:文字列補完も効率化できる(おまけ) 欠点:サイズが大きくなる 2013/9/1 ダブル配列の豆知識 #DSIRNLP 16
17.
ブロック単位の管理 ブロックについて ブロック内にある未使用ノードの数
隙間探しにおける探索条件として使う 隙間探しに失敗した回数 失敗しやすいブロックは探索しない 未使用ノードの管理 未使用ノードはブロック内で双方向連結リスト化 ブロックはブロック同士で双方向連結リスト化 2013/9/1 ダブル配列の豆知識 #DSIRNLP 17
18.
検索速度の向上 2013/9/1 ダブル配列の豆知識 #DSIRNLP 18
19.
前半部分文字列の検索 例 入力:
“ANDROID” 出力: “A”, “AN”, “AND”, “ANDROID” 終端ラベル 終端ノードかどうか 終端ラベルを持つ子ノードが存在するかどうか 使い方 経路上の各ノードが終端ノードかどうかを確認する 2013/9/1 ダブル配列の豆知識 #DSIRNLP 19
20.
静的な構築 動的に構築したダブル配列 ノードがばらばらに配置された状態
根付近以外ではキャッシュミスが起きにくい(共通) 静的に構築したダブル配列 ノードが深さ優先に配置された状態 根付近以外ではキャッシュミスが起きにくい(共通) 葉付近でもキャッシュミスが起きにくい 2013/9/1 ダブル配列の豆知識 #DSIRNLP 20
21.
空間効率の向上 2013/9/1 ダブル配列の豆知識 #DSIRNLP 21
22.
TAIL のマージ 同じ文字列なら共有可能
更新のあるタスクでは難しい 同じ文字列を探すのに時間がかかる 探すためのデータ構造を使うと余計に大きくなる 後半部分列も共有可能 たとえば, “DROID” は “ANDROID” の後半が使える おまけ キャッシュミスを減らせる 2013/9/1 ダブル配列の豆知識 #DSIRNLP 22
23.
CHECK のラベル化 親ノード番号の代わりにラベルを使う
基本的にノード番号は 32-bit でラベルは 8-bit BASE を 24-bit にすれば Node を 32-bit にできる 更新のあるタスクでは難しい 衝突したときに親ノードがわからない 動かしやすい方を選択するのは難しい BASE が重複するとおかしくなる 親ノードが複数になってしまう 2013/9/1 ダブル配列の豆知識 #DSIRNLP 23
24.
相対オフセットと拡張ビット 24-bit BASE
で大規模なダブル配列を実現 BASE に拡張用のビットを加える 拡張時はオフセットを 256 倍にする オフセットを相対値にする 拡張時に粒度が粗くなる問題への対処 拡張ビットによる分岐はなくせる (Node >> 10) << ((Node & (1U << 9)) >> 6) Darts-clone より抜粋(拡張ビットは 1U << 9) 2013/9/1 ダブル配列の豆知識 #DSIRNLP 24
25.
グラフ化 同じ部分木なら共有可能 CHECK
をラベル化して BASE を重複させる トライ(木構造)ではなく DAWG(グラフ)になる グラフを構築してからダブル配列を構築する 静的な構築であれば,意外に時間がかからない Darts と Darts-clone の比較 http://code.google.com/p/darts-clone/wiki/Evaluation 2013/9/1 ダブル配列の豆知識 #DSIRNLP 25
26.
まとめ 2013/9/1 ダブル配列の豆知識 #DSIRNLP 26
27.
まとめ ダブル配列について 単純に実装するだけならそれなりの難易度
ただし,バグが潜みやすい上にデバッグが困難 実装前に考えるべきことは意外に多い TAIL の有無,静的・動的,更新時間の短縮方法など トライとは限らない CHECK をラベル化すればグラフも表現可能 2013/9/1 ダブル配列の豆知識 #DSIRNLP 27
Download now