SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
データ構造と全探索
データ構造とは
●データの集まりを効率良く扱うために一定の形
式にデータを格納するときの形式
●それぞれのデータ構造に得意・不得意・不可能
な操作がある
●配列は最も単純なデータ構造の一つ
●添字を指定して要素にアクセスできる
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
3 1 4 1 5 9 2 6 5 3
配列
●配列の得意な操作
●添字を指定して要素の読み書き:
●ランダムアクセスという
●先頭から順番に要素の読み書き:
●シーケンシャルアクセスという
●配列の苦手な操作
●要素の挿入・削除:
●最大値・最小値を求める:
O(1)
O(1)
O(n)
O(n)
全探索
●コンピューターは(人間に比べて)計算が速い
●  通りくらいなら虱潰しに調べれば間に合う
●例) 3×3の魔法陣
●3×3のマス目に1〜9の数字を一つずつ入れたものの
中で魔法陣になっている物の数を求めよ
●      通りすべてを試せば良い
●魔法陣かどうか確かめるには縦横各3列、対角線2列をそ
れぞれ足す(8*3=24、9!*24 = 8709120で間に合う)
106
9!=362880
全探索
●全探索にもいろいろな方法がある
●幅優先探索
●深さ優先探索
●反復深化深さ優先探索
全探索
●調べる状態を木に対応させることが多い
●魔法陣の例
1 2 9……
2 3 4… ……
3 4 ……
…
全探索
●調べる状態を木に対応させることが多い
深さ優先探索
●まず一番最初の要素の子要素を全部調べてから
次に行く
1
2 11 17
3 6 9
4 5 7 8 10 13 16 1915 20
12 14 18
スタック
●スタックでできる操作
●末尾に要素を追加
●末尾の値を読み書き
●末尾の値を削除
●積み上げられた本のイメージ
●本を積んだり取ったりするときは常に山の一番上
●十分な長さの配列とスタックの長さを表す変数
で実現できる
push pop
スタックで解ける問題
●再帰函数のエミュレート、深さ優先探索
●調べる頂点を見つかった順にスタックに積むことで
実現できる
●動的計画法の利用も検討しよう
●構文解析
●逆ポーランド記法の数式
深さ優先探索
●まず一番最初の要素の子要素を全部調べてから
次に行く
1
2 11 17
3 6 9
4 5 7 8 10 13 16 1915 20
12 14 18
スタックで解ける問題
●逆ポーランド記法(後置記法)
●式 := (式) (式) (演算子) | (数値)
●普通の式は中置記法という
●例) 中置記法 → 逆ポーランド記法
●1 + 2 →1 2 +
●3 * 5 + 4 * 2 → 3 5 * 4 2 * +
スタックで解ける問題
●逆ポーランド記法の構文解析
●数値が出てきたらスタックに積む
●演算子が出てきたらスタックから2つ値を取り出し
て演算し、その結果をスタックに積む
●最後にスタックに残った数値が計算結果
幅優先探索
●深さの浅いところから順番に調べていく
1
2 3 4
5 6 7
11 12 13 14 15 16 18 1917 20
8 9 10
キュー
●キューでできる操作
●末尾に要素を追加
●先頭の要素を読み書き
●先頭の要素を削除
●レジの行列のイメージ
●先に並んだ人が先に抜ける
push
pop
キューで解ける問題
●幅優先探索
●調べる頂点を見つかった順にキューに入れることで
実現できる
幅優先探索
●深さの浅いところから順番に調べていく
1
2 3 4
5 6 7
11 12 13 14 15 16 18 1917 20
8 9 10
プライオリティーキュー
●キューに積んだ順番でなく、それぞれの要素に
ついている優先度の大きさの順に出てくる
キュー
●今日は詳しくはやりません
C++におけるスタックとキュー
●スタック
●#include <stack>
●std::stack<T> s;
●キュー
●#include <queue>
●std::queue<T> q;
●std::priority_queue<T>;

Mais conteúdo relacionado

Mais de 京大 マイコンクラブ

Mais de 京大 マイコンクラブ (20)

多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
Geometry with Unity
Geometry with UnityGeometry with Unity
Geometry with Unity
 
セミコロンレスc++
セミコロンレスc++セミコロンレスc++
セミコロンレスc++
 
エンジニアと健康
エンジニアと健康エンジニアと健康
エンジニアと健康
 
女の子になれなかった人のために
女の子になれなかった人のために女の子になれなかった人のために
女の子になれなかった人のために
 
Pietで競プロしよう
Pietで競プロしようPietで競プロしよう
Pietで競プロしよう
 
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったらもし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
 
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
 
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
 
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
 
C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
 
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
 

Último

Último (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

データ構造と全探索