ããŒã¿æ§é ã®å®è£ ãšåææ¹æ³ãçè§£ããJavaScriptã®ããã©ãŒãã³ã¹ããã¹ã¿ãŒããŸãããããã®ç·åã¬ã€ãã§ã¯ãé åããªããžã§ã¯ããããªãŒãªã©ãå®è·µçãªã³ãŒãäŸãšå ±ã«è§£èª¬ããŸãã
JavaScriptã¢ã«ãŽãªãºã å®è£ ïŒããŒã¿æ§é ã®ããã©ãŒãã³ã¹åŸ¹åºè§£èª¬
Webéçºã®äžçã«ãããŠãJavaScriptã¯ã¯ã©ã€ã¢ã³ããµã€ãã®çµ¶å¯Ÿçãªçè ã§ããããµãŒããŒãµã€ãã§ãæ¯é çãªåãæã£ãŠããŸããç§ãã¡ã¯çŽ æŽããããŠãŒã¶ãŒäœéšãæ§ç¯ããããã«ããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªããããŠæ°ããèšèªæ©èœã«æ³šç®ããã¡ã§ãããããããã¹ãŠã®æŽç·ŽãããUIãé«éãªAPIã®è£ã«ã¯ãããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãšããåºç€ãååšããŸããé©åãªãã®ãéžæããããšããè¶ é«éãªã¢ããªã±ãŒã·ã§ã³ãšãè² è·ãããããšåæ¢ããŠããŸãã¢ããªã±ãŒã·ã§ã³ãšã®éããçãããšããããŸããããã¯åãªãåŠè¡çãªæŒç¿ã§ã¯ãªããåªããéçºè ãšå倧ãªéçºè ãåããå®è·µçãªã¹ãã«ãªã®ã§ãã
ãã®ç·åã¬ã€ãã¯ãåã«çµã¿èŸŒã¿ã¡ãœããã䜿çšããã ãã§ãªãããããããªããã®ããã«åäœããã®ããçè§£ãããããã®JavaScriptéçºè ã®ããã®ãã®ã§ããç§ãã¡ã¯JavaScriptã®ãã€ãã£ããªããŒã¿æ§é ã®ããã©ãŒãã³ã¹ç¹æ§ã培åºçã«åæããå€å žçãªããŒã¿æ§é ããŒãããå®è£ ããçŸå®äžçã®ã·ããªãªã§ãã®å¹çãåæããæ¹æ³ãåŠã³ãŸãããã®ã¬ã€ããèªã¿çµããé ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®é床ãã¹ã±ãŒã©ããªãã£ããããŠãŠãŒã¶ãŒæºè¶³åºŠã«çŽæ¥åœ±é¿ãäžãããæ å ±ã«åºã¥ããæææ±ºå®ãã§ããããã«ãªã£ãŠããã§ãããã
ããã©ãŒãã³ã¹ã®èšèªïŒããã°ãªãŒèšæ³ã®ç°¡åãªåŸ©ç¿
ã³ãŒãã«é£ã³èŸŒãåã«ãããã©ãŒãã³ã¹ã«ã€ããŠè°è«ããããã®å ±éèšèªãå¿ èŠã§ãããã®èšèªãããã°ãªãŒèšæ³ã§ããããã°ãªãŒèšæ³ã¯ãå ¥åãµã€ãºïŒäžè¬çã«'n'ã§ç€ºãããïŒã倧ãããªãã«ã€ããŠãã¢ã«ãŽãªãºã ã®å®è¡æéãã¡ã¢ãªèŠä»¶ãã©ã®ããã«ã¹ã±ãŒã«ãããã®ææªã®ã·ããªãªãèšè¿°ããŸããããªç§åäœã§éåºŠãæž¬å®ããã®ã§ã¯ãªããæäœã®æé·æ²ç·ãçè§£ããããã®ãã®ã§ãã
以äžã¯ãæãäžè¬çã«ééããèšç®éã§ãïŒ
- O(1) - 宿°æéïŒ ããã©ãŒãã³ã¹ã®èæ¯ã§ããæäœãå®äºããã®ã«ãããæéã¯ãå ¥åããŒã¿ã®ãµã€ãºã«é¢ä¿ãªãäžå®ã§ããé åããã€ã³ããã¯ã¹ã§èŠçŽ ãååŸããã®ãå žåçãªäŸã§ãã
- O(log n) - å¯Ÿæ°æéïŒ å®è¡æéã¯å ¥åãµã€ãºã«å¯ŸããŠå¯Ÿæ°çã«å¢å ããŸããããã¯éåžžã«å¹ççã§ããå ¥åãµã€ãºã2åã«ãããã³ã«ãæäœã®æ°ã¯1ã€ããå¢ããŸããã平衡äºåæ¢çŽ¢æšã§ã®æ€çŽ¢ãäž»ãªäŸã§ãã
- O(n) - ç·åœ¢æéïŒ å®è¡æéã¯å ¥åãµã€ãºã«æ£æ¯äŸããŠå¢å ããŸããå ¥åã10åããã°10ãã¹ããããã1,000,000åããã°1,000,000ãã¹ããããããããŸãããœãŒããããŠããªãé åã§å€ãæ€çŽ¢ããã®ã¯ãå žåçãªO(n)ã®æäœã§ãã
- O(n log n) - ç·åœ¢å¯Ÿæ°æéïŒ ããŒãžãœãŒããããŒããœãŒãã®ãããªãœãŒãã¢ã«ãŽãªãºã ã§éåžžã«ããèŠãããå¹ççãªèšç®éã§ããããŒã¿ãå¢ããŠãã¹ã±ãŒã«ããããã§ãã
- O(n^2) - äºä¹æéïŒ å®è¡æéã¯å ¥åãµã€ãºã®äºä¹ã«æ¯äŸããŸãããããããç©äºãæ¥éã«é ããªãå§ããŸããåãã³ã¬ã¯ã·ã§ã³ã«å¯Ÿãããã¹ããããã«ãŒããäžè¬çãªåå ã§ããåçŽãªããã«ãœãŒããå žåçãªäŸã§ãã
- O(2^n) - ææ°æéïŒ å®è¡æéã¯ãå ¥åã«æ°ããèŠçŽ ã远å ããããã³ã«2åã«ãªããŸãããããã®ã¢ã«ãŽãªãºã ã¯ãããå°ããªããŒã¿ã»ãã以å€ã§ã¯äžè¬çã«ã¹ã±ãŒã©ãã«ã§ã¯ãããŸãããã¡ã¢åãªãã§ã®ãã£ããããæ°ã®ååž°èšç®ããã®äžäŸã§ãã
ããã°ãªãŒèšæ³ãçè§£ããããšã¯åºæ¬ã§ããããã«ãããäžè¡ã®ã³ãŒããå®è¡ããã«ããã©ãŒãã³ã¹ãäºæž¬ããã¹ã±ãŒã«ã®è©Šç·Žã«èããã¢ãŒããã¯ãã£äžã®æ±ºå®ãäžãããšãã§ããŸãã
JavaScriptã®çµã¿èŸŒã¿ããŒã¿æ§é ïŒããã©ãŒãã³ã¹ã®åŸ¹åºè§£å
JavaScriptã¯åŒ·åãªçµã¿èŸŒã¿ããŒã¿æ§é ã®ã»ãããæäŸããŠããŸãããããã®åŒ·ã¿ãšåŒ±ã¿ãçè§£ããããã«ãããã©ãŒãã³ã¹ç¹æ§ãåæããŠã¿ãŸãããã
ã©ãã§ã䜿ãããé å (Array)
JavaScriptã®`Array`ã¯ãããããæããã䜿ãããããŒã¿æ§é ã§ããããã¯å€ã®é åºä»ããªã¹ãã§ããå éšã§ã¯ãJavaScriptãšã³ãžã³ãé åãå€§å¹ ã«æé©åããŠããŸããããã®åºæ¬çãªç¹æ§ã¯äŸç¶ãšããŠã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®ååã«åŸã£ãŠããŸãã
- ã¢ã¯ã»ã¹ïŒã€ã³ããã¯ã¹ã«ããïŒïŒ O(1) - ç¹å®ã®ã€ã³ããã¯ã¹ã«ããèŠçŽ ãžã®ã¢ã¯ã»ã¹ïŒäŸïŒ`myArray[5]`ïŒã¯ãã³ã³ãã¥ãŒã¿ããã®ã¡ã¢ãªã¢ãã¬ã¹ãçŽæ¥èšç®ã§ãããããéåžžã«é«éã§ãã
- PushïŒæ«å°Ÿã«è¿œå ïŒïŒ å¹³åO(1) - æ«å°Ÿã«èŠçŽ ã远å ããã®ã¯éåžžéåžžã«é«éã§ããJavaScriptãšã³ãžã³ã¯ã¡ã¢ãªãäºåã«ç¢ºä¿ããããããããŠãã¯å€ãèšå®ããã ãã§ããæã ãé åã®ãµã€ãºå€æŽãšã³ããŒãå¿ èŠã«ãªããããã¯O(n)ã®æäœã§ãããé »ç¹ã«ã¯èµ·ãããªããããååŽæéèšç®éã¯O(1)ãšãªããŸãã
- PopïŒæ«å°Ÿããåé€ïŒïŒ O(1) - ä»ã®èŠçŽ ã®ã€ã³ããã¯ã¹ãåèšå®ããå¿ èŠããªããããæåŸã®èŠçŽ ãåé€ããã®ãéåžžã«é«éã§ãã
- UnshiftïŒå é ã«è¿œå ïŒïŒ O(n) - ããã¯ããã©ãŒãã³ã¹ã®çœ ã§ãïŒå é ã«èŠçŽ ã远å ããã«ã¯ãé åå ã®ä»ã®ãã¹ãŠã®èŠçŽ ãå³ã«1ã€ãã€ã·ããããå¿ èŠããããŸããã³ã¹ãã¯é åã®ãµã€ãºã«æ¯äŸããŠç·åœ¢ã«å¢å ããŸãã
- ShiftïŒå é ããåé€ïŒïŒ O(n) - åæ§ã«ãæåã®èŠçŽ ãåé€ããã«ã¯ãåŸç¶ã®ãã¹ãŠã®èŠçŽ ãå·Šã«1ã€ãã€ã·ããããå¿ èŠããããŸããããã©ãŒãã³ã¹ãéèŠãªã«ãŒãã§å€§ããªé åã«å¯ŸããŠãããè¡ãã®ã¯é¿ããŠãã ããã
- æ€çŽ¢ïŒäŸïŒ`indexOf`, `includes`ïŒïŒ O(n) - èŠçŽ ãèŠã€ããã«ã¯ãJavaScriptã¯å é ããäžèŽãããã®ãèŠã€ãããŸã§ããã¹ãŠã®èŠçŽ ããã§ãã¯ããå¿ èŠããããããããŸããã
- Splice / SliceïŒ O(n) - é åã®éäžã§ã®æ¿å ¥/åé€ãããµãé åã®äœæãè¡ããããã®ã¡ãœããã¯ãäžè¬çã«ã€ã³ããã¯ã¹ã®åèšå®ãé åã®äžéšã®ã³ããŒãå¿ èŠãšãããããç·åœ¢æéã®æäœãšãªããŸãã
éèŠãªãã€ã³ãïŒ é åã¯ãã€ã³ããã¯ã¹ã«ããé«éãªã¢ã¯ã»ã¹ããæ«å°Ÿã§ã®èŠçŽ ã®è¿œå /åé€ã«éåžžã«åªããŠããŸããå é ãéäžã§ã®èŠçŽ ã®è¿œå /åé€ã«ã¯éå¹çã§ãã
äžèœãªãªããžã§ã¯ãïŒããã·ã¥ããããšããŠïŒ
JavaScriptã®ãªããžã§ã¯ãã¯ããŒãšå€ã®ãã¢ã®ã³ã¬ã¯ã·ã§ã³ã§ããå€ãã®çšéã«äœ¿ããŸãããããŒã¿æ§é ãšããŠã®äž»ãªåœ¹å²ã¯ããã·ã¥ãããïŒãŸãã¯èŸæžïŒã§ããããã·ã¥é¢æ°ã¯ããŒãåãåãããããã€ã³ããã¯ã¹ã«å€æãããã®ã¡ã¢ãªäœçœ®ã«å€ãæ ŒçŽããŸãã
- æ¿å ¥ / æŽæ°ïŒ å¹³åO(1) - æ°ããããŒãšå€ã®ãã¢ã远å ããããæ¢åã®ãã®ãæŽæ°ãããããã«ã¯ãããã·ã¥ãèšç®ããŠããŒã¿ãé 眮ããŸããããã¯éåžžã宿°æéã§ãã
- åé€ïŒ å¹³åO(1) - ããŒãšå€ã®ãã¢ãåé€ããã®ããå¹³åããŠå®æ°æéã®æäœã§ãã
- ã«ãã¯ã¢ããïŒããŒã«ããã¢ã¯ã»ã¹ïŒïŒ å¹³åO(1) - ããããªããžã§ã¯ãã®ã¹ãŒããŒãã¯ãŒã§ãããªããžã§ã¯ãã«ã©ãã ãå€ãã®ããŒããã£ãŠããããŒã«ãã£ãŠå€ãååŸããã®ã¯éåžžã«é«éã§ãã
ãå¹³åããŠããšããèšèãéèŠã§ãããŸãã«ããã·ã¥è¡çªïŒ2ã€ã®ç°ãªãããŒãåãããã·ã¥ã€ã³ããã¯ã¹ãçæããïŒãçºçããå Žåãæ§é ã¯ãã®ã€ã³ããã¯ã¹ã«ããå°ããªã¢ã€ãã ã®ãªã¹ããå埩åŠçããå¿ èŠããããããããã©ãŒãã³ã¹ã¯O(n)ã«äœäžããå¯èœæ§ããããŸããããããçŸä»£ã®JavaScriptãšã³ãžã³ã¯åªããããã·ã¥ã¢ã«ãŽãªãºã ãæã£ãŠãããããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¯åé¡ã«ãªããŸããã
ES6ã®åŒ·åãªæ©èœïŒSetãšMap
ES6ã§ã¯`Map`ãš`Set`ãå°å ¥ãããç¹å®ã®ã¿ã¹ã¯ã«å¯ŸããŠãªããžã§ã¯ããé åã䜿çšãããããå°éçã§ããã°ãã°ããããã©ãŒãã³ã¹ã®é«ãä»£æ¿ææ®µãæäŸããŸãã
SetïŒ `Set`ã¯ãŠããŒã¯ãªå€ã®ã³ã¬ã¯ã·ã§ã³ã§ããéè€ã®ãªãé åã®ãããªãã®ã§ãã
- `add(value)`ïŒ å¹³åO(1)ã
- `has(value)`ïŒ å¹³åO(1)ãããããO(n)ã§ããé åã®`includes()`ã¡ãœããã«å¯Ÿããäž»ãªå©ç¹ã§ãã
- `delete(value)`ïŒ å¹³åO(1)ã
`Set`ã¯ããŠããŒã¯ãªã¢ã€ãã ã®ãªã¹ããæ ŒçŽãããã®ååšãé »ç¹ã«ãã§ãã¯ããå¿ èŠãããå Žåã«äœ¿çšããŸããäŸãã°ããŠãŒã¶ãŒIDããã§ã«åŠçããããã©ããããã§ãã¯ããå Žåãªã©ã§ãã
MapïŒ `Map`ã¯ãªããžã§ã¯ãã«äŒŒãŠããŸãããããã€ãã®éèŠãªå©ç¹ããããŸããããã¯ããŒãšå€ã®ãã¢ã®ã³ã¬ã¯ã·ã§ã³ã§ãããŒã¯ä»»æã®ããŒã¿åïŒãªããžã§ã¯ãã®ãããªæååãã·ã³ãã«ã ãã§ãªãïŒã«ããããšãã§ããŸãããŸããæ¿å ¥é åºãç¶æããŸãã
- `set(key, value)`ïŒ å¹³åO(1)ã
- `get(key)`ïŒ å¹³åO(1)ã
- `has(key)`ïŒ å¹³åO(1)ã
- `delete(key)`ïŒ å¹³åO(1)ã
èŸæž/ããã·ã¥ããããå¿ èŠã§ãããŒãæååã§ãªãå¯èœæ§ãããå ŽåããŸãã¯èŠçŽ ã®é åºãä¿èšŒããå¿ èŠãããå Žåã«`Map`ã䜿çšããŸããäžè¬çã«ãããã·ã¥ãããã®ç®çã«ã¯ããã¬ãŒã³ãªãªããžã§ã¯ããããå ç¢ãªéžæè¢ãšèŠãªãããŠããŸãã
å€å žçãªããŒã¿æ§é ããŒãããå®è£ ãåæãã
ããã©ãŒãã³ã¹ãçã«çè§£ããããã«ã¯ããããã®æ§é ãèªåã§æ§ç¯ããããšã«ä»£ãããã®ã¯ãããŸãããããã«ãããé¢é£ãããã¬ãŒããªãã«ã€ããŠã®çè§£ãæ·±ãŸããŸãã
é£çµãªã¹ãïŒé åã®å¶çŽããã®è±åŽ
é£çµãªã¹ãã¯ãèŠçŽ ãé£ç¶ããã¡ã¢ãªäœçœ®ã«æ ŒçŽãããªãç·åœ¢ããŒã¿æ§é ã§ãã代ããã«ãåèŠçŽ ïŒãããŒããïŒã¯ãèªèº«ã®ããŒã¿ãšã·ãŒã±ã³ã¹å ã®æ¬¡ã®ããŒããžã®ãã€ã³ã¿ãå«ãã§ããŸãããã®æ§é ã¯ãé åã®åŒ±ç¹ãçŽæ¥è§£æ±ºããŸãã
åæ¹åé£çµãªã¹ãã®ããŒããšãªã¹ãã®å®è£ ïŒ
// Nodeã¯ã©ã¹ã¯ãªã¹ãå ã®åèŠçŽ ã衚ããŸã class Node { constructor(data, next = null) { this.data = data; this.next = next; } } // LinkedListã¯ã©ã¹ã¯ããŒãã管çããŸã class LinkedList { constructor() { this.head = null; // æåã®ããŒã this.size = 0; } // å é ã«æ¿å ¥ïŒããªãã³ãïŒ insertFirst(data) { this.head = new Node(data, this.head); this.size++; } // ... insertLast, insertAt, getAt, removeAt ãªã©ã®ä»ã®ã¡ãœãã ... }
é åãšã®ããã©ãŒãã³ã¹æ¯èŒåæïŒ
- å é ã§ã®æ¿å ¥/åé€ïŒ O(1)ããããé£çµãªã¹ãã®æå€§ã®å©ç¹ã§ããå é ã«æ°ããããŒãã远å ããã«ã¯ããããäœæãããã®`next`ãå€ã`head`ã«åããã ãã§ããã€ã³ããã¯ã¹ã®åèšå®ã¯äžèŠã§ãïŒããã¯ãé åã®O(n)ã§ãã`unshift`ã`shift`ã«æ¯ã¹ãŠå€§å¹ ãªæ¹åã§ãã
- æ«å°Ÿ/äžéã§ã®æ¿å ¥/åé€ïŒ ããã«ã¯ãªã¹ããèµ°æ»ããŠæ£ããäœçœ®ãèŠã€ããå¿ èŠããããããO(n)ã®æäœã«ãªããŸããæ«å°Ÿãžã®è¿œå ã¯é åã®æ¹ãéãããšãå€ãã§ããåæ¹åé£çµãªã¹ãïŒæ¬¡ãšåã®äž¡æ¹ã®ããŒããžã®ãã€ã³ã¿ãæã€ïŒã¯ãåé€å¯Ÿè±¡ã®ããŒããžã®åç §ããã§ã«ããå Žåãåé€ãæé©åã§ããO(1)ã«ãªããŸãã
- ã¢ã¯ã»ã¹/æ€çŽ¢ïŒ O(n)ãçŽæ¥çãªã€ã³ããã¯ã¹ã¯ãããŸããã100çªç®ã®èŠçŽ ãèŠã€ããã«ã¯ã`head`ããå§ããŠ99åã®ããŒããèµ°æ»ããå¿ èŠããããŸããããã¯ãé åã®O(1)ã®ã€ã³ããã¯ã¹ã¢ã¯ã»ã¹ãšæ¯èŒããŠå€§ããªæ¬ ç¹ã§ãã
ã¹ã¿ãã¯ãšãã¥ãŒïŒé åºãšãããŒã®ç®¡ç
ã¹ã¿ãã¯ãšãã¥ãŒã¯ããã®åºç€ãšãªãå®è£ ã§ã¯ãªããæ¯ãèãã«ãã£ãŠå®çŸ©ãããæœè±¡ããŒã¿åã§ããã¿ã¹ã¯ãæäœãããŒã¿ãããŒã管çããããã«äžå¯æ¬ ã§ãã
ã¹ã¿ãã¯ïŒLIFO - åŸå ¥ãå åºãïŒïŒ ãç¿ã®å±±ãæ³åããŠãã ãããäžçªäžã«ãç¿ã远å ããäžçªäžãããç¿ãåãé€ããŸããæåŸã«å ¥ãããã®ããæåã«åãåºãããŸãã
- é åã«ããå®è£ ïŒ ç°¡åã§å¹ççã§ããã¹ã¿ãã¯ã«è¿œå ããã«ã¯`push()`ããåé€ããã«ã¯`pop()`ã䜿çšããŸããã©ã¡ããO(1)ã®æäœã§ãã
- é£çµãªã¹ãã«ããå®è£ ïŒ ãããéåžžã«å¹ççã§ãã远å ïŒããã·ã¥ïŒã«ã¯`insertFirst()`ããåé€ïŒãããïŒã«ã¯`removeFirst()`ã䜿çšããŸããã©ã¡ããO(1)ã®æäœã§ãã
ãã¥ãŒïŒFIFO - å å ¥ãå åºãïŒïŒ ãã±ããã«ãŠã³ã¿ãŒã®åãæ³åããŠãã ãããæåã«åã«äžŠãã 人ããæåã«ãµãŒãã¹ãåããŸãã
- é åã«ããå®è£ ïŒ ããã¯ããã©ãŒãã³ã¹ã®çœ ã§ãïŒãã¥ãŒã®æ«å°Ÿã«è¿œå ïŒãšã³ãã¥ãŒïŒããã«ã¯`push()`ïŒO(1)ïŒã䜿çšããŸããããããå é ããåé€ïŒããã¥ãŒïŒããã«ã¯`shift()`ïŒO(n)ïŒã䜿çšããªããã°ãªããŸãããããã¯å€§ããªãã¥ãŒã«ã¯éå¹çã§ãã
- é£çµãªã¹ãã«ããå®è£ ïŒ ãããçæ³çãªå®è£ ã§ãããªã¹ãã®æ«å°ŸïŒtailïŒã«ããŒãã远å ããŠãšã³ãã¥ãŒããå é ïŒheadïŒããããŒããåé€ããŠããã¥ãŒããŸããheadãštailã®äž¡æ¹ãžã®åç §ãããã°ãäž¡æ¹ã®æäœãO(1)ã«ãªããŸãã
äºåæ¢çŽ¢æšïŒBSTïŒïŒé床ã®ããã®æŽç
ãœãŒããããããŒã¿ãããå ŽåãO(n)ã®æ€çŽ¢ãããã¯ããã«åªããããšãã§ããŸããäºåæ¢çŽ¢æšã¯ããã¹ãŠã®ããŒããå€ãå·Šã®åãå³ã®åãæã€ããŒãããŒã¹ã®æšããŒã¿æ§é ã§ããéèŠãªç¹æ§ã¯ãä»»æã®ããŒãã«å¯ŸããŠããã®å·Šã®éšåæšã«ãããã¹ãŠã®å€ã¯ãã®ããŒãã®å€ããå°ãããå³ã®éšåæšã«ãããã¹ãŠã®å€ã¯å€§ããããšã§ãã
BSTã®ããŒããšããªãŒã®å®è£ ïŒ
class Node { constructor(data) { this.data = data; this.left = null; this.right = null; } } class BinarySearchTree { constructor() { this.root = null; } insert(data) { const newNode = new Node(data); if (this.root === null) { this.root = newNode; } else { this.insertNode(this.root, newNode); } } // ãã«ããŒååž°é¢æ° insertNode(node, newNode) { if (newNode.data < node.data) { if (node.left === null) { node.left = newNode; } else { this.insertNode(node.left, newNode); } } else { if (node.right === null) { node.right = newNode; } else { this.insertNode(node.right, newNode); } } } // ... search ãš remove ã¡ãœãã ... }
ããã©ãŒãã³ã¹åæïŒ
- æ€çŽ¢ãæ¿å ¥ãåé€ïŒ 平衡ã®åããæšã§ã¯ããããã®æäœã¯ãã¹ãŠO(log n)ã§ããããã¯ãæ¯èŒã®ãã³ã«æ®ãã®ããŒãã®ååãæé€ããããã§ããããã¯éåžžã«åŒ·åã§ã¹ã±ãŒã©ãã«ã§ãã
- äžåè¡¡ãªæšã®åé¡ïŒ O(log n)ã®ããã©ãŒãã³ã¹ã¯ãæšã平衡ã§ãããã©ããã«å®å šã«äŸåããŸããåçŽãªBSTã«ãœãŒããããããŒã¿ïŒäŸïŒ1, 2, 3, 4, 5ïŒãæ¿å ¥ãããšãããã¯é£çµãªã¹ãã«å€è³ªããŸãããã¹ãŠã®ããŒããå³ã®åã«ãªããŸãããã®ææªã®å Žåããã¹ãŠã®æäœã®ããã©ãŒãã³ã¹ã¯O(n)ã«äœäžããŸããããããAVLæšãèµ€é»æšã®ãããªãããé«åºŠãªèªå·±å¹³è¡¡æšãååšããçç±ã§ãããå®è£ ã¯ããè€éã§ãã
ã°ã©ãïŒè€éãªé¢ä¿ã®ã¢ããªã³ã°
ã°ã©ãã¯ã蟺ã«ãã£ãŠæ¥ç¶ãããããŒãïŒé ç¹ïŒã®éåã§ãããœãŒã·ã£ã«ãããã¯ãŒã¯ãéè·¯å°å³ãã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ãªã©ããããã¯ãŒã¯ãã¢ãã«åããã®ã«æé©ã§ããã³ãŒãã§ã°ã©ããã©ã®ããã«è¡šçŸãããã¯ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸãã
飿¥è¡åïŒ ãµã€ãºãV x VïŒVã¯é ç¹ã®æ°ïŒã®2次å é åïŒè¡åïŒãé ç¹`i`ãã`j`ãžã®èŸºãããå Žå`matrix[i][j] = 1`ãããã§ãªããã°0ã§ãã
- é·æïŒ 2ã€ã®é ç¹éã®èŸºã®ååšã確èªããã®ã¯O(1)ã§ãã
- çæïŒ O(V^2)ã®ã¹ããŒã¹ã䜿çšãããããçãªã°ã©ãïŒèŸºãå°ãªãã°ã©ãïŒã«ã¯éåžžã«éå¹çã§ããããé ç¹ã®ãã¹ãŠã®é£æ¥é ç¹ãèŠã€ããã®ã«O(V)ã®æéãããããŸãã
飿¥ãªã¹ãïŒ ãªã¹ãã®é åïŒãŸãã¯ãããïŒãé åã®ã€ã³ããã¯ã¹`i`ã¯é ç¹`i`ã衚ãããã®ã€ã³ããã¯ã¹ã«ãããªã¹ãã«ã¯`i`ã蟺ãæã€ãã¹ãŠã®é ç¹ãå«ãŸããŸãã
- é·æïŒ O(V + E)ã®ã¹ããŒã¹ã䜿çšãããããã¹ããŒã¹å¹çãè¯ãã§ãïŒEã¯èŸºã®æ°ïŒãããé ç¹ã®ãã¹ãŠã®é£æ¥é ç¹ãèŠã€ããã®ã¯å¹ççã§ãïŒé£æ¥é ç¹ã®æ°ã«æ¯äŸïŒã
- çæïŒ 2ã€ã®æå®ãããé ç¹éã®èŸºã確èªããã«ã¯ãæå€§ã§O(log k)ãŸãã¯O(k)ã®æéããããããšããããŸãïŒkã¯é£æ¥é ç¹ã®æ°ïŒã
Webäžã®ã»ãšãã©ã®çŸå®äžçã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã°ã©ãã¯çã§ããããã飿¥ãªã¹ããã¯ããã«äžè¬çã§ããã©ãŒãã³ã¹ã®é«ãéžæè¢ã§ãã
çŸå®äžçã§ã®å®è·µçãªããã©ãŒãã³ã¹æž¬å®
çè«çãªããã°ãªãŒèšæ³ã¯ã¬ã€ãã§ãããæã«ã¯å ·äœçãªæ°å€ãå¿ èŠã§ããã³ãŒãã®å®éã®å®è¡æéãã©ã®ããã«æž¬å®ããŸããïŒ
çè«ãè¶ ããŠïŒã³ãŒãã®æ£ç¢ºãªæé枬å®
`Date.now()`ã䜿ããªãã§ãã ãããããã¯é«ç²ŸåºŠã®ãã³ãããŒãã³ã°çšã«èšèšãããŠããŸããã代ããã«ããã©ãŠã¶ãšNode.jsã®äž¡æ¹ã§å©çšå¯èœãªPerformance APIã䜿çšããŠãã ããã
é«ç²ŸåºŠãªæé枬å®ã®ããã®`performance.now()`ã®äœ¿çšïŒ
// äŸïŒArray.unshiftãšLinkedListã®æ¿å ¥ã®æ¯èŒ const hugeArray = Array.from({ length: 100000 }, (_, i) => i); const hugeLinkedList = new LinkedList(); // å®è£ ãããŠãããšä»®å® for(let i = 0; i < 100000; i++) { hugeLinkedList.insertLast(i); } // Array.unshiftã®ãã¹ã const startTimeArray = performance.now(); hugeArray.unshift(-1); const endTimeArray = performance.now(); console.log(`Array.unshiftã«ããã£ãæéïŒ${endTimeArray - startTimeArray}ããªç§`); // LinkedList.insertFirstã®ãã¹ã const startTimeLL = performance.now(); hugeLinkedList.insertFirst(-1); const endTimeLL = performance.now(); console.log(`LinkedList.insertFirstã«ããã£ãæéïŒ${endTimeLL - startTimeLL}ããªç§`);
ãããå®è¡ãããšãåçãªéããããããŸããé£çµãªã¹ãã®æ¿å ¥ã¯ã»ãŒç¬æã«å®äºããã®ã«å¯Ÿããé åã®unshiftã¯é¡èãªæéãããããO(1)察O(n)ã®çè«ãå®è·µã§èšŒæãããŸãã
V8ãšã³ãžã³ã®èŠå ïŒèŠããªããã®
JavaScriptã³ãŒããçç©ºç¶æ ã§å®è¡ãããããã§ã¯ãªãããšãèŠããŠããããšãéèŠã§ããããã¯V8ïŒChromeãNode.jsã§äœ¿çšïŒã®ãããªé«åºŠã«æŽç·Žããããšã³ãžã³ã«ãã£ãŠå®è¡ãããŸããV8ã¯ä¿¡ããããªãã»ã©ã®JITïŒJust-In-TimeïŒã³ã³ãã€ã«ãšæé©åã®ããªãã¯ãå®è¡ããŸãã
- é ãã¯ã©ã¹ïŒShapesïŒïŒ V8ã¯ãåãããããã£ããŒãåãé åºã§æã€ãªããžã§ã¯ãã«å¯ŸããŠæé©åããããã·ã§ã€ãããäœæããŸããããã«ãããããããã£ãžã®ã¢ã¯ã»ã¹ã¯é åã®ã€ã³ããã¯ã¹ã¢ã¯ã»ã¹ãšã»ãŒåãéãã«ãªããŸãã
- ã€ã³ã©ã€ã³ãã£ãã·ã³ã°ïŒ V8ã¯ç¹å®ã®æäœã§èŠãå€ã®åãèšæ¶ããäžè¬çãªã±ãŒã¹ã«å¯ŸããŠæé©åããŸãã
ããã¯ããªãã«ãšã£ãŠäœãæå³ããã§ããããïŒçè«çã«ã¯ããã°ãªãŒèšæ³ã§é ãæäœãããšã³ãžã³ã«ããæé©åã®ããã«å°ããªããŒã¿ã»ããã§ã¯å®éã«ã¯éãããšããããšããããšã§ããäŸãã°ãéåžžã«å°ããª`n`ã«å¯ŸããŠã¯ã`shift()`ã䜿çšããé åããŒã¹ã®ãã¥ãŒã¯ãããŒããªããžã§ã¯ããäœæãããªãŒããŒããããV8ã®æé©åããããã€ãã£ããªé åæäœã®çã®é床ã®ããã«ãã«ã¹ã¿ã ãã«ãã®é£çµãªã¹ããã¥ãŒãããå®éã«éããããããŸããããããã`n`ã倧ãããªãã«ã€ããŠãããã°ãªãŒèšæ³ãåžžã«åã¡ãŸããã¹ã±ãŒã©ããªãã£ã®ããã®äž»èŠãªã¬ã€ããšããŠãåžžã«ããã°ãªãŒèšæ³ã䜿çšããŠãã ããã
究極ã®è³ªåïŒã©ã®ããŒã¿æ§é ã䜿ãã¹ããïŒ
çè«ã¯çŽ æŽãããã§ããããããå ·äœçã§ã°ããŒãã«ãªéçºã·ããªãªã«é©çšããŠã¿ãŸãããã
-
ã·ããªãª1ïŒãŠãŒã¶ãŒãæ²ã远å ãåé€ãäžŠã¹æ¿ãã§ãã鳿¥œãã¬ã€ãªã¹ãã®ç®¡çã
åæïŒ ãŠãŒã¶ãŒã¯é »ç¹ã«æ²ãäžéã«è¿œå /åé€ããŸããé åã§ã¯O(n)ã®`splice`æäœãå¿ èŠã«ãªããŸããããã§ã¯åæ¹åé£çµãªã¹ããçæ³çã§ããããããŒããžã®åç §ãããã°ãæ²ã®åé€ã2ã€ã®æ²ã®éã«æ²ãæ¿å ¥ããæäœã¯O(1)ã«ãªãã巚倧ãªãã¬ã€ãªã¹ãã§ãUIãç¬æã«æããããŸãã
-
ã·ããªãª2ïŒAPIã¬ã¹ãã³ã¹çšã®ã¯ã©ã€ã¢ã³ããµã€ããã£ãã·ã¥ã®æ§ç¯ãããŒã¯ã¯ãšãªãã©ã¡ãŒã¿ã衚ãè€éãªãªããžã§ã¯ãã
åæïŒ ããŒã«åºã¥ããé«éãªã«ãã¯ã¢ãããå¿ èŠã§ãããã¬ãŒã³ãªãªããžã§ã¯ãã¯ããŒãæååããåããªããã倱æããŸããMapãå®ç§ãªè§£æ±ºçã§ããããŒãšããŠãªããžã§ã¯ããèš±å¯ãã`get`ã`set`ã`has`ã«å¯ŸããŠå¹³åO(1)ã®æéãæäŸãããããéåžžã«ããã©ãŒãã³ã¹ã®é«ããã£ãã·ã³ã°ã¡ã«ããºã ã«ãªããŸãã
-
ã·ããªãª3ïŒããŒã¿ããŒã¹å
ã®100äžä»¶ã®æ¢åã¡ãŒã«ã¢ãã¬ã¹ã«å¯ŸããŠã1äžä»¶ã®æ°èŠãŠãŒã¶ãŒã¡ãŒã«ã¢ãã¬ã¹ã®ããããæ€èšŒããã
åæïŒ çŽ æŽãªã¢ãããŒãã¯ãæ°ããã¡ãŒã«ãã«ãŒãããããããã«ã€ããŠæ¢åã®ã¡ãŒã«é åã«å¯ŸããŠ`Array.includes()`ã䜿çšããããšã§ããããã¯O(n*m)ãšãªãã壿» çãªããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªããŸããæ£ããã¢ãããŒãã¯ããŸã100äžä»¶ã®æ¢åã¡ãŒã«ãSetã«ããŒãããããšã§ãïŒO(m)ã®æäœïŒã次ã«ã1äžä»¶ã®æ°ããã¡ãŒã«ãã«ãŒãããããããã«å¯ŸããŠ`Set.has()`ã䜿çšããŸãããã®ãã§ãã¯ã¯O(1)ã§ããåèšã®èšç®éã¯O(n + m)ãšãªããã¯ããã«åªããŠããŸãã
-
ã·ããªãª4ïŒçµç¹å³ããã¡ã€ã«ã·ã¹ãã ãšã¯ã¹ãããŒã©ãŒã®æ§ç¯ã
åæïŒ ãã®ããŒã¿ã¯æ¬è³ªçã«éå±€çã§ããããªãŒæ§é ãèªç¶ã«ãã£ããããŸããåããŒãã¯åŸæ¥å¡ããã©ã«ãã衚ãããã®åã¯çŽå±ã®éšäžããµããã©ã«ãã«ãªããŸããæ·±ãåªå æ¢çŽ¢ïŒDFSïŒãå¹ åªå æ¢çŽ¢ïŒBFSïŒã®ãããªèµ°æ»ã¢ã«ãŽãªãºã ã䜿çšããŠããã®éå±€ãå¹ççã«ããã²ãŒãããã衚瀺ãããã§ããŸãã
çµè«ïŒããã©ãŒãã³ã¹ã¯æ©èœã§ãã
ããã©ãŒãã³ã¹ã®é«ãJavaScriptãæžãããšã¯ãææå°æ©ãªæé©åãããã¹ãŠã®ã¢ã«ãŽãªãºã ãæèšããããšã§ã¯ãããŸãããããã¯ãæ¯æ¥äœ¿ãããŒã«ã«ã€ããŠæ·±ãçè§£ãæ·±ããããšã§ããé åããªããžã§ã¯ããMapãSetã®ããã©ãŒãã³ã¹ç¹æ§ãå é¢åããé£çµãªã¹ããããªãŒã®ãããªå€å žçãªæ§é ãããé©ããŠããå Žåãç¥ãããšã§ãããªãã¯èªèº«ã®æè¡ãåäžãããããšãã§ããŸãã
ããªãã®ãŠãŒã¶ãŒã¯ããã°ãªãŒèšæ³ãäœã§ããããç¥ããªããããããŸãããããã®å¹æãæããã§ããããUIã®ãããããšããåå¿ãããŒã¿ã®è¿ éãªèªã¿èŸŒã¿ããããŠåªé ã«ã¹ã±ãŒã«ããã¢ããªã±ãŒã·ã§ã³ã®ã¹ã ãŒãºãªæäœã®äžã«ããããæããŸãã仿¥ã®ç«¶äºã®æ¿ããããžã¿ã«ç°å¢ã«ãããŠãããã©ãŒãã³ã¹ã¯åãªãæè¡çãªè©³çްã§ã¯ãªããéèŠãªæ©èœã§ããããŒã¿æ§é ããã¹ã¿ãŒããããšã§ãããªãã¯åã«ã³ãŒããæé©åããã ãã§ãªããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããã«ããè¯ããããéããããä¿¡é Œæ§ã®é«ãäœéšãæ§ç¯ããŠããã®ã§ãã