ãžã§ãŒã ãºã»ã«ã€ã«ã¯ãã€ãŠããŒã¿æ§é ã«é¢ããæçš¿ãåãããããæžããŠãJavaScriptã§ã®å®è£
ãè¿œå ããŸããã ãããŠãç§ã¯åãã翻蚳ããŸããã
å
責äºé
ïŒæçš¿ã«ã¯å€ãã®asciiã°ã©ãã£ãã¯ããããŸãã ã¢ãã€ã«ããã€ã¹ãããããèªãŸãªãã§ãã ãã-ããã¹ããã©ãŒãããã¯ããªãã倱æãããŸãã
ä»æ¥ãç§ãã¡ã¯ãã¹ãŠã®ããŒã¿æ§é ã«ã€ããŠåŠã³ãŸãã
ãããããªããŠé¢çœãâŠããšïŒ
ã¯ããä»æ¥ã§æããžã¥ãŒã·ãŒãªãããã¯ã§ã¯ãããŸããããéåžžã«éèŠã§ãã CS101ã®ãããªã³ãŒã¹ãåè¬ããããã§ã¯ãªããããã°ã©ãã³ã°ãããããç解ããããã§ãã
ããŒã¿æ§é ãç¥ãããšã¯æ¬¡ã®ããšã«åœ¹ç«ã¡ãŸãã
- ããã°ã©ã ã®è€éãã管çããç解ããããããŸãã
- ã¡ã¢ãªãå¹ççã«äœ¿çšããé«æ§èœããã°ã©ã ãäœæããŸãã
æåã®æ¹ãéèŠã ãšæããŸãã é©åãªããŒã¿æ§é ã¯ãæ··ä¹±ãæãããžãã¯ãæé€ããããšã§ã³ãŒããåçã«ç°¡çŽ åã§ããŸãã
2çªç®ã®ãã€ã³ããéèŠã§ãã ããã°ã©ã ã®ããã©ãŒãã³ã¹ãŸãã¯ã¡ã¢ãªãèæ
®ãããšãããŒã¿æ§é ã®æ£ããéžæã¯äœæ¥ã«å€§ãã圱é¿ããŸãã
ããŒã¿æ§é ã«æ
£ããããã«ããããã®ããã€ããå®è£
ããŸãã å¿é
ããªãã§ãã ãããã³ãŒãã¯ç°¡æœã«ãªããŸãã å®éãããã«ã³ã¡ã³ããããããããã®éã®ã³ãŒãã¯1ã€ã2ã€ãèšç®ãã¹ã§ãã
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
ããŒã¿æ§é ãšã¯äœã§ããïŒ
å®éããããã¯ããŸããŸãªåé¡ãããå¹æçã«è§£æ±ºããããã«ããŒã¿ãä¿åããã³æŽçããæ¹æ³ã§ãã ããŒã¿ã¯ããŸããŸãªæ¹æ³ã§è¡šç€ºã§ããŸãã ã©ã®ãããªããŒã¿ã§ãã©ã®ãããªããŒã¿ã䜿çšãããã«å¿ããŠã1ã€ã®ãã¬ãŒã³ããŒã·ã§ã³ãä»ã®ãã¬ãŒã³ããŒã·ã§ã³ãããå¹æçã§ãã
ãããèµ·ããçç±ãç解ããããã«ããŸãã¢ã«ãŽãªãºã ã«ã€ããŠè©±ããŸãããã
/*** ===================================================================== ***\ * * * ,--,--. ,--,--. * * ,----------. | | | | | | _____ * * |`----------'| | | | | | | | | ,------. * * | | | | | | | | ,--. | oo | |`------'| * * | | ,| +-|-+ | | +-|-+ |` | | |_____| | | * * | | ,:==| | |###|======|###| | |====#==#====#=,, | | * * | | || `| +---+ | | +---+ |' ,,=#==#====O=`` ,| | * * | | || | | | | | | ``=#==#====#=====|| | * * `----------' || | | | | | | |__| `| | * * | | ``=| |===`` `--,',--` `--,',--` /||\ `------' * ** \_/ \_/ / / \ \ / / \ \ //||\\ |_| |_| ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * * * ,--,--. ,--,--. * * ,----------. | | | | | | _____ * * |`----------'| | | | | | | | | ,------. * * | | | | | | | | ,--. | oo | |`------'| * * | | ,| +-|-+ | | +-|-+ |` | | |_____| | | * * | | ,:==| | |###|======|###| | |====#==#====#=,, | | * * | | || `| +---+ | | +---+ |' ,,=#==#====O=`` ,| | * * | | || | | | | | | ``=#==#====#=====|| | * * `----------' || | | | | | | |__| `| | * * | | ``=| |===`` `--,',--` `--,',--` /||\ `------' * ** \_/ \_/ / / \ \ / / \ \ //||\\ |_| |_| ** \*** ===================================================================== ***/
ã¢ã«ãŽãªãºã
ã¢ã«ãŽãªãºã ãšã¯ãå®è¡ãããäžé£ã®ã¢ã¯ã·ã§ã³ã®suchãªååã§ãã
ããŒã¿æ§é ã¯ã¢ã«ãŽãªãºã ã䜿çšããŠå®è£
ãããã¢ã«ãŽãªãºã ã¯ããŒã¿æ§é ã䜿çšããŠå®è£
ãããŸãã ãã¹ãŠãããŒã¿æ§é ãšã¢ã«ãŽãªãºã ã§æ§æãããŠãããé¡åŸ®é¡ã®å°ããªç·æ§ããã³ãã«ãŒãã䜿ã£ãŠèµ°ããã³ã³ãã¥ãŒã¿ãŒãæ©èœãããã¬ãã«ãŸã§ã§ãã ïŒãŸããã¯ããIntelã¯ãµãŒãã¹ã«é¡åŸ®é¡ã®äººã
ãæã£ãŠããŸããèµ·ããŠãã ããïŒïŒ
ç¹å®ã®ã¿ã¹ã¯ã¯ãç¡æ°ã®æ¹æ³ã§å®çŸãããŸãã ãã®çµæãäžè¬çãªåé¡ã解決ããããã«å€ãã®ç°ãªãã¢ã«ãŽãªãºã ãçºæãããŸããã
ããšãã°ãèŠçŽ ã®é åºä»ããããŠããªãã»ããããœãŒãããã«ã¯ãéæ¹ããªãå€ãã®ã¢ã«ãŽãªãºã ããããŸãã
æ¿å
¥ãœãŒããéžæãœãŒããããŒãžãœãŒããããã«ãœãŒããããŒããœãŒããã¯ã€ãã¯ãœãŒããã·ã§ã«ãœãŒãããã£ã ãœãŒãããããã¯ãœãŒãããããåäœãœãŒã...
ãããã®ããã€ãã¯ä»ã®ãã®ãããã¯ããã«é«éã§ãã ä»ã®ãã®ã¯ããå°ãªãã¡ã¢ãªãæ¶è²»ããŸãã ããã«ãä»ã®å®è£
ãç°¡åã§ãã 4ã€ã¯ãããŒã¿ã»ããã«é¢ããä»®å®ã«åºã¥ããŠããŸãã
åãœãŒãã¯ãç¹å®ã®ã¿ã¹ã¯ã«æé©ã§ãã ãããã£ãŠãã¢ã«ãŽãªãºã ãçžäºã«æ¯èŒããæ¹æ³ãç解ããããã«ããŸãããŒãºãšåºæºã決å®ããå¿
èŠããããŸãã
ã¢ã«ãŽãªãºã ã®ããã©ãŒãã³ã¹ãæ¯èŒããããã«ãå¹³åçç£æ§ãšææªã®å Žåã®ããã©ãŒãã³ã¹ã®å€§ãŸããªæž¬å®å€ã䜿çšããŠããOããšããçšèªã倧ãã䜿çšãããŠããããšã瀺ããŸãã
/*** ===================================================================== ***\ * abd * * ab O(N^2) d * * O(N!) ab O(N log N) dc * * abdc * * abdc O(N) * * abdc * * abdc * * abdc * * ab c O(1) * * eeee ec deeeeeeee * * ba cd * * ba cdfffffff * ** cadf fdfffff O(log N) ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * abd * * ab O(N^2) d * * O(N!) ab O(N log N) dc * * abdc * * abdc O(N) * * abdc * * abdc * * abdc * * ab c O(1) * * eeee ec deeeeeeee * * ba cd * * ba cdfffffff * ** cadf fdfffff O(log N) ** \*** ===================================================================== ***/
ãã倧ãã
ãOã倧-çžå¯Ÿæ¯èŒã®ããã®ã¢ã«ãŽãªãºã æ§èœã®æŠç®æšå®æ¹æ³ã®æå®ã
Oh big-ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ãåçšããæ°åŠçè¡šèšæ³ã転éãããNåã®ããŒã¿ã®éãšã¢ã«ãŽãªãºã ã®é¢ä¿ã決å®ããŸãã
Oã©ãŒãžã¯ã2ã€ã®äž»èŠãªéãç¹åŸŽä»ããŸãã
æšå®å®è¡æé -ç¹å®ã®ããŒã¿ã»ããã«å¯ŸããŠã¢ã«ãŽãªãºã ãå®è¡ããæäœã®ç·æ°ã
ããªã¥ãŒã æšå®ã¯ãã¢ã«ãŽãªãºã ãç¹å®ã®ããŒã¿ã»ãããåŠçããããã«å¿
èŠãªã¡ã¢ãªã®ç·éã§ãã
èŠç©ããã¯äºãã«ç¬ç«ããŠè¡ãããŸããäžéšã®ã¢ã«ãŽãªãºã ã¯ãããå€ãã®ã¡ã¢ãªã䜿çšããªãããä»ã®ã¢ã«ãŽãªãºã ãããå°ãªãæäœãå®è¡ã§ããŸãã èŠä»¶ãå®çŸ©ããããé©åãªã¢ã«ãŽãªãºã ãéžæã§ããŸãã
About Bigã®äžè¬çãªæå³ã¯æ¬¡ã®ãšããã§ãã
, ---------------------------------------------------------------------------- O(1) !! O(log N) ! O(N) . - O(N log N) ... O(N ^ 2) O(2 ^ N) O(N!)
ç§ãã¡ã話ããŠããæ°åã®é åºãç¥ãããã«ããããã®å€ãNã«äŸåãããã®ãèŠãŠã¿ãŸãããã
N = 5 10 20 30 ----------------------------------------------------------------------- O(1) 1 1 1 1 O(log N) 2.3219... 3.3219... 4.3219... 4.9068... O(N) 5 10 20 30 O(N log N) 11.609... 33.219... 84.638... 147.204... O(N ^ 2) 25 100 400 900 O(2 ^ N) 32 1024 1,048,576 1,073,741,824 O(N!) 120 3,628,800 2,432,902,0... 265,252,859,812,191,058,636,308,480,000,000
ã芧ã®ãšãããæ¯èŒçå°ããªæ°åã§ã* dofiga *äœåãªäœæ¥ãè¡ãããšãã§ããŸãã
ããŒã¿æ§é ã䜿çšãããšãã¢ã¯ã»ã¹ãæ€çŽ¢ãæ¿å
¥ãåé€ãšãã4ã€ã®äž»èŠãªã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã
ããŒã¿æ§é ã¯ãäžæ¹ã®ã¢ã¯ã·ã§ã³ã§ã¯è¯ãããããäžæ¹ã®ã¢ã¯ã·ã§ã³ã§ã¯æªãããšã«æ³šæããŠãã ããã
------------------------------------------------------------------------ O(1) O(N) O(N) O(N) O(N) O(N) O(1) O(1) O(log N) O(log N) O(log N) O(log N)
ãŸãã¯...
ããã«ãäžéšã®ã¢ã¯ã·ã§ã³ã§ã¯ããå¹³åãããã©ãŒãã³ã¹ãšãææªã®å Žåãã®ããã©ãŒãã³ã¹ãç°ãªããŸãã
çæ³çãªããŒã¿æ§é ã¯ååšããŸããã ããŒã¿ãšãã®åŠçæ¹æ³ã«åºã¥ããŠãæé©ãªãã®ãéžæããŸãã é©åãªéžæãè¡ãã«ã¯ãããŸããŸãªäžè¬çãªããŒã¿æ§é ãç¥ãããšãéèŠã§ãã
/*** ===================================================================== ***\ * _.-.. * * ,'9 )\)`-.,.--. * * `-.| `. * * \, , \) * * `. )._\ (\ * * |// `-,// * * ]|| //" * ** hjw "" "" ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * _.-.. * * ,'9 )\)`-.,.--. * * `-.| `. * * \, , \) * * `. )._\ (\ * * |// `-,// * * ]|| //" * ** hjw "" "" ** \*** ===================================================================== ***/
èšæ¶
ã³ã³ãã¥ãŒã¿ãŒã®ã¡ã¢ãªã¯éå±ãªãã®ã§ãã ããã¯ãæ
å ±ãä¿åãããé åºä»ããããã¹ãããã®ã°ã«ãŒãã§ãã ã¢ã¯ã»ã¹ããã«ã¯ãã¡ã¢ãªå
ã®ã¢ãã¬ã¹ãç¥ãå¿
èŠããããŸãã
ã¡ã¢ãªãã©ã°ã¡ã³ãã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã
: |1001|0110|1000|0100|0101|1010|0010|0001|1101|1011... : 0 1 2 3 4 5 6 7 8 9 ...
: |1001|0110|1000|0100|0101|1010|0010|0001|1101|1011... : 0 1 2 3 4 5 6 7 8 9 ...
ããã°ã©ãã³ã°èšèªã§ãªããããªã®ãçåã«æã£ãããã«ãŠã³ãã¯0ããå§ãŸããŸã-ã¡ã¢ãªã¯ãã®ããã«æ©èœããããã§ãã ã¡ã¢ãªã®æåã®ãã©ã°ã¡ã³ããèªã¿åãã«ã¯ã0ã1ãèªã¿åãã2çªç®-1ã2ãèªã¿åããŸãããããã®ãã©ã°ã¡ã³ãã®ã¢ãã¬ã¹ã¯ããããã0ãš1ã§ãã
ãã¡ãããã³ã³ãã¥ãŒã¿ãŒã¯äŸã«ç€ºãããŠãããããå€ãã®ã¡ã¢ãªãæã£ãŠããŸããããã®ããã€ã¹ã¯èæ
®ããããã³ãã¬ãŒãã®åçãç¶ç¶ããŠããŸãã
èšæ¶ã®åºå€§ãã¯ãéçã®è¥¿ã®ãããªãã®ã§ãã ã³ã³ãã¥ãŒã¿ãŒã§å®è¡ãããåããã°ã©ã ã¯ãåã*ç©ç*ããŒã¿æ§é å
ã«ä¿åãããŸãã ã¡ã¢ãªã®äœ¿çšã¯å°é£ãªäœæ¥ã§ãããã¡ã¢ãªã䜿çšããŠäœæ¥ããããã®æœè±¡åã®ã¬ãã«ãè¿œå ãããŠããŸãã
æœè±¡åã«ã¯2ã€ã®è¿œå ã®ç®çããããŸãã
-ããŒã¿ãã¡ã¢ãªã«ä¿åããŠãå¹ççãã€/ãŸãã¯è¿
éã«äœæ¥ã§ããããã«ããŸãã
-ããŒã¿ãã¡ã¢ãªã«ä¿åããŠã䜿ããããããŸãã
/*** ===================================================================== ***\ * * _______________________ * * ()=(_______________________)=() * * * * | | * * | ~ ~~~~~~~~~~~~~ | * * * * * | | * * * | ~ ~~~~~~~~~~~~~ | * * * | | * * | ~ ~~~~~~~~~~~~~ | * * * * | | * * * |_____________________| * * * * ()=(_______________________)=() * ** ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * * _______________________ * * ()=(_______________________)=() * * * * | | * * | ~ ~~~~~~~~~~~~~ | * * * * * | | * * * | ~ ~~~~~~~~~~~~~ | * * * | | * * | ~ ~~~~~~~~~~~~~ | * * * * | | * * * |_____________________| * * * * ()=(_______________________)=() * ** ** \*** ===================================================================== ***/
ãªã¹ã
æåã«ãã¡ã¢ãªãšããŒã¿æ§é éã®çžäºäœçšã®è€éãã瀺ããªã¹ããå®è£
ããŸãã
ãªã¹ãã¯ãåãå€ãäœåã§ãååšã§ããå€ã®çªå·ä»ãã·ãŒã±ã³ã¹ã®è¡šçŸã§ãã
éåžžã®JavaScripté
åã§è¡šãããã¡ã¢ãªã®ç©ºã®ãããã¯ããå§ããŸãããã ãªã¹ãã®é·ããä¿åããå¿
èŠããããŸãã
å®éã«ã¯ããã¡ã¢ãªãã«ã¯ååŸããã³èªã¿åããå¯èœãªé·ãã®å€ããªããããé·ããåå¥ã«ä¿åããããšã«æ³šæããŠãã ããã
class List { constructor() { this.memory = []; this.length = 0; }
æåã®ã¹ãããã¯ããªã¹ãããããŒã¿ãååŸããããšã§ãã éåžžã®ãªã¹ãã䜿çšãããšãå¿
èŠãªã¢ãã¬ã¹ããã§ã«ããã£ãŠãããããã¡ã¢ãªã«éåžžã«ãã°ããã¢ã¯ã»ã¹ã§ããŸãã
ãªã¹ãã¢ã¯ã»ã¹æäœã®è€éãã¯OïŒ1ïŒ-ãFUCKLY !!ãã§ãã
get(address) { return this.memory[address]; }
ãªã¹ãã«ã¯ã·ãªã¢ã«çªå·ããããããå
é ãäžéãæ«å°Ÿã«å€ãæ¿å
¥ã§ããŸãã
ãªã¹ãã®å
é ãŸãã¯æ«å°Ÿã«å€ãè¿œå ããã³åé€ããããšã«çŠç¹ãåœãŠãŸãã ãããè¡ãã«ã¯ã4ã€ã®ã¡ãœãããå¿
èŠã§ãã
- ããã·ã¥ -å€ãæåŸã«è¿œå ããŸãã
- ããã -æ«å°Ÿããå€ãåé€ããŸãã
- ã·ããè§£é€ -å€ãå
é ã«è¿œå ããŸãã
- Shift-å
é ããå€ãåé€ããŸãã
ãããã·ã¥ãæäœããå§ããŸããã-ãªã¹ãã®æåŸã«èŠçŽ ãè¿œå ããŸãã
ããã¯ããªã¹ãã«ç¶ãã¢ãã¬ã¹ã«å€ãè¿œå ããã®ãšåããããç°¡åã§ãã é·ããä¿åãããããã¢ãã¬ã¹ã®èšç®ã¯ç°¡åã§ãã å€ãè¿œå ããé·ããå¢ãããŸãã
ãªã¹ãã®æåŸã«ã¢ã€ãã ãè¿œå -å®æ°OïŒ1ïŒ-ãFUCKLY !!ã
push(value) { this.memory[this.length] = value; this.length++; }
Haberã®ã³ã¡ã³ãïŒ poxuã¯èè
ã«åæããããªã¹ãã«ã¢ã€ãã ãè¿œå ããã®ãé£ãããªãã¡ã¢ãªæ¡åŒµæäœããããš
説æããŠããŸãã
次ã«ããpopãã¡ãœãããå®è£
ãããªã¹ãã®æåŸããèŠçŽ ãåé€ããŸãã ããã·ã¥ãšåæ§ã«ãæåŸã®ã¢ãã¬ã¹ããå€ãåé€ããã ãã§ãã ããŠãé·ããçãããŸãã
ãªã¹ãã®æ«å°Ÿããã¢ã€ãã ãåé€ãã-å®æ°OïŒ1ïŒ-ãFUCKLY !!ã
pop() {
ãããã·ã¥ãããã³ãããããã¯ãªã¹ãã®æåŸã§æ©èœããäžè¬çã«ã¯åçŽãªæäœã§ãããããã¯ãªã¹ãã®æ®ãã®éšåã«ã¯åœ±é¿ããªãããã§ãã
ãªã¹ãã®å
é ãæäœãããunshiftããšãshiftãã®æäœãè¡ã£ããšãã«äœãèµ·ãããèŠãŠã¿ãŸãããã
ãªã¹ãã®å
é ã«æ°ããèŠçŽ ãè¿œå ããã«ã¯ãåŸç¶ã®ãã¹ãŠã®å€ã1ã€ãã€ã·ããããããšã«ããããã®å€ã®ã¹ããŒã¹ã解æŸããå¿
èŠããããŸãã
[a, b, c, d, e] 0 1 2 3 4 ⬠⬠⬠⬠⬠1 2 3 4 5 [x, a, b, c, d, e]
[a, b, c, d, e] 0 1 2 3 4 ⬠⬠⬠⬠⬠1 2 3 4 5 [x, a, b, c, d, e]
ãã®ãããªã·ãããè¡ãã«ã¯ãåèŠçŽ ã調ã¹ãŠãåã®èŠçŽ ããã®å Žæã«é
眮ããå¿
èŠããããŸãã
ãªã¹ãã®åèŠçŽ ãééããå¿
èŠãããããã次ã®ããã«ããŸãã
ãªã¹ãã®äžçªäžã«ã¢ã€ãã ãè¿œå ãããšãOïŒNïŒ-ãNORMASããšçŽç·çã«ãªããŸãã
unshift(value) {
ãªã¹ããå察æ¹åã«ã·ããããé¢æ°-ã·ãããèšè¿°ããããšã¯æ®ã£ãŠããŸãã
æåã®å€ãåé€ããŠããããªã¹ãã®åèŠçŽ ãåã®ã¢ãã¬ã¹ã«ç§»åããŸãã
[x, a, b, c, d, e] 1 2 3 4 5 ⬠⬠⬠⬠⬠0 1 2 3 4 [a, b, c, d, e]
[x, a, b, c, d, e] 1 2 3 4 5 ⬠⬠⬠⬠⬠0 1 2 3 4 [a, b, c, d, e]
ãªã¹ãã®äžçªäžããã¢ã€ãã ãåé€ãã-ç·åœ¢OïŒNïŒ-ãNORMASãã
shift() {
ãªã¹ãã¯ãæåŸã«ããã¢ã€ãã ã«ãã°ããã¢ã¯ã»ã¹ããŠäœæ¥ãããšããçŽ æŽãããä»äºãããŸãã ãã ããèŠãããã«ãã¡ã¢ãªã¢ãã¬ã¹ãæåã§åŠçããå¿
èŠããããããæåãŸãã¯éäžã®èŠçŽ ã«ã€ããŠã¯ããŸãè¯ããããŸããã
èŠçŽ ã®ã¢ãã¬ã¹ãç¥ããªããŠãå€ãè¿œå ãã¢ã¯ã»ã¹ãåé€ããããã®ç°ãªãããŒã¿æ§é ãšãã®ã¡ãœãããèŠãŠã¿ãŸãããã
/*** ===================================================================== ***\ * ((\ * * ( _ ,-_ \ \ * * ) / \/ \ \ \ \ * * ( /)| \/\ \ \| | .'---------------------'. * * `~()_______)___)\ \ \ \ \ | .' '. * * |)\ ) `' | | | .'-----------------------------'. * * / /, | '...............................' * * ejm | | / \ _____________________ / * * \ / | |_) (_| | * * \ / | | | | * * ) / | | | | * ** / / (___) (___) ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * ((\ * * ( _ ,-_ \ \ * * ) / \/ \ \ \ \ * * ( /)| \/\ \ \| | .'---------------------'. * * `~()_______)___)\ \ \ \ \ | .' '. * * |)\ ) `' | | | .'-----------------------------'. * * / /, | '...............................' * * ejm | | / \ _____________________ / * * \ / | |_) (_| | * * \ / | | | | * * ) / | | | | * ** / / (___) (___) ** \*** ===================================================================== ***/
ããã·ã¥ããŒãã«
ããã·ã¥ããŒãã«ã¯ãé åºä»ããããŠããªãããŒã¿æ§é ã§ãã ã€ã³ããã¯ã¹ã®ä»£ããã«ããããŒããšãå€ãã䜿çšããŠãããŒããšã«ã¡ã¢ãªã¢ãã¬ã¹ãèšç®ããŸãã
æå³ã¯ãããŒããããã·ã¥ããããŠãããã¡ã¢ãªãå¹æçã«æäœã§ããããã«ããããšã§ã-å€ã®è¿œå ãåä¿¡ãå€æŽãåé€ã
var hashTable = new HashTable(); hashTable.set('myKey', 'myValue'); hashTable.get('myKey');
ç¹°ãè¿ããŸãããã¡ã¢ãªãè¡šãéåžžã®JavaScripté
åã䜿çšããŸãã
class HashTable { constructor() { this.memory = []; }
ããŒãšå€ã®ãã¢ãããã·ã¥ããŒãã«ããã¡ã¢ãªã«ä¿åããã«ã¯ãããŒãã¢ãã¬ã¹ã«å€æããå¿
èŠããããŸãã ãã®ããã·ã¥æäœã
ããŒãå
¥åãšããŠåãå
¥ãããã®ããŒã«å¯Ÿå¿ããäžæã®çªå·ã«å€æããŸãã
hashKey("abc") => 96354 hashKey("xyz") => 119193
ãã®ãããªæäœã«ã¯æ³šæãå¿
èŠã§ãã ããŒã倧ããããå Žåãã¡ã¢ãªå
ã®ååšããªãã¢ãã¬ã¹ã«ããããããŸãã
ãããã£ãŠãããã·ã¥é¢æ°ã¯ããŒã®ãµã€ãºãå¶éããå¿
èŠããããŸãã 䜿çšå¯èœãªã¡ã¢ãªã¢ãã¬ã¹ã®æ°ãç¡å¶éã®å€ã«å¶éããŸãã
ããã·ã¥ããŒãã«ã®å®è£
ã¯ãã¹ãŠãã®åé¡ã«çŽé¢ããŠããŸãã
ãã ããäœæ¥ã®æ§é ã®ã¿ãæ€èšãããããè¡çªã¯çºçããªããã®ãšããŸãã
hashKeyé¢æ°ãå®çŸ©ããŸãããã
å
éšããžãã¯ã«ã¯å
¥ããªãã§ãã ãããå
¥åãšããŠæååãåãåããïŒã»ãšãã©ã®å ŽåïŒäžæã®ã¢ãã¬ã¹ãè¿ããšä¿¡ããŠãã ãããããã¯ä»ã®é¢æ°ã§äœ¿çšããŸãã
hashKey(key) { var hash = 0; for (var index = 0; index < key.length; index++) {
ããã§ãããŒããšã«å€ãåãåãgeté¢æ°ãå®çŸ©ããŸãã
ããã·ã¥ããŒãã«ããå€ãèªã¿åãããšã®é£ããã¯ãå®æ°OïŒ1ïŒ-ãFUCKLY !!ãã§ãã
get(key) {
ããŒã¿ãåä¿¡ããåã«ããŸãããŒã¿ãè¿œå ããŠãããšããã§ãããã seté¢æ°ã¯ããã«åœ¹ç«ã¡ãŸãã
ããã·ã¥ããŒãã«ã«å€ãèšå®ããé£ããã¯ãå®æ°OïŒ1ïŒ-ãFUCKLY !!ãã§ãã
set(key, value) {
æåŸã«ãããã·ã¥ããŒãã«ããå€ãåé€ããæ¹æ³ãå¿
èŠã§ãã ããã·ã¥ããŒãã«ããå€ãåé€ããé£ããã¯ãå®æ°OïŒ1ïŒ-ãFUCKLY !!ãã§ãã
remove(key) {
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
ããã§ãã¡ã¢ãªã®çŽæ¥çãªæäœãåæ¢ããŸããåŸç¶ã®ãã¹ãŠã®ããŒã¿æ§é ã¯ãä»ã®ããŒã¿æ§é ãä»ããŠå®è£
ãããŸãã
æ°ããæ§é ã¯ã次ã®2ã€ã®ããšã«çŠç¹ãåœãŠãŠããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®æ©èœã«åºã¥ããŠããŒã¿ãæŽçãã
- æœè±¡å®è£
ã®è©³çŽ°
ãã®ãããªããŒã¿æ§é ã®ç®çã¯ãããŸããŸãªã¿ã€ãã®ããã°ã©ã ã§äœ¿çšããæ
å ±ãæŽçããããšã§ãã ããè€éãªããžãã¯ãè¡šçŸããããã®èšèªãæäŸããŸãã åæã«ãå®è£
ã®è©³çŽ°ãæœè±¡åãããŸãã å®è£
ãå€æŽããŠãããé«éã«ããããšãã§ããŸãã
/*** ===================================================================== ***\ * _ . - - -- .. _ * * |||| .-' /```\ `'-_ /| * * |||| ( /`` \___/ ```\ ) | | * * \__/ |`"-//..__ __..\\-"`| | | * * || |`"||...__`````__...||"`| | | * * || |`"||...__`````__...||"`| \ | * * || _,.--|`"||...__`````__...||"`|--.,_ || * * || .'` |`"||...__`````__...||"`| `'. || * * || '. `/ |...__`````__...| \ .' || * * || `'-..__ `` ````` `` __..-'` || * * `""---,,,_______,,,---""` * ** ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * _ . - - -- .. _ * * |||| .-' /```\ `'-_ /| * * |||| ( /`` \___/ ```\ ) | | * * \__/ |`"-//..__ __..\\-"`| | | * * || |`"||...__`````__...||"`| | | * * || |`"||...__`````__...||"`| \ | * * || _,.--|`"||...__`````__...||"`|--.,_ || * * || .'` |`"||...__`````__...||"`| `'. || * * || '. `/ |...__`````__...| \ .' || * * || `'-..__ `` ````` `` __..-'` || * * `""---,,,_______,,,---""` * ** ** \*** ===================================================================== ***/
ã¹ã¿ãã¯
ã¹ã¿ãã¯ã¯ãªã¹ãã®ãããªãã®ã§ãã ããããé åºä»ããããŠããŸãããã¢ã¯ã·ã§ã³ã«å¶éããããŸãããªã¹ãã®æ«å°Ÿããã®ã¿å€ãè¿œå ããã³åé€ã§ããŸãã åã«èŠãããã«ãã¡ã¢ãªã«çŽæ¥ã¢ã¯ã»ã¹ãããšãããã¯éåžžã«è¿
éã«çºçããŸãã
ãã ããä»ã®ããŒã¿æ§é ãä»ããŠã¹ã¿ãã¯ãå®è£
ããŠãè¿œå ã®æ©èœãååŸã§ããŸãã
ã¹ã¿ãã¯ã䜿çšããæãäžè¬çãªäŸã¯ãã¹ã¿ãã¯ã«ã¢ã€ãã ãè¿œå ããããã»ã¹ãšãã¢ã€ãã ãæåŸããåé€ããããã»ã¹ããããæè¿è¿œå ããã¢ã€ãã ã«åªå
é äœãä»ããããšã§ãã
åã³JavaScripté
åãå¿
èŠã«ãªããŸãããä»åã¯ã¡ã¢ãªã象城ããã®ã§ã¯ãªããäžèšã§å®è£
ãããããªãªã¹ãã象城ããŸãã
class Stack { constructor() { this.list = []; this.length = 0; }
ãªã¹ãã¡ãœãããšæ©èœçã«åã2ã€ã®ã¡ãœããããããã·ã¥ããšããããããå®è£
ããå¿
èŠããããŸãã
ããã·ã¥ã¯ãã¢ã€ãã ãã¹ã¿ãã¯ã®äžçªäžã«è¿œå ããŸãã
push(value) { this.length++; this.list.push(value); }
ãããã¯äžéšããã¢ã€ãã ãåé€ããŸãã
pop() {
ããã«ãpeeké¢æ°ãè¿œå ããŠãã¹ã¿ãã¯ã®äžçªäžã«ããèŠçŽ ãåé€ããã«è¡šç€ºããŸãã ã泚æ TranslatorïŒpeek-èŠãŠã¿ãŸãããã
peek() {
/*** ===================================================================== ***\ * /:""| ,@@@@@@. * * |: oo|_ ,@@@@@`oo * * C _) @@@@C _) * * ) / "@@@@ '= * * /`\\ ```)/ * * || | | /`\\ * * || | | || | \ * * ||_| | || | / * * \( ) | ||_| | * * |~~~`-`~~~| |))) | * * (_) | | (_) |~~~/ (_) * * | |`""....__ __....""`| |`""...._|| / __....""`| | * * | |`""....__`````__....""`| |`""....__`````__....""`| | * * | | | ||``` | | ||`|`` | | * * | | |_||__ | | ||_|__ | | * * ,| |, jgs (____)) ,| |, ((;:;:) ,| |, * ** `---` `---` `---` ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * /:""| ,@@@@@@. * * |: oo|_ ,@@@@@`oo * * C _) @@@@C _) * * ) / "@@@@ '= * * /`\\ ```)/ * * || | | /`\\ * * || | | || | \ * * ||_| | || | / * * \( ) | ||_| | * * |~~~`-`~~~| |))) | * * (_) | | (_) |~~~/ (_) * * | |`""....__ __....""`| |`""...._|| / __....""`| | * * | |`""....__`````__....""`| |`""....__`````__....""`| | * * | | | ||``` | | ||`|`` | | * * | | |_||__ | | ||_|__ | | * * ,| |, jgs (____)) ,| |, ((;:;:) ,| |, * ** `---` `---` `---` ** \*** ===================================================================== ***/
ãã¥ãŒ
次ã«ããã¥ãŒãäœæããŸã-ã¹ã¿ãã¯ãè£å®ããæ§é ã§ãã éãã¯ããã¥ãŒã®èŠçŽ ãæåŸããã§ã¯ãªããæåããåé€ãããããšã§ãã æåã«å€ãèŠçŽ ã次ã«æ°ããèŠçŽ ã
ãã§ã«è¿°ã¹ãããã«ãæ©èœã¯å¶éãããŠããããããã¥ãŒã®å®è£
ã¯ããŸããŸã§ãã è¯ãæ¹æ³ã¯ããªã³ã¯ãªã¹ãã䜿çšããããšã§ããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
ãããŠåã³ãç§ãã¡ã¯JavaScripté
åããã®å©ããæ±ããŠããŸãïŒ ãã¥ãŒã®å Žåãåã³ã¡ã¢ãªã§ã¯ãªããªã¹ããšèŠãªããŸãã
class Queue { constructor() { this.list = []; this.length = 0; }
ã¹ã¿ãã¯ãšåæ§ã«ããã¥ãŒã«ã¢ã€ãã ãè¿œå ããã³åé€ããããã®2ã€ã®é¢æ°ãå®çŸ©ããŸãã
æåã¯ããšã³ãã¥ãŒãã§ã-ãªã¹ãã®æåŸã«ã¢ã€ãã ãè¿œå ããŸãã
enqueue(value) { this.length++; this.list.push(value); }
ããã«-ãããã¥ãŒãã ã¢ã€ãã ã¯ãªã¹ãã®æåŸããã§ã¯ãªããæåããåé€ãããŸãã
dequeue() {
ã¹ã¿ãã¯ã®ããã«ããããŒã¯ãé¢æ°ã宣èšããŸããããã«ããããã¥ãŒã®å
é ã§å€ãåé€ããã«ååŸã§ããŸãã
peek() { return this.list[0]; }
ãªã¹ãã¯ãã¥ãŒã®å®è£
ã«äœ¿çšãããŠãããããã·ããæ¹åŒã®ç·åœ¢ããã©ãŒãã³ã¹ãç¶æ¿ããããšã«æ³šæããããšãéèŠã§ãïŒã€ãŸããOïŒNïŒ-â NORMASãâïŒã
åŸã§èª¬æããããã«ããªã³ã¯ãªã¹ãã䜿çšãããšãããé«éãªãã¥ãŒãå®è£
ã§ããŸãã
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
ããããã¯ãå€ãçžäºã«åç
§ããããŒã¿æ§é ã䜿çšããŸãã
+- -------------------------------------+ | +- A ------------+ +- B ------------+ | | | : 1 | | : 2 | | | | : ( B) | | : ( A) | | | +------------------------+ +------------------------+ | +--------------------------------------------------------+
ããŒã¿æ§é ã®èŠçŽ ã¯ãããèªäœãæå³ãšè¿œå æ
å ±ãå«ãããæ§é ã«ãªããŸã-芪æ§é ã®ä»ã®èŠçŽ ãžã®ãªã³ã¯ã
ä»ãããªãã¯ç§ãæå³ããããšãç解ããã§ãããã
/*** ===================================================================== ***\ * * * | RICK ASTLEY'S NEVER GONNA... * * | +-+ * * | +-+ |-| [^] - GIVE YOU UP * * | |^| |-| +-+ [-] - LET YOU DOWN * * | |^| |-| +-+ |*| [/] - RUN AROUND AND DESERT YOU * * | |^| |-| +-+ |\| |*| [\] - MAKE YOU CRY * * | |^| |-| |/| |\| +-+ |*| [.] - SAY GOODBYE * * | |^| |-| |/| |\| |.| |*| [*] - TELL A LIE AND HURT YOU * * | |^| |-| |/| |\| |.| |*| * * +-------------------------------- * ** ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * * * | RICK ASTLEY'S NEVER GONNA... * * | +-+ * * | +-+ |-| [^] - GIVE YOU UP * * | |^| |-| +-+ [-] - LET YOU DOWN * * | |^| |-| +-+ |*| [/] - RUN AROUND AND DESERT YOU * * | |^| |-| +-+ |\| |*| [\] - MAKE YOU CRY * * | |^| |-| |/| |\| +-+ |*| [.] - SAY GOODBYE * * | |^| |-| |/| |\| |.| |*| [*] - TELL A LIE AND HURT YOU * * | |^| |-| |/| |\| |.| |*| * * +-------------------------------- * ** ** \*** ===================================================================== ***/
ã«ãŠã³ã
å®éãã°ã©ãã¯ã¢ã¹ããŒã°ã©ããèŠããšãã«æã£ãŠãããã®ãšã¯ãŸã£ããç°ãªããŸããã°ã©ãã¯æ¬¡ã®ãããªæ§é ã§ããç·ã§æ¥ç¶ãããå€ãã®ãé ç¹ãïŒAãBãCãDã...ïŒããããŸãããããã®ããŒã¯ã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã Node { value: ..., lines: [(Node), (Node), ...] }
ãããŠãã°ã©ãå
šäœã¯æ¬¡ã®ããã«ãªããŸãã Graph { nodes: [ Node {...}, Node {...}, ... ] }
JavaScripté
åãæã€é ç¹ã®ãªã¹ããæ³åããŠãã ãããé
åã¯ãæå³çã«é ç¹ãé åºä»ããããã§ã¯ãªããé ç¹ãæ ŒçŽããå ŽæãšããŠäœ¿çšãããŸãã class Graph { constructor() { this.nodes = []; }
ã°ã©ãã«å€ãè¿œå ããŠãç·ã®ãªãé ç¹ãäœæããŸãããã addNode(value) { this.nodes.push({ value: value, lines: [] }); }
次ã«ãã°ã©ãå
ã®é ç¹ãæ¢ãæ¹æ³ãå¿
èŠã§ããéåžžãã°ã©ãã®äžéšã«å¥ã®ããŒã¿æ§é ãäœæããŠãæ€çŽ¢ãé«éåããŸãããããããã®å Žåããã¹ãŠã®é ç¹ã調ã¹ãŠã察å¿ããå€ãèŠã€ããŸãããã®æ¹æ³ã¯é
ãã§ããåäœããŸãã find(value) { return this.nodes.find(function(node) { return node.value === value; }); }
ããã§ãäžæ¹ããä»æ¹ã«ãç·ããæãããšã§2ã€ã®é ç¹ãæ¥ç¶ã§ããŸãïŒç¿»èš³è
ã®ã¡ã¢ïŒã°ã©ãã¢ãŒã¯ïŒã addLine(startValue, endValue) {
çµæã®ã°ã©ãã¯æ¬¡ã®ããã«äœ¿çšã§ããŸãã var graph = new Graph(); graph.addNode(1); graph.addNode(2); graph.addLine(1, 2); var two = graph.find(1).lines[0];
ãã®ãããªå°ããªã¿ã¹ã¯ã«ã¯ããŸãã«ãå€ãã®äœæ¥ãè¡ãããŠããããã§ãããããã¯åŒ·åãªãã¿ãŒã³ã§ããè€éãªããã°ã©ã ã®éææ§ãç¶æããããã«ãã䜿çšãããŸããããã¯ãããŒã¿èªäœã«å¯Ÿããæäœã§ã¯ãªããããŒã¿éã®é¢ä¿ãæé©åããããšã§å®çŸãããŸããã°ã©ãå
ã®1ã€ã®é ç¹ãéžæãããšãããã«é¢é£ä»ããããŠããèŠçŽ ãéåžžã«ç°¡åã«èŠã€ããããšãã§ããŸããã°ã©ãã¯å€ãã®ããšãè¡šãããšãã§ããŸãããŠãŒã¶ãŒãšãã®å人ãnode_modulesãã©ã«ããŒã®800åã®äŸåé¢ä¿ãããã«ã¯ã€ã³ã¿ãŒãããèªäœããçžäºã«ãªã³ã¯ãããWebããŒãžãªã³ã¯ã®ã°ã©ãã§ãã /*** ===================================================================== ***\ * _______________________ * * ()=(_______________________)=() ,-----------------,_ * * | | ," ", * * | ~ ~~~~~~~~~~~~~ | ,' ,---------------, `, * * | ,----------------------------, ,----------- * * | ~ ~~~~~~~~ | | | * * | `----------------------------' `----------- * * | ~ ~~~~~~~~~~~~~ | `, `----------------' ,' * * | | `, ,' * * |_____________________| `------------------' * * ()=(_______________________)=() * ** ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * _______________________ * * ()=(_______________________)=() ,-----------------,_ * * | | ," ", * * | ~ ~~~~~~~~~~~~~ | ,' ,---------------, `, * * | ,----------------------------, ,----------- * * | ~ ~~~~~~~~ | | | * * | `----------------------------' `----------- * * | ~ ~~~~~~~~~~~~~ | `, `----------------' ,' * * | | `, ,' * * |_____________________| `------------------' * * ()=(_______________________)=() * ** ** \*** ===================================================================== ***/
ãªã³ã¯ãªã¹ã
ã°ã©ãã®ãããªæ§é ãããŒã¿ã®é åºä»ããªã¹ããæé©åããæ¹æ³ãèŠãŠã¿ãŸãããããªã³ã¯ãªã¹ãã¯ãä»ã®æ§é ã®å®è£
ã«ãã䜿çšãããäžè¬çãªããŒã¿æ§é ã§ãããªã³ã¯ãªã¹ãã®å©ç¹ã¯ãã¢ã€ãã ãå
é ãäžéãæ«å°Ÿã«è¿œå ããå¹çã§ãããªã³ã¯ãªã¹ãã¯åºæ¬çã«ã°ã©ãã«äŒŒãŠããŸããä»ã®é ç¹ãæãé ç¹ãæäœããŸãããããã¯æ¬¡ã®ããã«é
眮ãããŠããŸãã 1 -> 2 -> 3 -> 4 -> 5
1 -> 2 -> 3 -> 4 -> 5
ãã®æ§é ãJSONãšããŠè¡šããšã次ã®ãããªçµæãåŸãããŸãã { value: 1, next: { value: 2, next: { value: 3, next: {...} } } }
ã°ã©ããšã¯ç°ãªãããªã³ã¯ãªã¹ãã«ã¯åäžã®é ç¹ããããããããå
éšãã§ãŒã³ãå§ãŸããŸããããã¯ããããããããããèŠçŽ ããŸãã¯ãªã³ã¯ãªã¹ãã®æåã®èŠçŽ ãšåŒã°ããŸãããªã¹ãã®é·ãã远跡ããŸãã class LinkedList { constructor() { this.head = null; this.length = 0; }
ãŸãããã®ããžã·ã§ã³ã®å€ãååŸããæ¹æ³ãå¿
èŠã§ããéåžžã®ãªã¹ããšã¯ç°ãªããç®çã®äœçœ®ã«ãžã£ã³ãããããšã¯ã§ããŸããã代ããã«ãåã
ã®é ç¹ãééããå¿
èŠããããŸãã get(position) {
ããã§ãéžæããäœçœ®ã«é ç¹ãè¿œå ããæ¹æ³ãå¿
èŠã§ããå€ãšäœçœ®ãååŸããaddã¡ãœãããäœæããŸãã add(value, position) {
æåŸã«å¿
èŠãªæ¹æ³ã¯removeã§ããäœçœ®ã«ãã£ãŠé ç¹ãèŠã€ããŠããã§ãŒã³ããå€ããŸãã remove(position) {
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
============================================================================ ,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-'`'-.,.-' ============================================================================
æ®ãã®2ã€ã®ããŒã¿æ§é ã¯ããããªãŒããã¡ããªãŒã«å±ããŸãã人çã®ããã«ãå€ãã®ç°ãªãããªãŒã®ãããªããŒã¿æ§é ããããŸããã泚æ
翻蚳è
ïŒãŸãããããããã...ãã€ããªããªãŒïŒAAããªãŒãAVLããªãŒããã€ããªæ€çŽ¢ããªãŒããã€ããªããªãŒããã«ã«ãããªãŒãå·Šã®å/å³ã®å
åŒããªãŒãé åºçµ±èšããªãŒãããŽãã...BããªãŒïŒBããªãŒãB +ããªãŒãB *ããªãŒãBã·ã£ãŒãããªãŒããã³ã¹ããªãŒã2ã3ããªãŒã...ããŒãïŒããŒãããã€ããªããŒãã匱ãããŒãã2é
ããŒãããã£ããããããŒããã¬ãªãã«ãããŒãã2ã3ããŒãããœããããŒãããã¢ãªã³ã°ããŒããã¬ããããŒãããã¬ãŒãã...ããªãŒïŒãã©ã€ãåºæ°ããªãŒããµãã£ãã¯ã¹ããªãŒããµãã£ãã¯ã¹ã¢ã¬ã€ãFMã€ã³ããã¯ã¹ãBãã©ã€ã...ãã«ããŠã§ã€ããªãŒïŒäžå
ããªãŒãK-aryããªãŒãããã³ORããªãŒaãbïŒ-treeãLink / Cut Treeã...ã¹ããŒã¹åå²ããªãŒïŒã»ã°ã¡ã³ãããªãŒãã€ã³ã¿ãŒãã«ããªãŒãã¬ã³ãžããªãŒããã³ãKdããªãŒãã¯ã¢ããããªãŒããªã¯ããªãŒãZãªãŒããŒãUBããªãŒãRããªãŒãXããªãŒãã¡ããªãã¯ããªãŒãã«ããŒããªãŒã...ã¢ããªã±ãŒã·ã§ã³åºæã®ããªãŒïŒæœè±¡æ§æããªãŒã解æããªãŒããã·ãžã§ã³ããªãŒãããããã¯ã¹ããªãŒã...ããªããæåŸ
ããŠããªãã£ãã®ã¯ãä»æ¥æš¹æšåŠãå匷ãããšããããšã§ã...ãããŠããã¯ãã¹ãŠã®æšã§ã¯ãããŸããã圌ãã«è¿·æããããªãããã«ããŸãããããããã®ã»ãšãã©ã¯ãŸã£ããæå³ããããŸããã人ã
ãäœããã®åœ¢ã§åè£è
ã®åŠäœãæè·ãããã®ããã«äœãã蚌æããããšãå¿
èŠã§ãããããªãŒã¯ã°ã©ããŸãã¯ãªã³ã¯ãªã¹ãã«äŒŒãŠããŸããããåæ¹åãã§ãããšããéãããããŸããããã¯ã埪ç°ãªã³ã¯ããããã®äžã«ååšã§ããªãããšãæå³ããŸããæšã®ãŠã£ãºããäžåšã§ããã...ããã§ãšãããããŸãããããããã¯æšã§ã¯ãããŸãããããªãŒã¯å€ãã®ã¿ã¹ã¯ã§äœ¿çšãããŸãããããã¯ãæ€çŽ¢ãŸãã¯ãœãŒããæé©åããããã«äœ¿çšãããŸãã圌ãã¯ããã°ã©ã ãããè¯ãçµç¹ããããšãã§ããŸããäœæ¥ãããããã¬ãŒã³ããŒã·ã§ã³ãäœæã§ããŸãã /*** ===================================================================== ***\ * ccee88oo \ | / * * C8O8O8Q8PoOb o8oo '-.;;;.-, ooooO8O8QOb o8bDbo * * dOB69QO8PdUOpugoO9bD -==;;;;;==-aadOB69QO8PdUOpugoO9bD * * CgggbU8OU qOp qOdoUOdcb .-';;;'-. CgggOU ddqOp qOdoUOdcb * * 6OuU /pu gcoUodpP / | \ jgs ooSec cdac pdadfoof * * \\\// /douUP ' \\\d\\\dp/pddoo * * \\\//// \\ \\//// * * |||/\ \\/// * * |||\/ |||| * * ||||| /||| * ** .............//||||\.......................//|||\\..................... ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * ccee88oo \ | / * * C8O8O8Q8PoOb o8oo '-.;;;.-, ooooO8O8QOb o8bDbo * * dOB69QO8PdUOpugoO9bD -==;;;;;==-aadOB69QO8PdUOpugoO9bD * * CgggbU8OU qOp qOdoUOdcb .-';;;'-. CgggOU ddqOp qOdoUOdcb * * 6OuU /pu gcoUodpP / | \ jgs ooSec cdac pdadfoof * * \\\// /douUP ' \\\d\\\dp/pddoo * * \\\//// \\ \\//// * * |||/\ \\/// * * |||\/ |||| * * ||||| /||| * ** .............//||||\.......................//|||\\..................... ** \*** ===================================================================== ***/
æšã
ç°¡åãªããªãŒæ§é ããå§ããŸããããç¹å¥ãªã«ãŒã«ã¯ãããŸããã次ã®ããã«ãªããŸãã Tree { root: { value: 1, children: [{ value: 2, children: [...] }, { value: 3, children: [...] }] } }
ããªãŒã¯ãããªãŒã®ãã«ãŒãããšããåäžã®èŠªã§å§ãŸãå¿
èŠããããŸãã class Tree { constructor() { this.root = null; }
ããªãŒããã©ããŒã¹ããåé ç¹ã§ç¹å®ã®é¢æ°ãåŒã³åºãæ¹æ³ãå¿
èŠã§ãã traverse(callback) {
次ã«ãããªãŒã«é ç¹ãè¿œå ããæ¹æ³ãå¿
èŠã§ãã add(value, parentValue) { var newNode = { value: value, children: [] };
ãã®åçŽãªããªãŒã¯ã衚瀺ãããããŒã¿ãããã«é¡äŒŒããŠããå Žåã«ã®ã¿åœ¹ç«ã€å¯èœæ§ããããŸãããã ããè¿œå ã®ã«ãŒã«ãããå ŽåãããªãŒã¯ããŸããŸãªã¿ã¹ã¯ãå®è¡ã§ããŸãã /*** ===================================================================== ***\ * 0 0 1 0 1 0 0 1 0 1 1 1 0 1 ,@@@@@@@@@@@@@@, 0 0 1 0 1 0 0 1 0 1 1 1 0 * * 0 1 0 1 0 1 0 1 1 0 1 1 0 @@` '@@ 0 1 0 1 0 1 1 0 1 0 1 0 * * 1 1 0 0 0 1 0 0 1 1 1 0 @@` 8O8PoOb o8o '@@ 0 0 1 0 0 1 0 0 1 1 1 * * 0 0 1 1 0 1 0 1 0 0 0 @@ dOB69QO8PdUgoO9bD @@ 1 0 1 1 0 1 0 1 0 0 * * ===================== @@ CgbU8OU qOp qOdOdcb @@ 0 1 1 0 1 0 1 0 1 0 * * @@ 6OU /pu gcoUpP @@ 1 0 1 1 0 1 0 0 1 1 * * ===================== @@ \\// /doP @@ 0 1 1 0 0 1 0 0 1 0 * * 1 1 0 0 1 1 0 1 1 0 0 @@ \\// @@ 1 0 1 0 0 1 1 0 1 1 * * 0 1 1 0 1 0 1 1 0 1 1 0 @@, ||| ,@@ 0 1 1 0 1 1 0 0 1 0 1 * * 1 0 1 0 1 1 0 0 1 0 0 1 0 @@, //|\ ,@@ 0 1 0 1 0 1 1 0 0 1 1 0 * ** 1 0 1 0 0 1 1 0 1 0 1 0 1 `@@@@@@@@@@@@@@' 0 1 1 1 0 0 1 0 1 0 1 1 ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * 0 0 1 0 1 0 0 1 0 1 1 1 0 1 ,@@@@@@@@@@@@@@, 0 0 1 0 1 0 0 1 0 1 1 1 0 * * 0 1 0 1 0 1 0 1 1 0 1 1 0 @@` '@@ 0 1 0 1 0 1 1 0 1 0 1 0 * * 1 1 0 0 0 1 0 0 1 1 1 0 @@` 8O8PoOb o8o '@@ 0 0 1 0 0 1 0 0 1 1 1 * * 0 0 1 1 0 1 0 1 0 0 0 @@ dOB69QO8PdUgoO9bD @@ 1 0 1 1 0 1 0 1 0 0 * * ===================== @@ CgbU8OU qOp qOdOdcb @@ 0 1 1 0 1 0 1 0 1 0 * * @@ 6OU /pu gcoUpP @@ 1 0 1 1 0 1 0 0 1 1 * * ===================== @@ \\// /doP @@ 0 1 1 0 0 1 0 0 1 0 * * 1 1 0 0 1 1 0 1 1 0 0 @@ \\// @@ 1 0 1 0 0 1 1 0 1 1 * * 0 1 1 0 1 0 1 1 0 1 1 0 @@, ||| ,@@ 0 1 1 0 1 1 0 0 1 0 1 * * 1 0 1 0 1 1 0 0 1 0 0 1 0 @@, //|\ ,@@ 0 1 0 1 0 1 1 0 0 1 1 0 * ** 1 0 1 0 0 1 1 0 1 0 1 0 1 `@@@@@@@@@@@@@@' 0 1 1 1 0 0 1 0 1 0 1 1 ** \*** ===================================================================== ***/
ãã€ããªæ€çŽ¢ããªãŒ
ãã€ããªæ€çŽ¢ããªãŒã¯ãããªãŒã®äžè¬çãªåœ¢åŒã§ãããœãŒããããé åºãç¶æããªãããå€ãå¹ççã«èªã¿åããæ€çŽ¢ãæ¿å
¥ãåé€ã§ããŸããäžé£ã®æ°åããããšæ³åããŠãã ããã 1 2 3 4 5 6 7
1 2 3 4 5 6 7
äžå¿ããããªãŒã«å±éããŸãã 4 / \ 2 6 / \ / \ 1 3 5 7 -^--^--^--^--^--^--^- 1 2 3 4 5 6 7
4 / \ 2 6 / \ / \ 1 3 5 7 -^--^--^--^--^--^--^- 1 2 3 4 5 6 7
次ã«ããã€ããªããªãŒã®ä»çµã¿ã®äŸã瀺ããŸããåé ç¹ã«ã¯2ã€ã®åå«ããããŸãã- å·ŠåŽã®ãã®ã¯èŠªé ç¹ã®å€ãããå°ããã§ãã
- å³åŽã®å€ã¯ã芪ã®é ç¹ã®å€ããã倧ãããªã£ãŠããŸãã
泚ïŒãããæ©èœããã«ã¯ãããªãŒå
ã®ãã¹ãŠã®å€ãäžæã§ããå¿
èŠããããŸããããã«ãããå€ãæ€çŽ¢ãããšãã«ããªãŒãã©ããŒãµã«ãéåžžã«å¹æçã«ãªããŸããããšãã°ãããªãŒã§5çªãèŠã€ããããšããŸãã (4) <--- 5 > 4, . / \ 2 (6) <--- 5 < 6, . / \ / \ 1 3 (5) 7 <--- 5!
(4) <--- 5 > 4, . / \ 2 (6) <--- 5 < 6, . / \ / \ 1 3 (5) 7 <--- 5!
5ã«å°éããããã«å¿
èŠãªãã§ãã¯ã¯3åã ãã§ãããããªãŒã1000åã®èŠçŽ ã§æ§æãããŠããå Žåããã¹ã¯æ¬¡ã®ããã«ãªããŸãã 500 -> 250 -> 125 -> 62 -> 31 -> 15 -> 7 -> 3 -> 4 -> 5
500 -> 250 -> 125 -> 62 -> 31 -> 15 -> 7 -> 3 -> 4 -> 5
1000åã®ã¢ã€ãã ã«ã€ã10åã®ãã§ãã¯ã®ã¿ïŒãã€ããªæ€çŽ¢ããªãŒã®ãã1ã€ã®éèŠãªæ©èœã¯ããªã³ã¯ãªã¹ããšã®é¡äŒŒæ§ã§ããå€ãè¿œå ãŸãã¯åé€ãããšãã«ãããåšå²ã®èŠçŽ ãæŽæ°ããã ãã§æžã¿ãŸããåã®ã»ã¯ã·ã§ã³ãšåæ§ã«ããŸããã€ããªæ€çŽ¢ããªãŒã®ãã«ãŒãããèšå®ããå¿
èŠããããŸãã class BinarySearchTree { constructor() { this.root = null; }
å€ãããªãŒã«ãããã©ããã確èªããã«ã¯ãããªãŒãæ€çŽ¢ããå¿
èŠããããŸãã contains(value) {
ããªãŒã«èŠçŽ ãè¿œå ããã«ã¯ãè¿œå ãããå€ããã倧ãããå°ãããã«å¿ããŠãå·Šå³ã®é ç¹ãé£ã³è¶ããŠã以åãšåããã©ããŒãµã«ãè¡ãå¿
èŠããããŸãããã ããnullã«çããå·ŠãŸãã¯å³ã®é ç¹ã«å°éããã®ã§ããã®äœçœ®ã«é ç¹ãè¿œå ããŸãã add(value) {
/*** ===================================================================== ***\ * .''. * * .''. *''* :_\/_: . * * :_\/_: . .:.*_\/_* : /\ : .'.:.'. * * .''.: /\ : _\(/_ ':'* /\ * : '..'. -=:o:=- * * :_\/_:'.:::. /)\*''* .|.* '.\'/.'_\(/_'.':'.' * * : /\ : ::::: '*_\/_* | | -= o =- /)\ ' * * * '..' ':::' * /\ * |'| .'/.\'. '._____ * * * __*..* | | : |. |' .---"| * * _* .-' '-. | | .--'| || | _| | * * .-'| _.| | || '-__ | | | || | * * |' | |. | || | | | | || | * * _____________| '-' ' "" '-' '-.' '` |____________ * ** jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ** \*** ===================================================================== ***/
/*** ===================================================================== ***\ * .''. * * .''. *''* :_\/_: . * * :_\/_: . .:.*_\/_* : /\ : .'.:.'. * * .''.: /\ : _\(/_ ':'* /\ * : '..'. -=:o:=- * * :_\/_:'.:::. /)\*''* .|.* '.\'/.'_\(/_'.':'.' * * : /\ : ::::: '*_\/_* | | -= o =- /)\ ' * * * '..' ':::' * /\ * |'| .'/.\'. '._____ * * * __*..* | | : |. |' .---"| * * _* .-' '-. | | .--'| || | _| | * * .-'| _.| | || '-__ | | | || | * * |' | |. | || | | | | || | * * _____________| '-' ' "" '-' '-.' '` |____________ * ** jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ** \*** ===================================================================== ***/
çµãã
ååãªç¥èãåŸãããã°å¹žãã§ããæ°ã«å
¥ã£ãå Žåã¯ããªããžããªã«æãä»ããŠTwitterã§ãã©ããŒããŠãã ããããŸããä»ã®èšäºãThe Super Tiny Compilerããèªãããšãã§ããŸãgithub.com/thejameskyle/the-super-tiny-compiler
ãŸãããã®èšäºã¯githubã§èªãããšãã§ããŸãã翻蚳ïŒaalexeevããªããžã§ã³ïŒiamo0ãChursina Chaikaã