SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
HCPC 勉強会 2017/03/28
ー座標圧縮ー
担当:D1 鈴木 浩史
2017/3/28 HCPC 勉強会ー座圧ー 1
座標圧縮とは
• 広大な領域を対象とする問題はコンピュータの
手におえない
• 例①:1018の直線領域はメモリに乗らない
• 例②:109 × 109の格子領域も同様
• 単位領域あたり1bitで持っても~105
TB
• それ,不要な領域,ありませんか?
• はいプロ 世界一メモリ節約が上手 メモリ界の
tourist メモリ不足に終焉を告げる者 実質座圧 メモ
リ節約のために生まれてきた男
2017/3/28 HCPC 勉強会ー座圧ー 2
座圧の感覚
2017/3/28 HCPC 勉強会ー座圧ー 3
座圧入門(1次元)
ABC036 C問題「座圧」
• 長さ𝑛の数列𝑎 = (𝑎1 … 𝑎 𝑛)が与えられるので,
以下を満たす数列𝑏 = (𝑏1 … 𝑏 𝑛)を求めよ.
• 𝑏𝑖 ≥ 0
• 𝑎𝑖 < 𝑎𝑗 → 𝑏𝑖 < 𝑏𝑗
• 𝑎𝑖 = 𝑎𝑗 → 𝑏𝑖 = 𝑏𝑗
• 各𝑏𝑖は考えうる中で最小
• 制約
• 1 ≤ 𝑛 ≤ 105
• 0 ≤ 𝑎𝑖 ≤ 109
𝑎 = (3 3 1 6 1)
𝑏 = (1 1 0 2 0)
※一意に定まる
2017/3/28 HCPC 勉強会ー座圧ー 4
考察
• 𝑏は𝑎の各要素の大小関係を保存する
• ソートしてみるとわかりやすい
𝑎 = (3 3 1 6 1)をソートした列は以下のようになる.
𝑎 𝑠𝑜𝑟𝑡 = (1 1 3 3 6)
1を0に置き換えると,𝑎 𝑠𝑜𝑟𝑡の各要素の大小関係は
𝑎 𝑠𝑜𝑟𝑡
′
= (0 0 1 1 2)
でも表現可能であり,元の順序に戻すと
𝑏 = (1 1 0 2 0)
2017/3/28 HCPC 勉強会ー座圧ー 5
要するに座圧とは
• 各値の大小関係(や位置関係など)を崩さないように,
新しい数値を割当てること
• 座圧後の座標幅は𝑂 𝑛
※問題によって定数倍が異なる
• 座圧するにはソートと再割り当てが基本で𝑂(𝑛 log 𝑛)
• サンプルコードはtsukasa_diaryのgithubに
2017/3/28 HCPC 勉強会ー座圧ー 6
座圧入門(2次元)
蟻本「領域の個数」
• 𝑤 × ℎの格子領域に𝑛本の縦 or 横の直線が引か
れている.直線によって区切られている領域の
個数を求めよ.
• 制約
• 1 ≤ 𝑤, ℎ ≤ 106
• 1 ≤ 𝑛 ≤ 500
• 直線は始点と終点で表現
1 2 3
4
5 6
2017/3/28 HCPC 勉強会ー座圧ー 7
領域の数え方
• まだ訪問していない格子があれば探索を開始
• 直線を超えないようにBFSなど
⇒探索を開始した回数が領域の個数
• 右の例では6回探索している
• 領域も6個
2017/3/28 HCPC 勉強会ー座圧ー 8
問題点
• 座標幅がでかい
最大で106 ⇒106 × 106の領域はMLE
2017/3/28 HCPC 勉強会ー座圧ー 9
座圧する
• 各端点の座標を使って座圧⇒優勝
𝑂(𝑛)⇒𝑂(𝑛2)の探索は余裕
最大で106 ⇒106 × 106の領域はMLE
2017/3/28 HCPC 勉強会ー座圧ー 10
座圧の際の注意点
• 各軸について,端点の座標,座標の最小値1,および最
大値𝑤, ℎを入れて,前問と同様に座圧⇒間違い
領域を増やすプロ
𝑥軸について 1 4 6 9 10 → (1 2 3 4 5)
2017/3/28 HCPC 勉強会ー座圧ー 11
当問題の正しい座圧
• さらに端点の右と上に余白座標を追加して座圧し,余
白座標以外の相対位置だけ取り出す
𝑥軸について 1 4 6 9 10 → 1 4 5 6 7 9 10 → (1 2 4 6 7)
座圧のプロ
2017/3/28 HCPC 勉強会ー座圧ー 12
サンプルコード
• tsukasa_diaryのgithub(verifyできてません)
2017/3/28 HCPC 勉強会ー座圧ー 13
座圧の応用
AOJ 2426「Treasure Hunt」
• 𝑛個の点と,𝑚個の矩形領域が与えられる.
• 各矩形領域に含まれる点の数を求めよ.
• 制約
• 1 ≤ 𝑛 ≤ 5000
• 1 ≤ 𝑚 ≤ 5 × 105
• 矩形領域は軸に平行で左上と右下の座標が入力
• 座標値は−109~109ですべて整数
2017/3/28 HCPC 勉強会ー座圧ー 14
考察
• 各点について各領域に含まれるかどうか検査
⇒𝑂(𝑛𝑚)はTLE
• 点のある座標に1,そうでない座標に0を割り当て,2次
元累積和を前計算
⇒各矩形領域に対して𝑂 1
⇒累積和の領域が大きい…
⇒おや…?
0 0 1 1 0 0
0 0 0 0 0 0
0 0 1 0 0 0
1 0 0 1 0 0
0 0 0 0 0 0
0 0 1 0 0 1
0 0 1 2 2 2
0 0 1 2 2 2
0 0 2 3 3 3
1 1 3 5 5 5
1 1 3 5 5 5
1 1 4 6 6 7
(0,0)と(𝑥, 𝑦)による矩形領域内の点数の2次元累積和
⇒任意の矩形領域の点数を𝑂(1)で計算可能
※次ページで補足
2017/3/28 HCPC 勉強会ー座圧ー 15
2次元累積和(補足)
• 𝑥軸方向の累積和を取った後,𝑦軸方向の累積和
• 左上が(𝑥1, 𝑦1),右下が(𝑥2, 𝑦2)の矩形領域の和は
• 𝑠𝑢𝑚 𝑦2 𝑥2 − 𝑠𝑢𝑚 𝑦1 − 1 𝑥2 − 𝑠𝑢𝑚 𝑦2 𝑥1 − 1 + 𝑠𝑢𝑚[𝑦1 − 1][𝑥1 − 1]
0 1 1 0
0 1 0 0
1 0 1 0
0 1 0 1
0 1 2 2
0 2 3 3
1 3 5 5
1 4 6 7
0 1 2 2
0 1 1 1
1 1 2 2
0 1 1 2
𝑥軸方向 𝑦軸方向
0 1 2 2
0 2 3 3
1 3 5 5
1 4 6 7
5 − 2 − 1 + 0 = 2
2017/3/28 HCPC 勉強会ー座圧ー 16
座圧した領域で累積和
0 0 1 1 0 0
0 0 0 0 0 0
0 0 1 0 0 0
1 0 0 1 0 0
0 0 0 0 0 0
0 0 1 0 0 1
0 1 1 0
0 1 0 0
1 0 1 0
0 1 0 1
0 1 2 2
0 2 3 3
1 3 5 5
1 4 6 7
座圧
累積和
※座圧してから行列を作る
2017/3/28 HCPC 勉強会ー座圧ー 17
各矩形領域の点数を知る
• 入力の矩形領域を座圧した領域に写像
• 左上の点で,各軸についてlower_boundとなる点を探す
• 右下の点で,各軸についてupper_boundとなる点を探す
• その元座標の座圧後の座標に写像
0 0 1 1 0 0
0 0 0 0 0 0
0 0 1 0 0 0
1 0 0 1 0 0
0 0 0 0 0 0
0 0 1 0 0 1
0 1 1 0
0 1 0 0
1 0 1 0
0 1 0 1
写像
0 1 2 2
0 2 3 3
1 3 5 5
1 4 6 7
2017/3/28 HCPC 勉強会ー座圧ー 18
サンプルコード
• tsukasa_diaryのgithub 𝑂(𝑛2
+ (𝑛 + 𝑚) log 𝑛)
2017/3/28 HCPC 勉強会ー座圧ー 19
おしまい
しっかり練習して座圧のプロになろう!
2017/3/28 HCPC 勉強会ー座圧ー 20

