Enviar búsqueda
Cargar
蟻本輪講 データ構造
•
1 recomendación
•
2,133 vistas
HCPC: 北海道大学競技プログラミングサークル
Seguir
蟻本 データ構造
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 40
Descargar ahora
Descargar para leer sin conexión
Recomendados
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会
Yuuki Ono
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
AtCoder Inc.
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
Indeedなう 予選A 解説
Indeedなう 予選A 解説
AtCoder Inc.
Recomendados
第21回アルゴリズム勉強会
第21回アルゴリズム勉強会
Yuuki Ono
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
AtCoder Inc.
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
Indeedなう 予選A 解説
Indeedなう 予選A 解説
AtCoder Inc.
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
AtCoder Inc.
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説
AtCoder Inc.
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
arc047
arc047
AtCoder Inc.
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
AtCoder Inc.
abc031
abc031
AtCoder Inc.
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
AtCoder Inc.
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
AtCoder Inc.
abc027
abc027
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
AtCoder Inc.
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
AtCoder Inc.
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Inc.
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
AtCoder Inc.
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説
AtCoder Inc.
Convex Hull Trick
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
AtCoder Inc.
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
AtCoder Inc.
最短経路問題 & 最小全域木
最短経路問題 & 最小全域木
HCPC: 北海道大学競技プログラミングサークル
At corder005
At corder005
Kimura Daiki
Más contenido relacionado
La actualidad más candente
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
AtCoder Inc.
ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説
AtCoder Inc.
色々なダイクストラ高速化
色々なダイクストラ高速化
yosupo
arc047
arc047
AtCoder Inc.
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
AtCoder Inc.
abc031
abc031
AtCoder Inc.
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
AtCoder Inc.
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
AtCoder Inc.
abc027
abc027
AtCoder Inc.
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
AtCoder Inc.
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
AtCoder Inc.
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Inc.
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
AtCoder Inc.
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説
AtCoder Inc.
Convex Hull Trick
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
AtCoder Inc.
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
AtCoder Inc.
La actualidad más candente
(20)
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
ウェーブレット木の世界
ウェーブレット木の世界
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説
色々なダイクストラ高速化
色々なダイクストラ高速化
arc047
arc047
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
abc031
abc031
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
abc027
abc027
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
Code Formula 2014 予選A 解説
Code Formula 2014 予選A 解説
Convex Hull Trick
Convex Hull Trick
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
Destacado
最短経路問題 & 最小全域木
最短経路問題 & 最小全域木
HCPC: 北海道大学競技プログラミングサークル
At corder005
At corder005
Kimura Daiki
初めてのプロコン
初めてのプロコン
HCPC: 北海道大学競技プログラミングサークル
Chokudai Contest 001
Chokudai Contest 001
AtCoder Inc.
abc032
abc032
AtCoder Inc.
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
AtCoder Inc.
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
高速フーリエ変換
高速フーリエ変換
AtCoder Inc.
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
Takuya Akiba
The FizzBuzz Programing Contest
The FizzBuzz Programing Contest
Junichi Ito
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
Takuya Akiba
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Kubernetesを触ってみた
Kubernetesを触ってみた
Kazuto Kusama
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
AtCoder Inc.
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
AtCoder Inc.
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
Takuya Akiba
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
Destacado
(18)
最短経路問題 & 最小全域木
最短経路問題 & 最小全域木
At corder005
At corder005
初めてのプロコン
初めてのプロコン
Chokudai Contest 001
Chokudai Contest 001
abc032
abc032
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
Union find(素集合データ構造)
Union find(素集合データ構造)
高速フーリエ変換
高速フーリエ変換
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
The FizzBuzz Programing Contest
The FizzBuzz Programing Contest
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Kubernetesを触ってみた
Kubernetesを触ってみた
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
オブジェクト指向できていますか?
オブジェクト指向できていますか?
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
Más de 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: 北海道大学競技プログラミングサークル
Más de 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
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
Último
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/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
Último
(11)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
蟻本輪講 データ構造
1.
蟻本輪講 データ構造(P69~86) 2014 / 6
/ 11 アルゴリズム研究室 B4 竹内文登
2.
データ構造 • データ構造とは、データの持ち方のこと。 • データの持ち方によって、効率的な操作方法が変わる。 •
例 • 「配列」 • 「スタック」 • 「キュー」 • 「ヒープ」 • 「二分探索木」 • 「Union-Find木」
3.
目次 • 木・二分木 • プライオリティキューとヒープ •
仕組みと計算量 • 実装例 • 問題(2つ) • 二分探索木 • 仕組みと計算量 • 実装例 • (平衡二分木) • Union-Find木 • 仕組みと計算量 • 実装例 • 問題
4.
目次 • 木・二分木 • プライオリティキューとヒープ •
仕組みと計算量 • 実装例 • 問題(2つ) • 二分探索木 • 仕組みと計算量 • 実装例 • (平衡二分木) • Union-Find木 • 仕組みと計算量 • 実装例 • 問題
5.
木・二分木 根 辺 ノード 葉 親 子 兄弟 「二分木」とは、すべてのノードについて子が2個以下である木。
6.
目次 • 木・二分木 • プライオリティキューとヒープ •
仕組みと計算量 • 実装例 • 問題(2つ) • 二分探索木 • 仕組みと計算量 • 実装例 • (平衡二分木) • Union-Find木 • 仕組みと計算量 • 実装例 • 問題
7.
プライオリティキュー(順位キュー) • 数を追加する。 • 最小の数値を取り出す(値を取得し、削除する)。 1 5 4
1 5 4 3 3を追加 1 5 4 5 4 1を取り出す 1
8.
ヒープ • 二分木を用いて実装したもの。 • 子の数字は親の数字より大きい •
上から下へ、左から右へ順にノード が詰まっている 1 2 4 7 8 5
9.
ヒープ ー数字の追加ー 1 2 4 7 8
5 3 1 2 3 7 8 5 4 一番下の段の出来るだけ左に ノードを追加。 逆転が無くなるまで上に 上げて行く 逆転
10.
ヒープ ー最小値の取り出しー 5 2 4 7 8
5 1 最小値 最小値(根)を取り出し、 最後尾のノードを根にコピーする。 逆転 逆転 2 5 4 7 8 逆転が無くなるまで下に下げる。 2つの子が両方逆転している時は、 小さい方と交換。
11.
ヒープの操作の計算量 • 数字の追加 最悪の場合、根まで交換が必要。 ➡木の深さに比例した時間 = O( log
n ) • 最小値の取り出し 最悪の場合、一番下の段まで交換が必要。 ➡木の深さに比例した時間 = O( log n )
12.
ヒープの実装例 • 二分木をポインタで表現するのではなく、配列で実装。 • 左の子は自分の番号×2+1 •
右の子は自分の番号×2+2 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7
13.
ヒープの実装例 • 蟻本p71-72 参照 •
void push(int x) : 数の追加 • int pop() : 最小値の取り出し • 標準ライブラリ(C++) • 最大値から出てくるので注意!!
14.
• 標準ライブラリ (C++の場合) #include <queue> #include
<iostream> using namespace std; int main(){ priority_queue<int> pque; pque.push(3); 3の追加 pque.push(5); ; 5の追加 cout << pque.top(); ; の追加 pque.pop(); return 0; }
15.
問題 Expedition(POJ 2431) 10 100
50 L • 距離Lの道を移動する。 • はじめガソリンはP積まれている。 • 距離1走るとガソリンを1消費。 • 途中N個のガソリンスタンドがある。 • 各スタンド i は、距離Aiの位置にあり、Biのガソリンを補給可能。 • トラックのガソリンタンクに制限はない。 • このとき、車は移動を完了できるか?出来る場合は最小の補給回数を出力し、 出来ない場合は-1を出力せよ。 • 制約 1≦N≦10000, 1≦L≦1000000, 1≦P≦1000000, 1≦Ai<L, 1≦Bi≦100
16.
解法 • 愚直な解法 N個のガソリンスタンドに対して補給するかしないかを全探索 ➡O( 2N
)の計算量。 • 効率的な解法 ガソリンが無くなったとき、今まで通ったガソリンスタンドのうち、(補給していな い)補給できる量の最も大きいスタンドで補給すればよい。 10 100 50 L ガソリン 0 補給したことにする
17.
解法 • プライオリティキューを用いて実装 •
ガソリンスタンドを通過した時に、プライオリティキューにBiを追加 • 燃料タンクが空になったとき、 • プライオリティが空であれば、到達できない。 • プライオリティキューから最大の値を取り出して、そこで補給したことにする。 *コードはp74参照。
18.
問題 Fence Repair • 長さL1+
... +LNをN個に切り出す。 • 切り出す板の長さは、L1, ... , LN • 板を切断する際、板の長さ分のコストがかかる。 • 最小でどれだけのコストで切り出すことができるか? • 制約 • 1≦N≦20000, 1≦Li≦50000
19.
問題 Fence Repair 15 8 7 5
3 4 3 2 1 15コスト 7コスト 8コスト 3コスト 計 33コスト
20.
解法 • 愚直な解法 •
O( N2 )の計算量。 • 効率的な解法 • 板の集合から最も短い2つの板を取り出し、長さが和になる新しい板を 板の集合に追加すればよく、プライオリティキューで実装可能。 • O( log N )の操作を、O( N )回実行 ➡ O( N log N ) • *コードはp75参照。
21.
目次 • 木・二分木 • プライオリティキューとヒープ •
仕組みと計算量 • 実装例 • 問題(2つ) • 二分探索木 • 仕組みと計算量 • 実装例 • (平衡二分木) • Union-Find木 • 仕組みと計算量 • 実装例 • 問題
22.
二分探索木 • 二分探索木は以下の操作を効率的に行うデータ構造である。 •
ある数値が含まれているか調べる。 (探索) • 数値を追加する。 • ある数値を削除する。 • *実装によって他にも様々な操作が行える。➡応用力が高い。
23.
二分探索木 ー探索ー 7 2 15 1 5
10 17 4 8 11 16 19 10があるか探索する。 7と比較 15と比較 発見!
24.
二分探索木 ー数の追加ー 7 2 15 1 5
10 17 4 8 11 16 19 6を追加する。 7と比較 2と比較 6 5と比較 空き➡追加!
25.
二分探索木 ー削除ー • 以下のような場合分けが必要である。 1. 削除したいノードが左の子を持っていない場合、右の子を持ってくる 2.
削除したいノードの左の子が右の子をもっていなければ、左の子を 持ってくる 3. どちらでもなければ、左の子以下で最も大きいノードを持ってくる。 15 17 15 10 8 15 10 8 11
26.
二分探索木 ー削除1ー 7 2 15 1 5
10 17 4 8 11 16 19 10があるか探索する。 7と比較 15と比較 発見!
27.
二分探索木の計算量 • どの操作も木の深さに比例した時間がかかる。 • ➡平均的には、ノード数
n に対して、O( log n )時間。
28.
二分探索木の実装例 • *蟻本p77-78参照。 • 標準ライブラリ(C++) •
→set • →map • 平衡二分木 • 標準ライブラリに備わっている二分木は平衡二分木になっている!
29.
目次 • 木・二分木 • プライオリティキューとヒープ •
仕組みと計算量 • 実装例 • 問題(2つ) • 二分探索木 • 仕組みと計算量 • 実装例 • (平衡二分木) • Union-Find木 • 仕組みと計算量 • 実装例 • 問題
30.
Union-Find木 • Union-Find木は、グループ分けを管理するデータ構造。 • 次の操作が行える。 •
要素aと要素bが同じグループに属するか調べる • 要素aと要素bのグループを併合する • (分割はできない) 1 2 5 3 4 6 7 調べる 2と5 → 同じグループ 2と4 → 違うグループ 併合 1 2 3 5 4 6 7
31.
Union-Find木 ー仕組みー • 1つのグループに対して1つの木を構成する。 • 木の形などは本質的でなく、木であることが重要。 1 2
5 3 6 4 7
32.
Union-Find木 ー初期化ー • n個の要素に対して、n個のノードを用意する • 辺はない 1
2 3 4 5
33.
Union-Find木 ー併合ー 1 2 1 2 1 2 5 6 4 7 6 4 7 1 2
5
34.
Union-Find木 ー判定ー • 要素aと要素bが同じグループに属するか調べる • 木を上向きに辿り、木の根を調べ、同じ根にたどり着くか調べる 1 2
5 3 6 4 7
35.
Union-Find木 ー実装の注意ー • 偏りが発生しないようにする。 • 木の高さ(
rank )を記憶しておく。 • 併合の際に2つの木のrankが異なれば、rankの小さいものから大きい ものへ辺を張る。 1 2 5 6 4 7 6 4 7 1 2 5 高さ1 高さ2 高さ2
36.
Union-Find木 ー辺の縮約ー 6 4 7 7 6 の根は 6 4 7 直接根に繋ぐ
37.
Union-Find木 ー辺の縮約ー 1 2 3 4 5 1 2 3 4
5 すべて縮約 *簡単のため、rankは変えない。
38.
Union-Find木 ー計算量と実装ー • 平均はO( α(
n ) )らしい、、、 • アッカーマン関数Aの、f( n ) = A( n, n ) の逆関数 • 実装 • *p84参照
39.
問題 食物連鎖 ( POJ
1182 ) • N匹の動物、1, … , Nがいる • 動物はすべて3つの種類 A, B, C のいずれか • A は B を食べ、B は C を食べ、 C は Aを食べる • 次の2種類の情報がk個与えられる • タイプ1: x と y は同じ種類です • タイプ2:x は y を食べます • k個の情報は全て正しいと限らず、誤った情報(以前の情報に矛盾する ものや、誤った番号など)も含まれている • k個の情報のうち、誤った情報の個数を出力せよ • 制約 • 1<= N <= 50000 • 0 <= k <= 100000
40.
解法 • 各動物 i
に対して、i-A, i-B, i-C を作り、3×N個の要素で Union-Findを作る。 • i-X は「 i が種類Xである場合」を表す。 • 各情報に対して、矛盾が起きているかを調べ、 • 起きていなければ、以下の操作を行う。 • タイプ1: x と y は同じ種類 • → 「x-Aとy-A」、「x-Bとy-B」、「x-Cとy-C」の3つのペアを併合 • タイプ2:x は y を食べる • → 「x-Aとy-B」、「x-Bとy-C」、「x-Cとy-A」の3つのペアを併合 • *コードはp86参照
Descargar ahora