Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SPLから始める「データ構造」入門

 SPLから始める「データ構造」入門

PHPカンファレンス福岡2024の発表資料です
https://fortee.jp/phpcon-fukuoka-2024/proposal/4d6ffab8-b99d-40ba-9f55-2c3fc7ce5f54

hideki kinjyo

June 22, 2024
Tweet

Resources

PHP 7 Data Structures and Algorithms

https://www.packtpub.com/en-us/product/php-7-data-structures-and-algorithms-9781786463890

PHPユーザーに向けたデータ構造&アルゴリズム本。単に「実装例がPHPで書かれている」というだけでなく、
「Understanding PHP Arrays」や「PHP Built-In Support for Data Structures and Algorithms」といった話題に章を割いている様に、PHPの事情とリンクさせながら書かれているのが特徴。SPL Data Structuresにも言及あり

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. 自己紹介 • 金城秀樹 / きんじょうひでき • GitHub: @o0h / 𝕏

    : @o0h_ • 好きなFWはCakePHP • アイコンは美味しい鮭親子丼の写真です • 初めて参加したカンファレンスは#phpconfuk.2017 • Thanks #phpconfuk !!
  2. データ構造? • データをメモリー上で配置・表現する際の形式 
 (鈴木 一史『データ構造の基礎 (放送大学教材 6784) 』) •

    通常データへの効率的なアクセスのため用いられるデータ構成と保存形式 
 (https://en.wikipedia.org/wiki/Data_structure Wikipedia英語版「データ構造」をDeepLにより翻訳) • コンピューターがデータ処理や計算を行う際に、あらかじめデータを扱い やすいように加工しておき、計算速度が速くなるようにする、というもの 
 (https://research.nii.ac.jp/~uno/struct.htm 宇野毅明先生のホームページ「データ構造」のページ)
  3. 次々と発生するミッション • 要素が柔軟に追加される • 要素同士には順番関係がある • 最後に追加された要素から順 番に処理(取り出す)をする • 関連ワード:

    後入れ先出し この商品ください!! 購入には会員登録が 
 必要です メールアドレスを 
 認証してください 受信メールを 
 確認してください
  4. 計画的なミッション • 要素が柔軟に追加される • 要素は全体の計画に従って順 番を設定される • 設定された順番に従って処理 (取り出す)をする •

    関連ワード: 優先度付け ΋͠࢓ࣄʹߦ͖ͨ͘ͳ͘ͳͬͨΒɺͦͷ··൓ରͷిंʹ৐ͬͯɺ ւΛݟʹߦ͘ͱ͍͍Αɻ ւลͷञ԰ͰϏʔϧͱϐʔφπങͬͯɺւ؛ʹ࠲ͬͯ ཅʹ౰ͨΓͳ͕ΒҿΉͱ͍͍Αɻ Ϗʔϧ͕ແ͘ͳͬͨΒɺͦͷ··ڼ޲͚ʹ৸͜ΖΜͰɺ ྲྀΕΔӢΛͣͬͱோΊΔͱ͍͍Αɻ ͦΜͳԺ΍͔ͳ͕࣌ؒΩϛΛ଴ͬͯΔͷʹɺԿ΋ແཧͯ͠ ࢓ࣄʹͳΜ͔ߦ͘ඞཁͳ͍Αɻ 反対の電車に乗って 海を見に行って 海辺の酒屋で ビールとピーナツ買って 海岸に座って
  5. もし、この「箱」が 
 「入れた順に取り出す」つくり 
 だったら・・? ΋͠࢓ࣄʹߦ͖ͨ͘ͳ͘ͳͬͨΒɺͦͷ··൓ରͷిंʹ৐ͬͯɺ ւΛݟʹߦ͘ͱ͍͍Αɻ ւลͷञ԰ͰϏʔϧͱϐʔφπങͬͯɺւ؛ʹ࠲ͬͯ ཅʹ౰ͨΓͳ͕ΒҿΉͱ͍͍Αɻ Ϗʔϧ͕ແ͘ͳͬͨΒɺͦͷ··ڼ޲͚ʹ৸͜ΖΜͰɺ

    ྲྀΕΔӢΛͣͬͱோΊΔͱ͍͍Αɻ ͦΜͳԺ΍͔ͳ͕࣌ؒΩϛΛ଴ͬͯΔͷʹɺԿ΋ແཧͯ͠ ࢓ࣄʹͳΜ͔ߦ͘ඞཁͳ͍Αɻ 反対の電車に乗って 海を見に行って 海辺の酒屋で ビールとピーナツ買って 海岸に座って
  6. ラウンド1 • 電車に乗る 1. 違う電車に乗ってみよう 2. それで海の近くの駅まで行こう 3. 海岸に座って酒でも飲もう 4.

    ビールとつまみでも買うか 5. 行く途中に店を探そう 6. ちょっと飲んだら、仰向けに寝 ころんで・・・
  7. ラウンド3.1 • 買おう、といっても 
 まだ店じゃないぞ • => スキップ 1. 海岸に座って酒でも飲もう

    2. ビールとつまみでも買うか 3. 行く途中に店を探そう 4. ちょっと飲んだら、仰向けに寝 ころんで・・・
  8. • 「入れた順」とは別に、 
 「意味的な順番」を扱える構 造を用いる • 「次の要素を取り出す」とい う操作だけで、工夫や計算を せずとも即座に活用し得るも のがでてくる

    1) 違う電車に乗ってみよう 2) それで海の近くの駅まで行こう 5) 海岸に座って酒でも飲もう 4) ビールとつまみでも買うか 3) 行く途中に店を探そう 6) ちょっと飲んだら、仰向けに寝 ころんで・・・
  9. • 逆に言えば、 
 この「要素に順番が付いてい る箱」を見た時に、 
 「入れた順が重要である」 
 「入れた順に先に取り出しな がら使う」

    
 という誤解は起きにくいはず 1) 違う電車に乗ってみよう 2) それで海の近くの駅まで行こう 5) 海岸に座って酒でも飲もう 4) ビールとつまみでも買うか 3) 行く途中に店を探そう 6) ちょっと飲んだら、仰向けに寝 ころんで・・・
  10. • 「形状」から、使い方が補完 的に理解(想起)される • 例: 受け付け+その正面に整列し ているソファーという形状 1. 何かしらの手続きをする 2.

    名前、もしくは受付番号の付 与を受ける 3. 適切な処理順の決定のあと に、その`id(キー)`にて呼び 出される
  11. SPL > データ構造 配列 SplFixedArray セット マップ SplObjectStorage ヒープ SplMaxHeap

    SplHeap SplPriorityQueue SplMinHeap 連結リスト SplStack SplDoublyLinkedList SplQueue • https://php.net/spl.datastructures • 4カテゴリ、9クラスが提供されている • このうち、SplHeapは抽象クラス
  12. SplQueueによる実装 • enqueue + dequeue 
 で実現 • shift, pushの

    
 エイリアス • $data[] = $itemでも 同じ
  13. SplFixedArray 
 による実装 • 初期化時に 
 サイズを指定 • 決めたサイズを超えた 操作を行うと、例外が

    throwされる • 抽象的にいえば、 
 生成者に「どう使われ て良いか」の判断を委 ねることで、使用者の 責任から分離される
  14. データ構造について入門できそうなリソース • アルゴリズム図鑑 増補改訂版 絵で見てわかる33のアルゴリズム 
 https://www.shoeisha.co.jp/book/detail/9784798172439 • 名前の通り、絵が豊富でフレンドリーな雰囲気。とっつきやすかったです •

    基本と言われるアルゴリズムやデータ構造について紹介 • 放送大学科目「データ構造とプログラミング」 
 ※自分が受講したのは、旧「データ構造の基礎」 
 https://bangumi.ouj.ac.jp/v4/bslife/detail/15794524.html • 内容は基礎的。コードも出てくるが、そこがメインではなくサブ的な位置づけ • 大学の授業なので真面目で落ち着いた雰囲気 
 視聴手段があれば(テキストのみより)授業動画で学習するのがオススメ
  15. ガッツリとPHP寄りの教材 • PHP 7 Data Structures and Algorithms 
 https://www.packtpub.com/en-us/product/php-7-data-structures-

    and-algorithms-9781786463890 
 ※ Kindle: https://www.amazon.co.jp/dp/B01IF7NLDW • PHPユーザーに向けたデータ構造&アルゴリズム本 • 単に「実装例がPHPで書かれている」というだけでなく、 
 「Understanding PHP Arrays」や「PHP Built-In Support for Data Structures and Algorithms」といった話題に章を割いている様に、PHPの事情 とリンクさせながら書かれているのが特徴
  16. • VisuAlgo 
 https://visualgo.net/en • 色々なデータ構造を、ポップなUIとアニメーションで学べる 
 要素の追加や探索といった操作をした時に、どう動くの?を視覚的に • Data

    Structure Visualization 
 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html • よりシンプルですが、知名度ならコチラのほうが上?かも