Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravel Collectionの計算量を調べてみた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ryo Tomidokoro
September 26, 2018
Programming
8.9k
3
Share
Laravel Collectionの計算量を調べてみた
Laravel Collectionの各メソッドの計算量を確認してみた。
Ryo Tomidokoro
September 26, 2018
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
580
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.5k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.8k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
14k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
15k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
260
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.6k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
56k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
Other Decks in Programming
See All in Programming
20260320登壇資料
pharct
0
170
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
310
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.8k
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
2
150
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
250
事業会社でのセキュリティ長期インターンについて
masachikaura
0
230
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.3k
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
220
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
320
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
990
おれのAgentic Coding 2026/03
tsukasagr
1
140
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
5
2.5k
Featured
See All Featured
Navigating Team Friction
lara
192
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
27
3.4k
Git: the NoSQL Database
bkeepers
PRO
432
67k
So, you think you're a good person
axbom
PRO
2
2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
180
The Limits of Empathy - UXLibs8
cassininazir
1
290
Optimizing for Happiness
mojombo
378
71k
The Curse of the Amulet
leimatthew05
1
11k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Transcript
Laravel CollectionͷܭࢉྔΛௐͯΈͨ 1)1ษڧձ *OOPWBUPS+BQBO*OD ॴ྄ &OHJOFFS
ܭࢉྔʹ͍͓ͭͯ͞Β͍ ຊ࣌ؒతܭࢉྔΛѻ͍·͢
ྫ͑ϨϏϡʔ͍ͯ͠Δ࣌
ʮ͜ͷॲཧͦ͏ʯ ͜Εͩͱ͔Γʹ͍͘ɻ ॲཧͷ࣌ؒతΛڞ௨ࣝͰ͍͑ͨ
ӳޠͩͱ Time Complexity ࣌ؒෳࡶੑ ϓϩάϥϜͷॲཧʹ ͲΕ͘Β͍͕͔͔࣌ؒΔ͔Λ ֶతʹѻ͏
Oه๏ O(1) O(log n) O(n) O(n * log n) O(n^2)
ϓϩάϥϜͷ࣌ؒతܭࢉྔΛද͢
Oه๏ σʔλྔ͕૿Ճͨ͠߹ͷ ॲཧ࣌ؒͷ૿Ճ͕͔Δ
[άϥϑҾ༻] ։ൃ৽ଔʹ๋͙ɺجຊͷΞϧΰϦζϜͱܭࢉྔ http://www.techscore.com/blog/2016/08/08/։ൃ৽ଔʹ๋͙ɺجຊͷΞϧΰϦζϜͱܭࢉྔ/ σʔλྔͱܭࢉྔ
ܭࢉྔͱΞϧΰϦζϜ ΞϧΰϦζϜ ܭࢉྔ όϒϧιʔτ 0 O? Ϛʔδιʔτ 0 OMPHO όΠφϦαʔν
0 MPHO ΞϧΰϦζϜʹΑͬͯܭࢉྔ͕ҟͳΔ
͞Βʹৄ͘͠Γ͍ͨਓ ֶΨʔϧ4 ཚΞϧΰϦζϜ 2ষͱ6ষΛಡΉ͠
ຊʹΔ
Laravel Collection֤ϝιουͷܭࢉྔ ͏ͪΐͬͱ͖Ε͍ʹ͠·͢…
ࡶʹ·ͱΊΔͱ • ΄ͱΜͲ O(n) • O(1) ͕9ݸ • O(n^2) Ҏ্͕8ݸ
ཁҙϝιου • collapse O(n^2) • crossJoin O(n^3) • diff O(n^t)
• diffAssoc O(n^t) • flatMap O(n^2) • flatten O(n^2) • groupBy O(n^2) • intersect O(n^2)
࣮ଌͯ͠Έͨ
where - O(n)
ॲཧ࣌ؒ(ඵ) σʔλ݅
count - O(1)
ॲཧ࣌ؒ(ඵ) σʔλ݅
collapse - O(n^2)
ॲཧ࣌ؒ(ඵ) σʔλ݅
crossJoin - O(n^3)
ॲཧ࣌ؒ(ඵ) σʔλ݅
diff - O(n^t)
ॲཧ࣌ؒ(ඵ) σʔλ݅ tfieldʹґଘ͢Δ
ܭࢉྔ͕͔ͬͨͱͯ͠ Կ͔ྑ͍͜ͱ͋Δͷ͔ʁ
Βͳ͍ͱѱ͍͜ͱ͕ى͖Δ
࣮ࡍʹ͔͋ͬͨ͠Εͳ͍ ܭࢉྔ͕ʹͳͬͨίʔυྫ ※࣮Λݩʹͨ͠ϑΟΫγϣϯͰ͢
શ݅औಘ ϖʔδϯάͷͨΊʹ શ݅ϧʔϓͰճ͢ ྫ1
શ݅औಘ ϖʔδϯάͷͨΊʹ શ݅ϧʔϓͰճ͢ ϖʔδͷޙʹߦ͚ߦ͘΄Ͳ ϧʔϓ͕ճͬͯ͘ͳΔ O(n) ྫ1
߹Θٕͤ O(n^2) O(n)ΛೖΕࢠʹ͢ΕύϫʔΞοϓ ྫ2 ୈ1ϧʔϓͰશ݅ճ͢ O(n) ୈ2ϧʔϓશ݅ճ͢ O(n)
ୈҰҾ࠷େͰඦ݅ఔ͕ͩͬͨ ୈೋҾͷσʔλ͕͍ͯͬͯ͠… ྫ2 ୈ1ϧʔϓͰશ݅ճ͢ O(n) ୈ2ϧʔϓશ݅ճ͢ O(n)
ྫ2ͷΞϧΰϦζϜΛ࡞ͬͯ ࣮ଌͯ͠ΈΔ
σʔλྔʹΑΔੑೳͷྼԽ
ॲཧ࣌ؒ(ඵ) σʔλ݅ (ୈ1,2 Ҿಉ͡)
ͪΌΜͱO(n^2)ͷ άϥϑʹͳͬͨ
ࣄલʹݕͰ͖ͳ͍͔ʁ
࣮ྫ̍ɾ̎ͷίʔυ ୯ମςετ -> ௨ա ड͚ೖΕςετ -> ௨ա ௨աͯ͠͠·͍ͬͯͨ…
ෛՙςετ ίʔυϨϏϡʔ ࣄલݕग़Մೳͳࡆ
ෛՙςετ σʔλྔ͕ലେʹͳΔ͜ͱ͕ Θ͔͍ͬͯΔϓϩμΫτߦ͍ͬͯΔɻ ௨ৗͷϓϩμΫτͩͱ ͋Μ·ΓͬͯΔͷݟͨ͜ͱແ͍ɻ
ίʔυϨϏϡʔ ϨϏϡΞʔͷεΩϧܦݧʹґଘ ࣄલʹܭࢉྔʹ͍ͭͯ νʔϜͰษڧձͱ͔ͯ͠Ε ࢦఠˍमਖ਼؆୯ͩͱࢥ͏
ࢹπʔϧͰɺॲཧ࣌ؒͷϝτϦΫεΛݟͯ ཧ٧ΊͰॲཧ࣌ؒͷ͍෦ΛಛఆͰ͖Ε ·͋ɺٴୈͩͱࢥ͏ɻ ࠷ѱݟಀͯ͠
͓·͚
ܭࢉྔ͕Ұྎવ
σʔλͷू·ΓΛѻ͏ϓϩάϥϜ ܭࢉྔ͕໌ࣔ͞Ε͍ͯΔͱ͋Γ͕͍ͨ
͓͠·͍