SlideShare a Scribd company logo
アルゴリズム+データ構造
    勉強会(9)
   2013-04-08 アロハ)竹腰 彰成
第9回 配列(リスト・スタック・待
ち行列)
配列とは
• http://www.php.net/manual/ja/language.types.array.php
  • PHP の配列は、実際には順番付けられたマップです。マップは型の一種で、
    値をキーに関連付けます。 この型は、いくつかの手法で最適化されます。こ
    のため、 実際の配列またはリスト (ベクトル)、(あるマップの実装である) ハッ
    シュテーブル、ディレクトリ、コレクション、スタック、 キュー等として使用する
    ことが可能です。 PHP の配列には他の PHP 配列を値として保持することが
    できるため、 非常に簡単にツリー構造を表現することが可能です。
  • (キュー=待ち行列)
• PHPの場合、すべて配列として実装されている
  • 使い方を覚えればOK
リストとは
• リストとは……国語辞典によると「ある目的のために、多数の品目や
  数字などを書き出したもの。目録。一覧表」
• コンピュータサイエンスでは「要素を順番に並べたもの」
• PHPでは配列そのもの。特に意識することなく使っている(はず)。
リストの操作を改めて整理する
        No.               操作
    1         K番目の要素の前に要素を挿入する
    2         K番目の要素を削除する
    3         K番目の要素の内容を読む/書く
    4         特定のキーを持つ要素を探索する
    5         複数のリストを1つにまとめる
    6         1つのリストを複数に分割する
    7         リストの複製を作る
    8         リストに含まれる要素の数を求める

          「定本 Cプログラマのためのアルゴリズムとデータ構造」より
PHPでのリストの操作
      No.           操作                      PHPでの操作
  1         K番目の要素の前に要素を挿入する   array_splice()
  2         K番目の要素を削除する        array_splice()
  3         K番目の要素の内容を読む/書く    $array[$k]
  4         特定のキーを持つ要素を探索する    in_array()、foreach
  5         複数のリストを1つにまとめる     array_merge()、+演算子
  6         1つのリストを複数に分割する     array_slice()、array_chunk()
  7         リストの複製を作る          =演算子
  8         リストに含まれる要素の数を求める   count

• 一通りできるが、使い勝手は悪い
 • 目的に沿った、特化したものを使う⇒たとえばスタック、待ち行列
スタックとは
• スタックとは……英和辞典によると「(干し草などの)大きな山, 積みわ
  ら(haystack);(物のきちんとした)積み重ね, 山」

• 操作は「上に積み重ねる」「上から取り出す」
• Last In First Out(LIFO)
 • 最後に入れたのが最初に取り出される
• リストのうち、操作を制限したものと言える
スタックの操作
    No.          操作                 スタックの操作                PHPでの操作
1         K番目の要素の前に要素を挿入する   リストの最後に要素を追加する array_push()、$stack[]
2         K番目の要素を削除する        リストの最後の要素を取り出す array_pop()
3         K番目の要素の内容を読む/書く    リストの最後の要素を取り出す array_pop() /array_push()
4         特定のキーを持つ要素を探索する    (しない)                 -
5         複数のリストを1つにまとめる     (しない)                 -
6         1つのリストを複数に分割する     (しない)                 -
7         リストの複製を作る          (同じ)                  =演算子
8         リストに含まれる要素の数を求める   (同じ)                  count

• array_push()、array_pop()という専用関数がある
• $stack[] = ‘foo’; のような追加方法もある
スタックの使い道
• コンピュータの基礎的なところで使われている
 • メモリ管理
 • 関数呼び出し
• 何かのロジックを作る時の手法としてよく登場する
 • 電卓の実装
 • 構文解析
 • 探索問題を解くアルゴリズム
• webアプリでビジネスロジックに直接使うシーンはあまりないが……
 • 「元に戻る」実装での戻るべきURLを保存
待ち行列(キュー)とは
• キューとは……英和辞典によると「(順番を待つ人・車などの)列
  (line);(待つ)一群の人々」
• スーパーマーケットのレジ行列などを想像するとよい
   • ただしここではレジは1つとする