Contenu connexe

Tendances

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
 

Tendances (20)

ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
abc032
abc032abc032
abc032
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説
 

Similaire à Za atsu-20170328

GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価
Koji Kitano
 
0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)
MasanoriSuganuma
 

Similaire à Za atsu-20170328 (18)

暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
ニューラル論文を読む前に
ニューラル論文を読む前にニューラル論文を読む前に
ニューラル論文を読む前に
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
 
Computing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner BasisComputing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner Basis
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
 
Operations research yonezawa_no2
Operations research yonezawa_no2Operations research yonezawa_no2
Operations research yonezawa_no2
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説
 
Aizu-2017: B
Aizu-2017: BAizu-2017: B
Aizu-2017: B
 
GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価GPUによる多倍長整数乗算の高速化手法の提案とその評価
GPUによる多倍長整数乗算の高速化手法の提案とその評価
 
0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)
 
Schönhage Strassen Algorithm
Schönhage Strassen AlgorithmSchönhage Strassen Algorithm
Schönhage Strassen Algorithm
 
超複素数
超複素数超複素数
超複素数
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
kagamicomput201706
kagamicomput201706kagamicomput201706
kagamicomput201706
 
論文紹介:The wavelet matrix
論文紹介:The wavelet matrix論文紹介:The wavelet matrix
論文紹介:The wavelet matrix
 
レトリバ勉強会資料:深層学習による自然言語処理2章
レトリバ勉強会資料:深層学習による自然言語処理2章レトリバ勉強会資料:深層学習による自然言語処理2章
レトリバ勉強会資料:深層学習による自然言語処理2章
 

Plus de HCPC: 北海道大学競技プログラミングサークル

Plus de HCPC: 北海道大学競技プログラミングサークル (20)

写像 12 相
写像 12 相写像 12 相
写像 12 相
 
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しいACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
 
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
 
ACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFSACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
 
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
 
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取りACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
 
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
 
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャムHUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
 
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMGHUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
 
HUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD RushHUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
 
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺しHUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
 
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
 
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
 
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
 
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
 
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
 
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four teaHUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 

Dernier

Dernier (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Za atsu-20170328