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.8k
Laravel Collectionの計算量を調べてみた
Laravel Collectionの各メソッドの計算量を確認してみた。
Ryo Tomidokoro
September 26, 2018
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
フロントエンドが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
190
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.1k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
51k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
10k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.4k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
5.5k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.4k
Other Decks in Programming
See All in Programming
止められない医療アプリ、そっと Swift 6 へ
medley
1
110
実践AIチャットボットUI実装入門
syumai
7
2.4k
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
370
メモリ不足との戦い〜大量データを扱うアプリでの実践例〜
kwzr
1
840
XP, Testing and ninja testing ZOZ5
m_seki
2
270
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
130
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
7
1.6k
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
590
ててべんす独演会〜Flowの全てを語ります〜
tbsten
1
220
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
180
Playwrightはどのようにクロスブラウザをサポートしているのか
yotahada3
7
2.3k
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
0
510
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
890
Side Projects
sachag
455
43k
Faster Mobile Websites
deanohume
310
31k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
KATA
mclloyd
32
15k
Balancing Empowerment & Direction
lara
4
680
How STYLIGHT went responsive
nonsquared
100
5.8k
Automating Front-end Workflow
addyosmani
1371
200k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
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)ͷ άϥϑʹͳͬͨ
ࣄલʹݕͰ͖ͳ͍͔ʁ
࣮ྫ̍ɾ̎ͷίʔυ ୯ମςετ -> ௨ա ड͚ೖΕςετ -> ௨ա ௨աͯ͠͠·͍ͬͯͨ…
ෛՙςετ ίʔυϨϏϡʔ ࣄલݕग़Մೳͳࡆ
ෛՙςετ σʔλྔ͕ലେʹͳΔ͜ͱ͕ Θ͔͍ͬͯΔϓϩμΫτߦ͍ͬͯΔɻ ௨ৗͷϓϩμΫτͩͱ ͋Μ·ΓͬͯΔͷݟͨ͜ͱແ͍ɻ
ίʔυϨϏϡʔ ϨϏϡΞʔͷεΩϧܦݧʹґଘ ࣄલʹܭࢉྔʹ͍ͭͯ νʔϜͰษڧձͱ͔ͯ͠Ε ࢦఠˍमਖ਼؆୯ͩͱࢥ͏
ࢹπʔϧͰɺॲཧ࣌ؒͷϝτϦΫεΛݟͯ ཧ٧ΊͰॲཧ࣌ؒͷ͍෦ΛಛఆͰ͖Ε ·͋ɺٴୈͩͱࢥ͏ɻ ࠷ѱݟಀͯ͠
͓·͚
ܭࢉྔ͕Ұྎવ
σʔλͷू·ΓΛѻ͏ϓϩάϥϜ ܭࢉྔ͕໌ࣔ͞Ε͍ͯΔͱ͋Γ͕͍ͨ
͓͠·͍