• Last In Last Out(LILO)
   • 最後に入れたものが最後に取り出される
   • =最初に入れたものが最初に取り出される
• リストのうち、操作を制限したものと言える
待ち行列(キュー)の操作
    No.           操作                  キューの操作           PHPでの操作
1         K番目の要素の前に要素を挿入する リストの最後に要素を追加する array_push()
2         K番目の要素を削除する         リストの最初の要素を取り出す   array_shift()
3         K番目の要素の内容を読む/書く     リストの最初の要素を取り出す   array_shift() /array_push()
4         特定のキーを持つ要素を探索する     (しない)            -
5         複数のリストを1つにまとめる      (しない)            -
6         1つのリストを複数に分割する      (しない)            -
7         リストの複製を作る           (同じ)             =演算子
8         リストに含まれる要素の数を求める    (同じ)             Count


• array_shift()、 array_push()という専用関数がある
待ち行列(キュー)の使い道
• まさに「待ち行列」として使われる
 • 処理待ちリスト
   • メールの大量送信:スタックだと最初に入れたものがいつ送信されるかわからない
   • バッチの大量処理:スタックだと最初に入れたものがいつ処理されるかわからない
 • メッセージキュー
   • OSでのイベント処理:操作した順番に処理していく
スタックと待ち行列(キュー)の使い分け
• 実装上の問題でスタックのほうが処理が速い
 • キューの「先頭に追加する」操作がちょっと重い
• それ以外は、要件により使い分ける
 • どちらでもいい場合はスタックを使ったほうが処理が速い
実習:スタックの利用
• スタックを使って「逆ポーランド記法」の電卓を作成してください
 • 計算式は「1 2 + 4 5 + *」
 • 考え方はwikipediaの「逆ポーランド記法」の「計算動作の例」にあります
 • http://ja.wikipedia.org/wiki/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%
   A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95
• 勉強会の残り時間を使って書いてください。時間のある限り質問を
  受け付けます
• できあがったら提出してください
• 時間に間に合わない場合は宿題にします
今回の単語のまとめ
• リスト
• スタック
• FILO
• 待ち行列、キュー
• LILO

More Related Content

Viewers also liked

アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)noldor
 
アルゴリズム+データ構造勉強会(7)
アルゴリズム+データ構造勉強会(7)アルゴリズム+データ構造勉強会(7)
アルゴリズム+データ構造勉強会(7)noldor
 
アルゴリズム+データ構造勉強会(11)
アルゴリズム+データ構造勉強会(11)アルゴリズム+データ構造勉強会(11)
アルゴリズム+データ構造勉強会(11)noldor
 
アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)noldor
 
アルゴリズム+データ構造勉強会(10)
アルゴリズム+データ構造勉強会(10)アルゴリズム+データ構造勉強会(10)
アルゴリズム+データ構造勉強会(10)noldor
 
アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)noldor
 
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)noldor
 
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
noldor
 
アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)noldor
 
Study 20131009
Study 20131009Study 20131009
Study 20131009fujii_t
 
アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)noldor
 
アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)noldor
 
アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)noldor
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
 
Sakura IoT Platform
Sakura IoT PlatformSakura IoT Platform
Sakura IoT Platform
Osamu Ogasahara
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Hidekazu Nakamura
 

Viewers also liked (16)

アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)アルゴリズム+データ構造勉強会(8)
アルゴリズム+データ構造勉強会(8)
 
アルゴリズム+データ構造勉強会(7)
アルゴリズム+データ構造勉強会(7)アルゴリズム+データ構造勉強会(7)
アルゴリズム+データ構造勉強会(7)
 
アルゴリズム+データ構造勉強会(11)
アルゴリズム+データ構造勉強会(11)アルゴリズム+データ構造勉強会(11)
アルゴリズム+データ構造勉強会(11)
 
アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)アルゴリズム+データ構造勉強会(15)
アルゴリズム+データ構造勉強会(15)
 
アルゴリズム+データ構造勉強会(10)
アルゴリズム+データ構造勉強会(10)アルゴリズム+データ構造勉強会(10)
アルゴリズム+データ構造勉強会(10)
 
アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)アルゴリズム+データ構造勉強会(14)
アルゴリズム+データ構造勉強会(14)
 
アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)アルゴリズム+データ構造勉強会(12)
アルゴリズム+データ構造勉強会(12)
 
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
Code igniterを初めて使うときにはまった4つのポイント(ノーマル版)
 
アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)アルゴリズム+データ構造勉強会(4)
アルゴリズム+データ構造勉強会(4)
 
Study 20131009
Study 20131009Study 20131009
Study 20131009
 
アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)アルゴリズム+データ構造勉強会(13)
アルゴリズム+データ構造勉強会(13)
 
アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)アルゴリズム+データ構造勉強会(6)
アルゴリズム+データ構造勉強会(6)
 
アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)アルゴリズム+データ構造勉強会(5)
アルゴリズム+データ構造勉強会(5)
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
 
Sakura IoT Platform
Sakura IoT PlatformSakura IoT Platform
Sakura IoT Platform
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
 

Similar to アルゴリズム+データ構造勉強会(9)

12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
 
多次元配列機能比較
多次元配列機能比較多次元配列機能比較
多次元配列機能比較
Masahiro Tanaka
 
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)
Ryuichi ITO
 
第3回輪講
第3回輪講第3回輪講
第3回輪講
mh_amako
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪yashigani
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
 

Similar to アルゴリズム+データ構造勉強会(9) (7)

12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
多次元配列機能比較
多次元配列機能比較多次元配列機能比較
多次元配列機能比較
 
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)
 
第3回輪講
第3回輪講第3回輪講
第3回輪講
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 

Recently uploaded

無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
ssuserfcafd1
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
Seiya Shimabukuro
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
iPride Co., Ltd.
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024
Hirotaka Kawata
 
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
OSgeo Japan
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
Shinichi Hirauchi
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
Takuya Minagawa
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
Osaka University
 
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
Hideo Kashioka
 

Recently uploaded (14)

無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024Kotest を使って 快適にテストを書こう - KotlinFest 2024
Kotest を使って 快適にテストを書こう - KotlinFest 2024
 
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
一般社団法人OSGeo日本支部団体紹介用スライド2024年版。OSGeo日本支部とFOSS4Gの紹介
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
 
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
実体験に基づく、成功するスクラム vs 失敗するスクラム 何が違う? 2024年6月22日
 

