ãã®æçš¿ã¯ç¿»èš³ã§ãããåå¿è
åãã§ãã ãŸãããŸãã¯å€§åŠã®åºç€ã³ãŒã¹ããã®è¬çŸ©ãå¿ãã人ã®ããã«ã ã»ãšãã©ã®å Žåããã®è³æã¯æ¢ã«äœããã®åœ¢ã§ããã«åºäŒã£ãŠããŸãããPHPãšãã®æ©èœã«éç¹ã眮ãããŠããŸãã
ããŒã¿æ§é ãŸãã¯æœè±¡ããŒã¿åïŒ
ADT ïŒã¯ãããèªäœã«é©çšã§ããäžé£ã®æäœãšããŠå®çŸ©ãããã¢ãã«ã§ããããããã®æäœãçæããçµæã«ãã£ãŠå¶éãããŸãã
ç§ãã¡ã®ã»ãšãã©ã¯ãæ¥åžžç掻ã®äžã§ã¹ã¿ãã¯ãšãã¥ãŒã«çŽé¢ããŠããŸãããã¹ãŒããŒããŒã±ããã®ãã¥ãŒãšããŒã¿æ§é ã®éã§äžè¬çãªããšã¯äœã§ããïŒ ãã®èšäºã§ã¯ãããªãŒã«ã€ããŠã説æãããã®èšäºãçè§£ããããšããŸãã
UPD ïŒ
s01e02- ã¹ã¿ãã¯
- ãã¥ãŒ
- æš¹æš
ã¹ã¿ãã¯
ã¹ã¿ãã¯ã¯éåžžãã°ã«ãŒãåããããªããžã§ã¯ãã®ç¹å®ã®ã»ãããšããŠèšè¿°ãããäžè¬ã»ããã®åèŠçŽ ã¯æ¬¡ã
ã«ç§»åããŸã-ã¹ã¿ãã¯ãããæ¬ãŸãã¯ãã¬ã€ã®ã¹ã¿ãã¯ã ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã§ã¯ãã¹ã¿ãã¯ã¯äžè¬çãªåœ¢æã«ãŒã«ãæã€ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã§ããã¹ã¿ãã¯ã«é
眮ãããæåŸã®ãªããžã§ã¯ããäžè¬ãªã¹ãããæåã«ååŸãããŸãã ãã®ã«ãŒã«ã¯ããæåŸã«å
¥åãæåã«å
¥åããŸãã¯
LIFOãšãåŒã°ããŸãã éã®ã«ãŒã«ããããŸã-æåã«åºãŠããŠãæåã«åºãŠããŸããïŒ
FIFO ïŒããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ãã®ã«ãŒã«LIFOã¯ãããšãã°ãã¿ãã³ããèåã®èªå販売æ©ã§äœ¿çšãããŸããããã«ããŒããããæåŸã®ãªããžã§ã¯ããæåã«çºè¡ãããŸãã
ã¹ã¿ãã¯ã®æœè±¡çãªå®çŸ©ã¯ãªã¹ãã§ããããã¹ãŠã®æäœã¯äžæ¹ã®ç«¯ã«é¢é£ããŠå®çŸ©ãããŠããŸãã ã¹ã¿ãã¯ã®ãããã
ã¹ã¿ãã¯ãå®çŸ©ããåºæ¬æäœïŒ
- init-ã¹ã¿ãã¯ãäœæããŸãã
- push-ã¹ã¿ãã¯ã®å
é ïŒäžéšïŒã«èŠçŽ ã远å ããæ®ãã1ããžã·ã§ã³äžã«ç§»åããŸãã
- pop-ã¹ã¿ãã¯ããïŒäžããïŒèŠçŽ ãæœåºïŒããã³åé€ïŒããŸãã
- top-ïŒåé€ããã«ïŒã¹ã¿ãã¯ã®æåã®èŠçŽ ã®å€ãååŸããŸãã
- isEmpty-ã¹ã¿ãã¯ã®ç©ºã確èªããŸãã
å¯èœãªæå€§èŠçŽ æ°ã§ã¹ã¿ãã¯ãå®çŸ©ããããšãã§ããŸããããããã¯äºçްãªããšã§ãã ãã ããã¹ã¿ãã¯ãèŠçŽ ãåãå
¥ããããªããªããšãã¹ã¿ãã¯ã¯ãã£ã±ãã«ãªããã¹ã¿ãã¯ã«é¢ããã¡ãã»ãŒãžãè¿ããŸãïŒã¹ã¿ãã¯ãªãŒããŒãããŒïŒã ããŠãå察ã®ç¶æ³-空ã®ã¹ã¿ãã¯ããèŠçŽ ãåé€ããïŒã¹ã¿ãã¯ã¢ã³ããŒãããŒïŒã
ã¹ã¿ãã¯ãLIFOãšãã®åºæ¬æäœãšããŠå®çŸ©ãããŠããããšãç¥ã£ãŠãããšãç¹ã«ãã®ããã®åºæ¬çãªããã·ã¥ããã³ãããæäœããããããé
åãä»ããŠã¹ã¿ãã¯ãæžã蟌ãããšãã§ããŸãã äŸã¯æ¬¡ã®ãšããã§ãã
<?php class ReadingList { protected $stack; protected $limit; public function __construct($limit = 10) {
ãã®äŸã§ã¯ãarray_pushïŒïŒããã³array_popïŒïŒã®ä»£ããã«PHP颿°array_unshiftïŒïŒããã³array_shiftïŒïŒã䜿çšãããããæåã®ã¹ã¿ãã¯èŠçŽ ãåžžã«äžçªäžã«ãããŸããããã§ãªãå Žåãé ç¹ã¯ã¹ã¿ãã¯ã®nçªç®ã®èŠçŽ ã«ãªããŸãã 倧ããªéãã¯ãããŸããã æ¬¡ã«ãã¹ã¿ãã¯ã«ããã€ãã®èŠçŽ ã远å ããŸãã
<?php $myBooks = new ReadingList(); $myBooks->push('A Dream of Spring'); $myBooks->push('The Winds of Winter'); $myBooks->push('A Dance with Dragons'); $myBooks->push('A Feast for Crows'); $myBooks->push('A Storm of Swords'); $myBooks->push('A Clash of Kings'); $myBooks->push('A Game of Thrones');
ãããããããã€ãã®èŠçŽ ãæœåºããŸãããïŒ
<?php echo $myBooks->pop();
ç§ãã¡ã仿ã£ãŠããã®ã¯ã¹ã¿ãã¯ã®ãããã§ããïŒ
<?php echo $myBooks->top();
popïŒïŒã¡ãœãããå床åŒã³åºããšããã«ã©ã¹ã®east宎ããã¹ã¿ãã¯ããåé€ãããŸãã ããã·ã¥ããŠããã«ãããããŠããã¹ã¿ãã¯ã¯ãæåŸã«ãã°ã€ã³ããæåã«ãã°ã¢ãŠããããããšã«åºã¥ããŠæ©èœãããããã¹ã¿ãã¯ã¯å€æŽãããŸããã ã¹ã¿ãã¯ããã¢ã€ãã ããã«ãç¶ãããšãé
ããæ©ãããã¹ã¿ãã¯ã空ã§ãããšããã¡ãã»ãŒãžãšãšãã«äŸå€ãåãåããŸãã
SPLStack
PHPïŒSPLæ¡åŒµïŒã¯ãããŒãžã§ã³5.3以éã®SplStackãå«ãããŸããŸãªããŒã¿æ§é ã®å®è£
ãæäŸããŸãã ReadingListãç¶æ¿ããã ãã§äœæã§ããŸãã
<?php class ReadingList extends SplStack { }
SplStackã«ã¯ãå埩ãå®è£
ããèœåïŒã¹ã¿ãã¯å
ã®èŠçŽ ã®æ°ïŒãæã€äºéãªã³ã¯ãªã¹ããå®è£
ãããŠããããã以åã«å®çŸ©ãããããå°ãå€ãã®ã¡ãœãããæäŸãããŸãã
æ¬è³ªçã«ç°ãªãæœè±¡æ§é ã§ãããªã³ã¯ãªã¹ãã¯ãããŒãã®ãªã¹ãã§ãããåããŒãã«ã¯æ¬¡ã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒããããŸãã ãã®æ§é ã¯ãåæ¹åã®åæã䜿çšããŠãã®ããã«è¡šãããšãã§ããŸãã
äºéãªã³ã¯ãªã¹ãã§ã¯ãåããŒãã«2ã€ã®ãã€ã³ã¿ãŒããããŸã-ãªã¹ãå
ã®åã®ããŒããšæ¬¡ã®ããŒããžã ãã®æ§é ã«ãããæ¬¡ã®2ã€ã®æ¹åã«æ€çŽ¢ã§ããŸãã
èŠçŽ ã調ã¹ãŠããªã¹ãå
šäœãã©ãã§çµããããç¥ãå¿
èŠããããŸãããã®ããã«ãå
éšã§åãæ¶ãç·ãåŒããèŠçŽ ã䜿çšããŸãã
ãã¥ãŒ
ããã§ããæåã«æ¥ããæåã«åºãããŸãã¯FIFOã«è¡ããŸããã æ¬åœã®ã©ã€ã³ãããã«ç«ã£ã人ã¯èª°ã§ããæåã®å Žæãåã£ã人ãæåã«å»ãããšãç¥ã£ãŠããŸãã
äŸå€ã¯ãããªãããã 眲åãå°ãããªã©ã®ãªããžã§ã¯ãã§ãããã¥ãŒã®åºæ¬æäœã¯æ¬¡ã®ãšããã§ãã
- init-ãã¥ãŒãäœæããŸãã
- enqueue-èŠçŽ ããã¥ãŒã®æåŸïŒæ«å°ŸïŒã«è¿œå ããŸãã
- ããã¥ãŒ-ãã¥ãŒã®å
é ïŒèŠçŽ ïŒããèŠçŽ ãåé€ããŸãã
- isEmpty-空ã®ãã¥ãŒããã§ãã¯ããŸãã
PSããããŒã°ã«ç²ŸéããŠãã人ã®ããã«-ãã®å Žåãå°Ÿã¯é ãé€ããŠããªã¹ãã®ãã¹ãŠã®èŠçŽ ãå«ãã§ããŸãããPHPã¯SplQueueã¯ã©ã¹ïŒäºéãªã³ã¯ãªã¹ãïŒãæäŸããŸãããã®å Žåã®ã¿ããªã¹ãã®å
é ãæåŸã®èŠçŽ ã«ãªããŸãã ReadingListããã¥ãŒãšããŠå®çŸ©ããŸãã
<?php class ReadingList extends SplQueue { } $myBooks = new ReadingList();
SplQueueã¯SplDoublyLinkedListãç¶æ¿ããã¢ã¯ã»ã¹ã€ã³ã¿ãŒãã§ã€ã¹ãé
åãšããŠå®è£
ãããããé
åãä»ããŠãã¥ãŒããã³ã¹ã¿ãã¯ã«ã¢ã¯ã»ã¹ã§ããŸãã
<?php $myBooks[] = 'A Feast of Crows'; $myBooks[] = 'A Dance with Dragons';
ãã¥ãŒããããã€ãã®èŠçŽ ãåé€ããŸãã
<?php echo $myBooks->dequeue() . "\n";
enqueueïŒïŒã¯pushïŒïŒã®ãšã€ãªã¢ã¹ã§ããã
dequeueïŒïŒã¯popïŒïŒã®ãšã€ãªã¢ã¹ã§ã¯ãããŸãã ïŒ popïŒïŒã¯ãã¥ãŒã®ã³ã³ããã¹ãã§ç°ãªãåäœãããŸããpopïŒïŒã䜿çšãããšããã¥ãŒã®æ«å°ŸããèŠçŽ ãåé€ãããããïŒA Dance with DragonsïŒããã¥ãŒã®äž»ãªãã®ã¯FIFOã«ãŒã«ã§ããããã§ãã
bottomïŒïŒã¡ãœããã䜿çšããŠããªã¹ãã®å
é ã«ããèŠçŽ ãïŒåé€ããã«ïŒç¢ºèªã§ããŸãã
<?php echo $myBooks->bottom() . "\n";
æšã
éåžžãADTã³ã³ãããŒã«ã¯ãæ§é ãžã®èŠçŽ ã®æ¿å
¥ãæ§é ããã®èŠçŽ å€ã®åé€ãšååŸã®3ã€ã®æäœã«ãªããŸãã ã¹ã¿ãã¯ãšãã¥ãŒã®å Žåããããã®æäœã¯äœçœ®äŸåïŒxIFOïŒã§ãã ããããå€ã§æ
å ±ãååŸããå¿
èŠãããå Žåã¯ã©ãã§ããããïŒ
ãã®ãããªãã¬ãŒãããããšæ³åããŠãã ããïŒèŠçŽ ã®é åºã¯é¢ä¿ãããŸããïŒïŒ
æããã«ããã®å Žåãã¹ã¿ãã¯ãŸãã¯ãã¥ãŒã¯åœ¹ã«ç«ããªãã§ãããããªããªããå¿
èŠãªå Žåã¯ãã¹ãŠã®å€ããã€ãã¹ããå¿
èŠãããããã§ãã å¿
èŠãªã¢ã€ãã ããªã¹ãã«ãããšããŸãã æ¬¡ã«ãæ€çŽ¢ã®ããã«ãå¹³åã§n / 2åã®èŠçŽ ïŒnã¯ãªã¹ãå
šäœã®é·ãïŒãæ€çŽ¢ããå¿
èŠããããŸãã ããå€ãã®ãªã¹ã-ãã€ãã¹ã«ãããæéãé·ããªããŸãã ãã®æ€çŽ¢ã®åé¡ã解決ããã«ã¯ãæ§é ã«ããæ€çŽ¢ãç°¡çŽ åãããããã«ãäœããã®æ¹æ³ã§ããŒã¿ãé
眮ããå¿
èŠããããŸãã ãããŠãããã«æšãçŸããŸãã
ãã®æ§é ã®æœè±¡çãªäŸã¯ãæ¬¡ã®æäœãæã€ããŒãã«ã§ãã
- create-空ã®ããŒãã«ãäœæããŸãã
- æ¿å
¥-ããŒãã«ã«èŠçŽ ã远å ããŸãã
- delete-ããŒãã«ããã¢ã€ãã ãåé€ããŸãã
- æ€çŽ¢-ããŒãã«å
ã®èŠçŽ ãæ€çŽ¢ããŸãã
ã¯ããããã¯ãããªãŒãšããŒã¿ããŒã¹ã坿¥ã«é¢é£ããŠãããããããŒã¿ããŒã¹ã®ããç¥ãããŠãã
CRUD ïŒèªã¿åããæŽæ°ãåé€ã®äœæïŒã«äŒŒãŠããŸãã
ããŒãã«ã衚ã1ã€ã®æ¹æ³ã¯ç·åœ¢ã§ãã è¡ããšã«èª¬æããŸãã ãã®ãããªã¬ã³ãŒãã¯ããœãŒããã·ãŒã±ã³ã·ã£ã«ïŒã€ãŸããå¶éãããé·ããŸãã¯ç°ãªãé·ããåºåãæåä»ãã®ã¬ã³ãŒãïŒããŸãã¯é¢é£ïŒããŒã¿ãžã®ãã€ã³ã¿ãŒã䜿çšïŒã§ããŸãã ããã¯ãåæã®ããŒã¿ããŒã¹ãšãã¡ã€ã«ã·ã¹ãã ïŒFATãªã©ïŒã®å Žåã§ããã ãã ããã·ãŒã±ã³ã·ã£ã«èšé²ã«ã¯ãã€ãã¹ããããŸããããŒã¿ã®æ¿å
¥ãšåé€ã«ã¯äžåãã§ããããªã³ã¯ãããèšé²ã§ã¯æ°ããããŒã¿ã«ã¹ããŒã¹ãåçã«å²ãåœãŠãããšãã§ããŸãã ãŸããåºå®é·ã®ã·ãŒã±ã³ã·ã£ã«é²ç»ã¯ããªã³ã¯é²ç»ãããå¹ççã§ã¯ãããŸããã ãããã£ãŠããã€ããªæ€çŽ¢ããªãŒã®å Žåã¯ãé¢é£ã¬ã³ãŒããéžæããããšããå§ãããŸãã
ããªãŒã¯ãŸãã«éç·åœ¢æ€çŽ¢ã®å®è£
ã§ãããã·ãŒã±ã³ã·ã£ã«ãšæ¥ç¶ã®2ã€ã®ã¿ã€ãã®ãã广çãªæ©èœãæäŸãããã¹ãŠã®ããŒãã«æäœããµããŒãããŸãã ãã®ãããææ°ã®ããŒã¿ããŒã¹ã®å€ãã¯æ£ç¢ºã«ããªãŒã䜿çšããŠããŸãïŒMyISAMã¯ã€ã³ããã¯ã¹ã«ããªãŒã䜿çšããŠããŸãïŒã
ãã®å³ãããããããã«ãããªãŒã¯ããŒãéã«èŠªâåã®é¢ä¿ãããéå±€æ§é ã§ãã åå«ã®ãªãããŒãã¯çµäºããŒãïŒãªãŒãïŒã芪ã®ãªãåå«ã¯ããªãŒã®ã«ãŒããããŒãéã®æ¥ç¶ã¯ãšããžã§ãã 2ã€ã®åå«ãæã€ããŒãã¯æãåçŽãªããªãŒã§ãããããã«åºã¥ããŠããã®ãããªããŒãã®ååž°ãªã¹ããšããŠããªãŒã衚ãããšãã§ããŸãã æ§é å
ã®ããªãŒã¯äºéã«ãªã³ã¯ããããªã¹ãã«äŒŒãŠããããšã«æ³šæããŠãã ããã
ãããã£ãŠãããªãŒã¯æ¬¡ã®ããã«èª¬æã§ããŸãã
<?php class BinaryNode { public $value;
æ°ããå€ãæ¿å
¥
æ°ããå€ãæ¿å
¥ããããšã¯ããã§ã«ã¯ããã«è峿·±ããããã¯ã§ãã ããªãŒã®å転ãšãã©ã³ã¹ã«åºã¥ããŠããã®åé¡ã«ã¯ããã€ãã®è§£æ±ºçããããããŸããŸãªã¿ã¹ã¯ã«å¯ŸããŠãããªãŒã®æ¿å
¥ãåé€ãããã³ãã©ããŒã¹ã®æäœã§ããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒãç°ãªãèµ€é»ãAVLãŸãã¯BããªãŒãªã©ãããŸããŸãªããªãŒå®è£
ã䜿çšã§ããŸãã
ç°¡åã«ããããã«ãæãåçŽãªå®è£
ã®ããã€ãã®ã«ãŒã«ã瀺ããŸããçŸåšã®å€ãããå°ãããã®ã¯ãã¹ãŠå·Šã«ãããå€ãã¯å³ã«ç§»åããŸãã
ç¹°ãè¿ãã¯é€å€ãããŸãïŒ
- ããªãŒã空ã®å ŽåãããªãŒã®ã«ãŒããšããŠ[new_node]ãæ¿å
¥ããŸãïŒæããã«ïŒïŒ
- ããããªãïŒããªãŒã¯ç©ºã§ã¯ãããŸããïŒïŒ
- 2aã ïŒ[çŸåšã®ããŒã]ã空ã®å ŽåïŒ-ããã«è²Œãä»ããŠåæ¢ããŸãã
- 2bã IfïŒ[new_node]> [current node]ïŒ-[new_node]ãå³åŽã«æ¿å
¥ããŠãã¹ããã2ãç¹°ãè¿ããŸã
- 2cã IfïŒ[new_node] <[current node]ïŒ-å·ŠåŽã«[new_node]ãæ¿å
¥ããŠãã¹ããã2ãç¹°ãè¿ããŸã
- 2dã ãã以å€ã®å Žåãå€ã¯ãã§ã«ããªãŒã«ãããŸã
<?php class BinaryTree { ... public function insert($item) { $node = new BinaryNode($item); if ($this->isEmpty()) {
ããŒãã®åé€ã¯ãŸã£ããå¥ã®è©±ã§ããã圱é¿ãåããŸããã ãã¶ãä»ã®æéã
æšã®æ£æ©
ã«ãŒãããéå§ããããªãŒã1ã€ãã€æ€çŽ¢ããŠç©ºã®ããŒããèŠã€ããæ¹æ³ãæãåºããŠãã ããã 4ã€ã®äž»èŠãªããªãŒãã©ããŒãµã«æŠç¥ããããŸãã
- äºå泚æïŒçŽæ¥æ³šæïŒ-çŸåšã®ããŒããåŠçããŠãããå·Šå³ã«ç§»åããŸãã
- é åºïŒå¯Ÿç§°ïŒ-æåã«å·ŠåŽãééããçŸåšã®ããŒããåŠçããŠå³åŽããã€ãã¹ããŸãã
- post-order-å·Šå³ãéã«ããŠãããçŸåšã®å€ãåŠçããŸãã
- level-orderïŒwideïŒ-çŸåšã®å€ãåŠçããŠãããåå«ãåŠçããŠæ¬¡ã®ã¬ãã«ã«ç§»åããŸãã
æåã®3ã€ã®æŠç¥ã¯ãããªãŒã®ã«ãŒãïŒãŠã§ã«ããŸãã¯ããŒããšããŠæå®ãããããŒãïŒããå§ãŸããå¯èœãªéãæ·±ãããªãŒãééããŠæ»ãåã®ãã£ãŒããŠã©ãŒã¯ãšåŒã°ããŸãã ãããã®æŠç¥ã¯ããããç°ãªãç®çã«äœ¿çšãããŸãã ããšãã°ãæ°ããããŒããæ¿å
¥ãããšãïŒç§ãã¡ã®å ŽåïŒãŸãã¯ãµãããªãŒãã³ããŒãããšããéã®å Žå-éã«ãããªãŒããããŒããåé€ãããšããçŽæ¥é åºã䜿çšãããŸãã
察称ããã»ãŒãžãã©ã®ããã«æ©èœããããçè§£ããã«ã¯ãäŸãå°ãä¿®æ£ããå¿
èŠããããŸãã
<?php class BinaryNode { ...
ãããã«
çµè«ãèªãã§ãããçãããããå°ãããã¹ããšåçã«æè¬ããŸã:)
SplStack ã
SplQueueãããã³
äºéãªã³ã¯ãªã¹ãã®å®è£
ãå®å
šã«ã«ããŒãã
ãŠããªãããšã«æ³šæããŠãã ããã èŠçŽ ã®æ°ãã«ãŠã³ãããããå埩åãšããŠæ§é äœã䜿çšããããããªã©ãå€ãã®ã¡ãœãããPHPããã¥ã¡ã³ãã«é ãããŠããŸãã
kpuzucã® ãã®èšäºã«ã泚æãæã䟡å€ããã
ãŸãããããã®æ§é ã®å¯èŠåã
Tangroããã®
æçš¿ã§èŠã€ããããšãã§ãããªã³ã¯
ããããã³ããŒã
ãããããã®æ§é ã®å®è£
ã®ããã©ãŒãã³ã¹ã®ãã³ãããŒã¯
ãã¥ãŒã«é¢ããŠã¯ãSPLãåªå
ããéžæã¯ããªãæçœã§ãã ã¹ã¿ãã¯ã®å®è£
ã¯å®éã«ã¯é
åãããåªããŠããããã§ã¯ãªãã1ç§ãããã®æäœæ°ã«ãã£ãŠäºéã«ãªã³ã¯ããããªã¹ããé
åã«å€±ãããŸãã æ£çŽã«èšããšãç§ã¯ãã¹ããæãäžããªãã£ãã®ã§ããããäœã«é¢é£ããŠããã®ãç¥ãããã®ã§ãããã飿¥ãããã€ã³ã¿ãŒãã§ãŒã¹ããæ¡åŒµããããŠãããšããäºå®ããããŸãã
PSãã€ãã®ããã«ãPMã®ããã¹ãã®èª€ããšãªãªãžãã«ã®ç¿»èš³ã¯åãå
¥ããããŸãã