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
Ryo Tomidokoro
September 26, 2018
Programming
3
8.9k
Laravel Collectionの計算量を調べてみた
Laravel Collectionの各メソッドの計算量を確認してみた。
Ryo Tomidokoro
September 26, 2018
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.1k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.3k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
230
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.3k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
53k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.6k
Other Decks in Programming
See All in Programming
複雑なUI設計への銀の弾丸 「オブジェクト指向UIデザイン」
teamlab
PRO
2
110
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
4
1.3k
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
140
Java 25, Nuevas características
czelabueno
0
120
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
190
Graviton と Nitro と私
maroon1st
0
140
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
220
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
120
SwiftUIで本格音ゲー実装してみた
hypebeans
0
510
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
400
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
78
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
SEO for Brand Visibility & Recognition
aleyda
0
4.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
410
Test your architecture with Archunit
thirion
1
2.1k
A better future with KSS
kneath
240
18k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
0
100
A Modern Web Designer's Workflow
chriscoyier
698
190k
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)ͷ άϥϑʹͳͬͨ
ࣄલʹݕͰ͖ͳ͍͔ʁ
࣮ྫ̍ɾ̎ͷίʔυ ୯ମςετ -> ௨ա ड͚ೖΕςετ -> ௨ա ௨աͯ͠͠·͍ͬͯͨ…
ෛՙςετ ίʔυϨϏϡʔ ࣄલݕग़Մೳͳࡆ
ෛՙςετ σʔλྔ͕ലେʹͳΔ͜ͱ͕ Θ͔͍ͬͯΔϓϩμΫτߦ͍ͬͯΔɻ ௨ৗͷϓϩμΫτͩͱ ͋Μ·ΓͬͯΔͷݟͨ͜ͱແ͍ɻ
ίʔυϨϏϡʔ ϨϏϡΞʔͷεΩϧܦݧʹґଘ ࣄલʹܭࢉྔʹ͍ͭͯ νʔϜͰษڧձͱ͔ͯ͠Ε ࢦఠˍमਖ਼؆୯ͩͱࢥ͏
ࢹπʔϧͰɺॲཧ࣌ؒͷϝτϦΫεΛݟͯ ཧ٧ΊͰॲཧ࣌ؒͷ͍෦ΛಛఆͰ͖Ε ·͋ɺٴୈͩͱࢥ͏ɻ ࠷ѱݟಀͯ͠
͓·͚
ܭࢉྔ͕Ұྎવ
σʔλͷू·ΓΛѻ͏ϓϩάϥϜ ܭࢉྔ͕໌ࣔ͞Ε͍ͯΔͱ͋Γ͕͍ͨ
͓͠·͍