アルゴリズム+データ構造勉強会(9)

  • 1. アルゴリズム+データ構造 勉強会(9) 2013-04-08 アロハ)竹腰 彰成
  • 3. 配列とは • http://www.php.net/manual/ja/language.types.array.php • PHP の配列は、実際には順番付けられたマップです。マップは型の一種で、 値をキーに関連付けます。 この型は、いくつかの手法で最適化されます。こ のため、 実際の配列またはリスト (ベクトル)、(あるマップの実装である) ハッ シュテーブル、ディレクトリ、コレクション、スタック、 キュー等として使用する ことが可能です。 PHP の配列には他の PHP 配列を値として保持することが できるため、 非常に簡単にツリー構造を表現することが可能です。 • (キュー=待ち行列) • PHPの場合、すべて配列として実装されている • 使い方を覚えればOK
  • 4. リストとは • リストとは……国語辞典によると「ある目的のために、多数の品目や 数字などを書き出したもの。目録。一覧表」 • コンピュータサイエンスでは「要素を順番に並べたもの」 • PHPでは配列そのもの。特に意識することなく使っている(はず)。
  • 5. リストの操作を改めて整理する No. 操作 1 K番目の要素の前に要素を挿入する 2 K番目の要素を削除する 3 K番目の要素の内容を読む/書く 4 特定のキーを持つ要素を探索する 5 複数のリストを1つにまとめる 6 1つのリストを複数に分割する 7 リストの複製を作る 8 リストに含まれる要素の数を求める 「定本 Cプログラマのためのアルゴリズムとデータ構造」より
  • 6. PHPでのリストの操作 No. 操作 PHPでの操作 1 K番目の要素の前に要素を挿入する array_splice() 2 K番目の要素を削除する array_splice() 3 K番目の要素の内容を読む/書く $array[$k] 4 特定のキーを持つ要素を探索する in_array()、foreach 5 複数のリストを1つにまとめる array_merge()、+演算子 6 1つのリストを複数に分割する array_slice()、array_chunk() 7 リストの複製を作る =演算子 8 リストに含まれる要素の数を求める count • 一通りできるが、使い勝手は悪い • 目的に沿った、特化したものを使う⇒たとえばスタック、待ち行列
  • 7. スタックとは • スタックとは……英和辞典によると「(干し草などの)大きな山, 積みわ ら(haystack);(物のきちんとした)積み重ね, 山」 • 操作は「上に積み重ねる」「上から取り出す」 • Last In First Out(LIFO) • 最後に入れたのが最初に取り出される • リストのうち、操作を制限したものと言える
  • 8. スタックの操作 No. 操作 スタックの操作 PHPでの操作 1 K番目の要素の前に要素を挿入する リストの最後に要素を追加する array_push()、$stack[] 2 K番目の要素を削除する リストの最後の要素を取り出す array_pop() 3 K番目の要素の内容を読む/書く リストの最後の要素を取り出す array_pop() /array_push() 4 特定のキーを持つ要素を探索する (しない) - 5 複数のリストを1つにまとめる (しない) - 6 1つのリストを複数に分割する (しない) - 7 リストの複製を作る (同じ) =演算子 8 リストに含まれる要素の数を求める (同じ) count • array_push()、array_pop()という専用関数がある • $stack[] = ‘foo’; のような追加方法もある
  • 9. スタックの使い道 • コンピュータの基礎的なところで使われている • メモリ管理 • 関数呼び出し • 何かのロジックを作る時の手法としてよく登場する • 電卓の実装 • 構文解析 • 探索問題を解くアルゴリズム • webアプリでビジネスロジックに直接使うシーンはあまりないが…… • 「元に戻る」実装での戻るべきURLを保存
  • 10. 待ち行列(キュー)とは • キューとは……英和辞典によると「(順番を待つ人・車などの)列 (line);(待つ)一群の人々」 • スーパーマーケットのレジ行列などを想像するとよい • ただしここではレジは1つとする • Last In Last Out(LILO) • 最後に入れたものが最後に取り出される • =最初に入れたものが最初に取り出される • リストのうち、操作を制限したものと言える
  • 11. 待ち行列(キュー)の操作 No. 操作 キューの操作 PHPでの操作 1 K番目の要素の前に要素を挿入する リストの最後に要素を追加する array_push() 2 K番目の要素を削除する リストの最初の要素を取り出す array_shift() 3 K番目の要素の内容を読む/書く リストの最初の要素を取り出す array_shift() /array_push() 4 特定のキーを持つ要素を探索する (しない) - 5 複数のリストを1つにまとめる (しない) - 6 1つのリストを複数に分割する (しない) - 7 リストの複製を作る (同じ) =演算子 8 リストに含まれる要素の数を求める (同じ) Count • array_shift()、 array_push()という専用関数がある
  • 12. 待ち行列(キュー)の使い道 • まさに「待ち行列」として使われる • 処理待ちリスト • メールの大量送信:スタックだと最初に入れたものがいつ送信されるかわからない • バッチの大量処理:スタックだと最初に入れたものがいつ処理されるかわからない • メッセージキュー • OSでのイベント処理:操作した順番に処理していく
  • 13. スタックと待ち行列(キュー)の使い分け • 実装上の問題でスタックのほうが処理が速い • キューの「先頭に追加する」操作がちょっと重い • それ以外は、要件により使い分ける • どちらでもいい場合はスタックを使ったほうが処理が速い
  • 14. 実習:スタックの利用 • スタックを使って「逆ポーランド記法」の電卓を作成してください • 計算式は「1 2 + 4 5 + *」 • 考え方はwikipediaの「逆ポーランド記法」の「計算動作の例」にあります • http://ja.wikipedia.org/wiki/%E9%80%86%E3%83%9D%E3%83%BC%E3%83% A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95 • 勉強会の残り時間を使って書いてください。時間のある限り質問を 受け付けます • できあがったら提出してください • 時間に間に合わない場合は宿題にします
  • 15. 今回の単語のまとめ • リスト • スタック • FILO • 待ち行列、キュー • LILO