Submit Search
Upload
Rolling hash
•
9 likes
•
9,631 views
HCPC: 北海道大学競技プログラミングサークル
Follow
ローリングハッシュとサフィックスアレイ
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 25
Download now
Download to read offline
Recommended
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
AtCoder Inc.
双対性
双対性
Yoichi Iwata
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
RMQ クエリ処理
RMQ クエリ処理
HCPC: 北海道大学競技プログラミングサークル
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
Recommended
最大流 (max flow)
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
Binary indexed tree
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
AtCoder Inc.
双対性
双対性
Yoichi Iwata
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
RMQ クエリ処理
RMQ クエリ処理
HCPC: 北海道大学競技プログラミングサークル
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
様々な全域木問題
様々な全域木問題
tmaehara
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
AtCoder Inc.
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
Convex Hull Trick
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
abc032
abc032
AtCoder Inc.
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
Abc009
Abc009
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
AtCoder Inc.
直前合宿 講義スライド
直前合宿 講義スライド
tozan gezan
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
AtCoder Inc.
arc047
arc047
AtCoder Inc.
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
写像 12 相
写像 12 相
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
HCPC: 北海道大学競技プログラミングサークル
More Related Content
What's hot
様々な全域木問題
様々な全域木問題
tmaehara
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
AtCoder Inc.
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
Convex Hull Trick
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
abc032
abc032
AtCoder Inc.
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
Masaki Hara
動的計画法を極める!
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
Abc009
Abc009
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
AtCoder Inc.
直前合宿 講義スライド
直前合宿 講義スライド
tozan gezan
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
AtCoder Inc.
arc047
arc047
AtCoder Inc.
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
What's hot
(20)
様々な全域木問題
様々な全域木問題
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Rolling Hashを殺す話
Rolling Hashを殺す話
Convex Hull Trick
Convex Hull Trick
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
abc032
abc032
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
動的計画法を極める!
動的計画法を極める!
Abc009
Abc009
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
直前合宿 講義スライド
直前合宿 講義スライド
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
arc047
arc047
色々なダイクストラ高速化
色々なダイクストラ高速化
More from HCPC: 北海道大学競技プログラミングサークル
写像 12 相
写像 12 相
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
HCPC: 北海道大学競技プログラミングサークル
More from HCPC: 北海道大学競技プログラミングサークル
(20)
写像 12 相
写像 12 相
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
Recently uploaded
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Recently uploaded
(9)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
Rolling hash
1.
2015/06 ローリングハッシュと Suffix Array 北海道大学 情報知識ネットワーク研究室 情報理工学専攻
修士 1年 栗田 和宏 1
2.
部分文字列検索 ✤ テキストT:検索する文字列 テキスト長をnとする. ✤ パターンP:見つけたい文字列 パターン長をmとする. ✤
自明な方法:O(nm) 2
3.
ナイーブな部分文字列検索 ✤ テキスト:abracadabra パターン:abr 3 abracadabra abr
4.
ナイーブな部分文字列検索 ✤ テキスト:abracadabra パターン:abr 4 abracadabra abr
5.
ナイーブな部分文字列検索 ✤ テキスト:abracadabra パターン:abr 5 abracadabra abr
6.
ナイーブな部分文字列検索 ✤ テキスト:abracadabra パターン:abr 6 abracadabra abr
7.
ナイーブな部分文字列検索 ✤ テキスト:abracadabra パターン:abr 7 abracadabra abr この方法では部分文字列検索に O(nm)時間かかる
8.
高速な文字列検索 ✤ ローリングハッシュを使おう! ✤ 文字列を値にするハッシュ関数を用いて値が一致した 時に文字列が一致したとする. 8
9.
高速な文字列検索 ✤ ローリングハッシュを使おう! ✤ 文字列を値にするハッシュ関数を用いて値が一致した 時に文字列が一致したとする. ✤
その前にハッシュとは何か知っていますか? 9
10.
ハッシュとは? 10 https://ja.wikipedia.org/wiki/%E3%83%8F %E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0
11.
ローリングハッシュ ✤ 文字1文字を値とし,その値と基数の積の総和をハッ シュ値とするハッシュ関数を使う. 11
12.
ローリングハッシュ ✤ 文字1文字を値とし,その値と基数の積の総和をハッ シュ値とするハッシュ関数を使う. 12 abr =
1*10^2 + 2*10^1 + 5*10^0 = 125 a = 1, b = 2, r = 5, 基数:10
13.
ハッシュ値の計算 ✤ 愚直にハッシュ値を毎回計算するとハッシュ値の計算 にO(m)時間かかり,結局O(nm)時間かかってしまう. 13
14.
ハッシュ値の計算 ✤ 愚直にハッシュ値を毎回計算するとハッシュ値の計算 にO(m)時間かかり,結局O(nm)時間かかってしまう. ✤ なので,ローリングしながらハッシュ値を計算するこ とで毎回のハッシュ値計算をO(1)時間にする. 14
15.
ハッシュ値の計算 15 abracadabra 125 abra = 125
16.
ハッシュ値の計算 16 abracadabra 251 abra = 125
17.
ハッシュ値の計算 17 abracadabra 513 abra = 125
18.
ハッシュ値の計算 18 abracadabra 513 1つ前のハッシュ値に基数をかけ,新しい 文字に対応する値を足し,先頭文字に対応 する値を引く. abra = 125
19.
接尾辞配列(Suffix array) 19 ✤ 文字列のある場所から末尾までの文字列を接尾辞 という. ✤
1つの文字列のすべての接尾辞を辞書順にソートした ものを接尾辞配列という. ✤ 自明にO(n2log n)で作れる.
20.
接尾辞配列の例 20 ✤ abracadabraの接尾辞配列
21.
接尾辞配列で何ができるか? 21 ✤ 文字列の検索(さっきと同じ問題)がO(m log
n)で 解ける.場合によってはローリングハッシュよりも 高速に解ける. ✤ LCP Array(Longest Common Prefix Array)との 組み合わせで繰り返し出現する部分文字列を見つける ことができる.(他にもいろいろできるっぽい)
22.
記号の説明 ✤ 接尾辞配列のO(n(log n)2)時間構築アルゴリズムを 紹介する. ✤
S[i, k]:文字列Sのi文字目からk文字の部分文字列 ✤ rankk(i):S[i, k]がすべてのk文字の部分文字列を ソートした時に何番目に小さいか 22
23.
接尾辞配列の構築 ✤ 基本的なアイディアはダブリングである. ✤ rankk(i)とrank2k(i)のペアをソートすることでi文字 目からi
+ 2k文字目まではソートされる ✤ rankのソートをlog n回行うことでO(n (log n)2)で 構築可能 23
24.
接尾辞配列の構築 24 sa[i] S[sa[i], 2]
S[sa[i], 4] rank2(sa[i]) rank2(sa[i] + 2) 11 emp emp 0 -1 10 a a 1 -1 0 ab abra 2 8 7 ab abra 2 8 3 ac acad 3 4 5 ad adab 4 2 1 br bra 5 1
25.
最新の接尾辞配列の構築法 ✤ SA-ISという手法で線形時間構築が可能! (俺には理解できませんでした.) 25
Download now