ãããããã«ïŒ èšäºã®ç¿»èš³ãã玹ä»ããŸã
ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã«é¢ããŠã¯ãäœããæ¬ ããŠãããšæããã«ã¯ããããŸããã ã©ãã§ã䜿çšãããŠããŸãã å°ãããŠäŸ¿å©ãª SQLite ãã匷å㪠Teradata ãŸã§ãããŸããŸãªããŒã¿ããŒã¹ãå©çšå¯èœã§ãã ããããããŒã¿ããŒã¹ãã©ã®ããã«æ©èœãããã説æããèšäºã¯ããããããããŸããã ãhowdoesarelationaldatabaseworkãã䜿çšããŠèªåèªèº«ãæ€çŽ¢ãããšãçµæãã©ãã»ã©å°ãªããã確èªã§ããŸãã ãããããããã®èšäºã¯çãã§ãã ææ°ã®è©±é¡ã®ãã¯ãããžãŒ (BigDataãNoSQLããŸã㯠JavaScript) ãæ¢ããŠããå Žåã¯ãããããã©ã®ããã«æ©èœãããã説æããããã«è©³çŽ°ãªèšäºãèŠã€ãããŸãã
ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ã¯å€§åŠã®ææ¥ãç 究è«æãæžç±ä»¥å€ã§ã¯èª¬æã§ããªãã»ã©å€ããéå±ãããŸãã?
éçºè ãšããŠãç§ã¯ç解ã§ããªããã®ã䜿çšããããšãå«ããŸãã ããŒã¿ããŒã¹ã 40 幎以äžäœ¿çšãããŠããã®ã§ããã°ãå¿ ãçç±ãããã¯ãã§ãã ç§ã¯äœå¹Žã«ãããã£ãŠãæ¯æ¥äœ¿çšããŠãããããã®å¥åŠãªãã©ã㯠ããã¯ã¹ãçã«ç解ããããã«äœçŸæéãè²»ãããŠããŸããã ãªã¬ãŒã·ã§ãã« ããŒã¿ããŒã¹ ãšãŠãèå³æ·±ãã§ãã 䟿å©ã§åå©çšå¯èœãªæŠå¿µã«åºã¥ããŠããŸãã ããŒã¿ããŒã¹ãç解ããããšã«èå³ã¯ãããããã®å¹ åºããããã¯ãæ·±ãæãäžããæéãæ欲ããªãã£ãå Žåã¯ããã®èšäºãã楜ãã¿ãã ããã
ãã®èšäºã®ã¿ã€ãã«ã¯é²éªšã§ããã ãã®èšäºã®ç®çã¯ããŒã¿ããŒã¹ã®äœ¿çšæ¹æ³ãç解ããããšã§ã¯ãããŸãããã ãã®ããã ç°¡åãªæ¥ç¶ãªã¯ãšã¹ããšåºæ¬çãªã¯ãšãªã®äœææ¹æ³ã¯ãã§ã«ç¥ã£ãŠããã¯ãã§ãã æ®é ·; ããããªããšããã®èšäºãç解ã§ããªãå¯èœæ§ããããŸãã ç¥ã£ãŠããã¹ãããšã¯ããã ãã§ããæ®ãã¯ç§ã説æããŸãã
ã¢ã«ãŽãªãºã ã®æéèšç®é (BigO) ãªã©ãã³ã³ãã¥ãŒã¿ãŒ ãµã€ãšã³ã¹ã®åºç€ããå§ããŸãã ãã®æŠå¿µãå«ã人ããããšæããŸããããã®æŠå¿µããªããã°ããŒã¿ããŒã¹å ã®è€éããç解ããããšã¯ã§ããŸããã ããã¯å€§ããªããŒããªã®ã§ã ã«çŠç¹ãåœãŠãŸã ç§ã倧åã ãšæãããš: ããŒã¿ããŒã¹ã®åŠçæ¹æ³ SQL ãªã¯ãšã¹ãã ãã 玹ä»ããŸã ããŒã¿ããŒã¹ã®åºæ¬æŠå¿µèšäºã®æåŸã«ã¯ãå éšã§äœãèµ·ãã£ãŠããã®ãããããããã«ãªããŸãã
ããã¯å€ãã®ã¢ã«ãŽãªãºã ãšããŒã¿æ§é ãå«ãé·ããŠæè¡çãªèšäºã§ãããããæéããããŠèªãã§ãã ããã äžéšã®æŠå¿µã¯ç解ããã®ãé£ããå ŽåããããŸãã ããããã¹ãããããŠããäžè¬çãªã¢ã€ãã¢ãç解ããããšãã§ããŸãã
ãã詳ããæ¹ã®ããã«ããã®èšäºã¯ 3 ã€ã®éšåã«åãããŠããŸãã
- äœã¬ãã«ããã³é«ã¬ãã«ã®ããŒã¿ããŒã¹ ã³ã³ããŒãã³ãã®æŠèŠ
- ã¯ãšãªæé©åããã»ã¹ã®æŠèŠ
- ãã©ã³ã¶ã¯ã·ã§ã³ãšãããã¡ããŒã«ç®¡çã®æŠèŠ
åºæ¬ã«ç«ã¡è¿ã£ãŠ
æ°å¹Žå (ã¯ãã圌æ¹ã®é河系ã§...)ãéçºè ã¯ã³ãŒãã£ã³ã°ããŠããæäœã®æ°ãæ£ç¢ºã«ææ¡ããå¿ èŠããããŸããã 圌ãã¯ãé ãã³ã³ãã¥ãŒã¿ãŒã® CPU ãšã¡ã¢ãªãç¡é§ã«ããäœè£ããªãã£ãã®ã§ãã¢ã«ãŽãªãºã ãšããŒã¿æ§é ãæèšããŠããŸããã
ãã®ããŒãã§ã¯ãããŒã¿ããŒã¹ãç解ããããã«äžå¯æ¬ ãªãããã®æŠå¿µã®ããã€ããæãåºããŠãã ããã ã³ã³ã»ããã玹ä»ããŸã ããŒã¿ããŒã¹ã€ã³ããã¯ã¹.
O(1) 察 O(n2)
æè¿ã§ã¯ãå€ãã®éçºè ã¯ã¢ã«ãŽãªãºã ã®æéèšç®éãæ°ã«ããŠããŸãã...ãããŠããã¯æ£ããã®ã§ãã
ãããã倧éã®ããŒã¿ (æ°åã®ããŒã¿ã§ã¯ãããŸãã) ãæ±ã£ãŠããå ŽåããŸãã¯ããªç§åäœã§èŠåŽããŠããå Žåã«ã¯ããã®æŠå¿µãç解ããããšãéèŠã«ãªããŸãã ãããŠãæ³åã®ãšãããããŒã¿ããŒã¹ã¯äž¡æ¹ã®ç¶æ³ã«å¯ŸåŠããå¿ èŠããããŸãã èŠç¹ãç解ããããã«å¿ èŠä»¥äžã«æéãè²»ããããšã¯ããŸããã ããã¯ãåŸã§ã³ã¹ãããŒã¹ã®æé©åã®æŠå¿µãç解ããã®ã«åœ¹ç«ã¡ãŸã (ã³ã¹ã ããŒã¹ æé©å).
ã³ã³ã»ãã
ã¢ã«ãŽãªãºã ã®æéèšç®é ç¹å®ã®éã®ããŒã¿ã«å¯ŸããŠã¢ã«ãŽãªãºã ãå®è¡ããã®ã«ã©ããããæéãããããã確èªããããã«äœ¿çšãããŸããã ãã®è€éãã説æããã«ã¯ãããã° O æ°åŠè¡šèšæ³ã䜿çšããŸãããã®è¡šèšæ³ã¯ãç¹å®ã®å ¥åæ°ã«å¯ŸããŠã¢ã«ãŽãªãºã ãå¿ èŠãªæäœã®æ°ãèšè¿°ããé¢æ°ãšãšãã«äœ¿çšãããŸãã
ããšãã°ãããã®ã¢ã«ãŽãªãºã ã®è€éã㯠O(some_function()) ã§ãããšèšããšããããã¯ãã¢ã«ãŽãªãºã ãäžå®éã®ããŒã¿ãåŠçããããã« some_function(a_certain_amount_of_data) ã®æäœãå¿ èŠãšããããšãæå³ããŸãã
ãã®å Žåã éèŠãªã®ã¯ããŒã¿éã§ã¯ãããŸãã**ã ãããªããš ** ããŒã¿éã®å¢å ã«äŒŽã£ãŠæäœæ°ãã©ã®ããã«å¢å ãããã æéèšç®éã¯æ£ç¢ºãªæäœæ°ãæäŸããŸããããå®è¡æéãèŠç©ããã«ã¯è¯ãæ¹æ³ã§ãã
ãã®ã°ã©ãã§ã¯ãããŸããŸãªçš®é¡ã®ã¢ã«ãŽãªãºã ã®æéèšç®éã«å¯Ÿããæäœã®æ°ãšå ¥åããŒã¿ã®éã確èªã§ããŸãã 察æ°ã¹ã±ãŒã«ã䜿çšããŠè¡šç€ºããŸããã èšãæããã°ãããŒã¿é㯠1 åãã 1 åã«æ¥éã«å¢å ããŸãã
- O(1) ãŸãã¯å®æ°è€é床ã¯äžå®ã®ãŸãŸã§ã (ããã§ãªããã°ãå®æ°è€é床ãšã¯åŒã°ããŸãã)ã
- O(ãã°(n)) æ°ååã®ããŒã¿ããã£ãŠãäœããŸãŸ.
- ææªã®é£æ床 - O(n2)ãæŒââç®æ°ãæ¥éã«å¢å ãã.
- ä»ã® XNUMX ã€ã®å䜵çãåæ§ã«æ¥éã«å¢å ããŸãã
äŸ
ããŒã¿éãå°ãªãå ŽåãO(1) ãš O(n2) ã®å·®ã¯ç¡èŠã§ããŸãã ããšãã°ã2000 åã®èŠçŽ ãåŠçããå¿ èŠãããã¢ã«ãŽãªãºã ããããšããŸãã
- O(1) ã¢ã«ãŽãªãºã ã§ã¯ 1 åã®æäœãå¿ èŠã§ã
- O(log(n)) ã¢ã«ãŽãªãºã ã§ã¯ 7 åã®æäœãå¿ èŠã«ãªããŸã
- O(n) ã¢ã«ãŽãªãºã ã§ã¯ 2 åã®æäœãå¿ èŠã«ãªããŸã
- O(n*log(n)) ã¢ã«ãŽãªãºã ã§ã¯ 14 åã®æäœãå¿ èŠã«ãªããŸã
- O(n2) ã¢ã«ãŽãªãºã ã§ã¯ 4 åã®æäœãå¿ èŠã«ãªããŸã
O(1) ãš O(n2) ã®å·®ã¯å€§ããããã«èŠããŸã (4 äžæäœ) ãããŸã°ããããæéã ãã§æ倧 2 ããªç§ã倱ãããŸãã å®éãææ°ã®ããã»ããµãŒã¯æ¬¡ã®ãããªåŠçãè¡ãããšãã§ããŸãã
å ã»ã©ãè¿°ã¹ãããã«ãèšå€§ãªéã®ããŒã¿ãæ±ãå Žåã«ã¯ããã®æŠå¿µãç解ããŠããããšãäŸç¶ãšããŠéèŠã§ãã ä»åãã¢ã«ãŽãªãºã ã 1 èŠçŽ ãåŠçããå¿ èŠãããå Žå (ããã¯ããŒã¿ããŒã¹ãšããŠã¯ããã»ã©å€ããããŸãã):
- O(1) ã¢ã«ãŽãªãºã ã§ã¯ 1 åã®æäœãå¿ èŠã§ã
- O(log(n)) ã¢ã«ãŽãªãºã ã§ã¯ 14 åã®æäœãå¿ èŠã«ãªããŸã
- O(n) ã¢ã«ãŽãªãºã ã§ã¯ 1 åã®æäœãå¿ èŠã«ãªããŸã
- O(n*log(n)) ã¢ã«ãŽãªãºã ã§ã¯ 14 åã®æäœãå¿ èŠã«ãªããŸã
- O(n2) ã¢ã«ãŽãªãºã ã§ã¯ 1 åã®æäœãå¿ èŠã«ãªããŸã
èšç®ã¯ããŠããŸããããO(n2) ã¢ã«ãŽãªãºã ã䜿çšãããšãã³ãŒããŒã 0 æ¯ (XNUMX æ¯ã§ã!) 飲ãæéããããšæããŸãã ããŒã¿éã«ããã«XNUMXãå ãããšãä»®ç ããšãæéãã§ããŸãã
ããã«æ·±ãé²ãã§ã¿ãŸããã
ããªãã®æ å ±ã¯ã次ã®ãã
- é©åãªããã·ã¥ ããŒãã« ã«ãã¯ã¢ããã§ã¯ãO(1) å ã®èŠçŽ ãèŠã€ãããŸãã
- ãã©ã³ã¹ã®ãšããããªãŒãæ€çŽ¢ãããšãO(log(n)) ã®çµæãåŸãããŸãã
- é åãæ€çŽ¢ãããšãçµæ㯠O(n) ã§çæãããŸãã
- æè¯ã®äžŠã¹æ¿ãã¢ã«ãŽãªãºã ã®è€éã㯠O(n*log(n)) ã§ãã
- äžé©åãªäžŠã¹æ¿ãã¢ã«ãŽãªãºã ã®è€éã㯠O(n2) ã§ãã
泚: 次ã®éšåã§ã¯ããããã®ã¢ã«ãŽãªãºã ãšããŒã¿æ§é ã«ã€ããŠèª¬æããŸãã
ã¢ã«ãŽãªãºã ã®æéèšç®éã«ã¯ããã€ãã®ã¿ã€ãããããŸãã
- å¹³åçãªã±ãŒã¹ã®ã·ããªãª
- æè¯ã®ã·ããªãª
- ãããŠææªã®ã·ããªãª
æéã®è€éãã¯ãå€ãã®å Žåææªã®ã·ããªãªã§ãã
ç§ã¯ã¢ã«ãŽãªãºã ã®æéèšç®éã«ã€ããŠã®ã¿è©±ããŸããããè€éãã¯ä»¥äžã«ãåœãŠã¯ãŸããŸãã
- ã¢ã«ãŽãªãºã ã®ã¡ã¢ãªæ¶è²»é
- ãã£ã¹ã¯ I/O æ¶è²»ã¢ã«ãŽãªãºã
ãã¡ãããn2 ãããããã«æªãå䜵çããããŸããããšãã°ã次ã®ãšããã§ãã
- n4: ããã¯ã²ã©ãã§ã! åè¿°ã®ã¢ã«ãŽãªãºã ã®äžã«ã¯ããã®ãããªè€éãã䌎ããã®ããããŸãã
- 3n: ããã¯ããã«ã²ã©ãã§ã ! ãã®èšäºã®éäžã§èª¬æããã¢ã«ãŽãªãºã ã® XNUMX ã€ã¯ããã®è€éããæã£ãŠããŸã (å®éã«å€ãã®ããŒã¿ããŒã¹ã§äœ¿çšãããŠããŸã)ã
- éä¹ n: ããšãå°éã®ããŒã¿ã§ãçµæã¯åŸãããŸããã
- nn: ãã®è€éãã«ééããå Žåã¯ããããæ¬åœã«ããªãã®æŽ»ååéãªã®ãã©ããèªåããå¿ èŠããããŸã...
泚: ç§ã¯ããã° O ã®æå®ã®å®éã®å®çŸ©ã瀺ããããã§ã¯ãªããåãªãã¢ã€ãã¢ã瀺ããŸããã ãã®èšäºã¯æ¬¡ã®å Žæã§èªãããšãã§ããŸã
ããŒãžãœãŒã
ã³ã¬ã¯ã·ã§ã³ã䞊ã¹æ¿ããå¿ èŠãããå Žåã¯ã©ãããŸãã? äœïŒ sort() é¢æ°ãåŒã³åºããŸã...ããããŸãããè¯ãçãã§ã...ããããããŒã¿ããŒã¹ã®å Žåããã® sort() é¢æ°ãã©ã®ããã«æ©èœããããç解ããå¿ èŠããããŸãã
åªãã䞊ã¹æ¿ãã¢ã«ãŽãªãºã ãããã€ããããããæãéèŠãªãã®ã«çŠç¹ãåœãŠãŸãã ããŒãžãœãŒãã çŸæç¹ã§ã¯ããŒã¿ã®äžŠã¹æ¿ãããªã圹ç«ã€ã®ãç解ã§ããªããããããŸããããã¯ãšãªã®æé©åã®éšåãç解ããåŸã§ç解ããå¿ èŠããããŸãã ããã«ãããŒãž ãœãŒããç解ãããšãåŸã§ãããŒãž ãœãŒãããšåŒã°ããäžè¬çãªããŒã¿ããŒã¹çµåæäœãç解ããã®ã«åœ¹ç«ã¡ãŸãã ããŒãž join ïŒå䜵çµåïŒ.
ããŒãž
å€ãã®äŸ¿å©ãªã¢ã«ãŽãªãºã ãšåæ§ãããŒãž ãœãŒãã¯ããªãã¯ã«äŸåããŠããŸããã€ãŸãããµã€ãº N/2 ã® 2 ã€ã®ãœãŒããããé åãçµåã㊠N èŠçŽ ã®ãœãŒãé åãäœæããã®ã«ãããã³ã¹ã㯠N åã®æäœã ãã§ãã ãã®æäœãããŒãžãšåŒã³ãŸãã
ãããäœãæå³ããã®ããç°¡åãªäŸã§èŠãŠã¿ãŸãããã
ãã®å³ã¯ããœãŒããããæçµç㪠8 èŠçŽ é åãæ§ç¯ããã«ã¯ã2 ã€ã® 4 èŠçŽ é åã 4 åç¹°ãè¿ãã ãã§æžãããšã瀺ããŠããŸãã äž¡æ¹ã® XNUMX èŠçŽ é åããã§ã«ãœãŒããããŠããããã次ã®ããã«ãªããŸãã
- 1) XNUMX ã€ã®é åå ã®äž¡æ¹ã®çŸåšã®èŠçŽ ãæ¯èŒããŸã (æå㯠current = first)
- 2) 次ã«ãæå°ã®ãã®ãååŸã㊠8 èŠçŽ ã®é åã«å ¥ããŸãã
- 3) é åå ã®æå°ã®èŠçŽ ãååŸãã次ã®èŠçŽ ã«ç§»åããŸãã
- ããããã®é åã®æåŸã®èŠçŽ ã«å°éãããŸã§ã1,2,3ãXNUMXãXNUMX ãç¹°ãè¿ããŸãã
- 次ã«ãä»ã®é åã®æ®ãã®èŠçŽ ãååŸããŠã8 èŠçŽ ã®é åã«å ¥ããŸãã
ãããæ©èœããã®ã¯ãäž¡æ¹ã® 4 èŠçŽ é åããœãŒããããŠããããããããã®é åããæ»ããå¿ èŠããªãããã§ãã
ããªãã¯ã¯ç解ã§ããã®ã§ãããŒãžã®ç䌌ã³ãŒãã次ã«ç€ºããŸãã
array mergeSort(array a)
if(length(a)==1)
return a[0];
end if
//recursive calls
[left_array right_array] := split_into_2_equally_sized_arrays(a);
array new_left_array := mergeSort(left_array);
array new_right_array := mergeSort(right_array);
//merging the 2 small ordered arrays into a big one
array result := merge(new_left_array,new_right_array);
return result;
ããŒãž ãœãŒãã§ã¯ãåé¡ãå°ããªåé¡ã«åå²ããå°ããªåé¡ã®çµæãæ€çŽ¢ããŠå ã®åé¡ã®çµæãååŸããŸã (泚: ãã®ã¿ã€ãã®ã¢ã«ãŽãªãºã ã¯åå²çµ±æ²»ãšåŒã°ããŸã)ã ãã®ã¢ã«ãŽãªãºã ãç解ã§ããªããŠããå¿é ããå¿ èŠã¯ãããŸããã åããŠèŠããšãã¯ç解ã§ããŸããã§ããã ã圹ã«ç«ãŠãã°ããã®ã¢ã«ãŽãªãºã 㯠XNUMX 段éã®ã¢ã«ãŽãªãºã ã§ãããšèããããŸãã
- åå²ãã§ãŒãºãã¢ã¬ã€ãããå°ããªã¢ã¬ã€ã«åå²ãããŸãã
- 䞊ã¹æ¿ããã§ãŒãºã§ã¯ãå°ããªé åã (ãŠããªã³ã䜿çšããŠ) çµåãããŠããã倧ããªé åã圢æãããŸãã
åå²ãã§ãŒãº
åå²æ®µéã§ã¯ãã¢ã¬ã€ã¯ 3 ã€ã®ã¹ãããã§ãŠãã¿ãªã¢ã¬ã€ã«åå²ãããŸãã æ£åŒãªã¹ãããæ°ã¯ log(N) ã§ã (N=8 ãªã®ã§ãlog(N) = 3)ã
ãããã©ããã£ãŠç¥ãã®ã§ããïŒ
ç§ã¯å€©æã§ãïŒ äžèšã§èšãã°ãæ°åŠã§ãã åã¹ãããã§å ã®é åã®ãµã€ãºã 2 ã§é€ç®ããããšããèãæ¹ã§ããã¹ãããæ°ã¯ãå ã®é åã 2 ã€ã«åå²ã§ããåæ°ã§ãã ããã¯ãå¯Ÿæ° (åº XNUMX) ã®æ£ç¢ºãªå®çŸ©ã§ãã
éžå¥ãã§ãŒãº
䞊ã¹æ¿ããã§ãŒãºã§ã¯ããŠãã¿ãª (åäžèŠçŽ ) é åããéå§ããŸãã åã¹ãããã§è€æ°ã®ããŒãžæäœãé©çšãããšãåèšã³ã¹ã㯠N = 8 æäœã«ãªããŸãã
- æåã®ã¹ããŒãžã§ã¯ããããã 4 åã®æäœãå¿ èŠãª 2 ã€ã®ããŒãžããããŸãã
- 2 çªç®ã®ã¹ãããã§ã¯ããããã 4 åã®æäœãå¿ èŠãª XNUMX ã€ã®ããŒãžããããŸãã
- 1 çªç®ã®ã¹ãããã§ã¯ã8 ã€ã®æäœãå¿ èŠãª XNUMX ã€ã®ããŒãžããããŸãã
log(N) ã¹ããããããã®ã§ã ç·ã³ã¹ãN * log(N) æäœ.
ããŒãžãœãŒãã®å©ç¹
ãªããã®ã¢ã«ãŽãªãºã ã¯éåžžã«åŒ·åãªã®ã§ãããã?
ãªããªãïŒ
- ãããå€æŽããŠã¡ã¢ãª ãããããªã³ããåæžããæ°ããé åãäœæããã«å ¥åé åãçŽæ¥å€æŽããããšãã§ããŸãã
泚: ãã®ã¿ã€ãã®ã¢ã«ãŽãªãºã ã¯
- å€§å¹ ãªãã£ã¹ã¯ I/O ãªãŒããŒããããçºçãããããšãªãããã£ã¹ã¯é åãšå°éã®ã¡ã¢ãªãåæã«äœ¿çšããããã«å€æŽã§ããŸãã ãã®ã¢ã€ãã¢ã¯ãçŸåšåŠçäžã®éšåã®ã¿ãã¡ã¢ãªã«ããŒãããããšã§ãã ããã¯ã100 ã¡ã¬ãã€ãã®ã¡ã¢ãª ãããã¡ãŒã®ã¿ã䜿çšããŠãã«ãã®ã¬ãã€ãã®ããŒãã«ããœãŒãããå¿ èŠãããå Žåã«éèŠã§ãã
泚: ãã®ã¿ã€ãã®ã¢ã«ãŽãªãºã ã¯
- è€æ°ã®ããã»ã¹/ã¹ã¬ãã/ãµãŒããŒã§å®è¡ããããã«å€æŽã§ããŸãã
ããšãã°ãåæ£ããŒãž ãœãŒãã¯éèŠãªã³ã³ããŒãã³ãã® XNUMX ã€ã§ãã
- ãã®ã¢ã«ãŽãªãºã ã¯éãéã«å€ããããšãã§ããŸã (æ¬åœã«!)ã
ãã®äžŠã¹æ¿ãã¢ã«ãŽãªãºã 㯠(ãã¹ãŠã§ã¯ãªãã«ããŠã) ã»ãšãã©ã®ããŒã¿ããŒã¹ã§äœ¿çšãããŠããŸããããããå¯äžã®ããŒã¿ããŒã¹ã§ã¯ãããŸããã ãã£ãšè©³ããç¥ãããå Žåã¯ããããèªãããšãã§ããŸã
é åãããªãŒãããã·ã¥ããŒãã«
æéèšç®éãšäžŠã¹æ¿ãã®æŠå¿µãç解ãããšããã§ã3 ã€ã®ããŒã¿æ§é ã«ã€ããŠèª¬æããå¿ èŠããããŸãã ããã¯éèŠã§ãã ææ°ã®ããŒã¿ããŒã¹ã®åºç€ãšãªã£ãŠããŸãã ã³ã³ã»ããã玹ä»ããŸã ããŒã¿ããŒã¹ã€ã³ããã¯ã¹.
ã¢ã¬ã€
XNUMX 次å é åã¯æãåçŽãªããŒã¿æ§é ã§ãã ããŒãã«ã¯é åãšããŠèããããšãã§ããŸãã äŸãã°ïŒ
ãã® 2 次å é åã¯ãè¡ãšåãå«ãããŒãã«ã§ãã
- åè¡ã¯ãšã³ãã£ãã£ãè¡šããŸã
- åã«ã¯ããšã³ãã£ãã£ã説æããããããã£ãæ ŒçŽãããŸãã
- ååã«ã¯ãç¹å®ã®ã¿ã€ãã®ããŒã¿ (æŽæ°ãæååãæ¥ä»ãªã©) ãæ ŒçŽãããŸãã
ããã¯ããŒã¿ã®ä¿åãèŠèŠåã«ã¯äŸ¿å©ã§ãããç¹å®ã®å€ãæ€çŽ¢ããå¿ èŠãããå Žåã«ã¯é©ããŠããŸããã
ããšãã°ãè±åœã§åããã¹ãŠã®ç·æ§ãæ€çŽ¢ãããå Žåã¯ãåè¡ã調ã¹ãŠããã®è¡ãè±åœã«å±ããŠãããã©ãããå€æããå¿ èŠããããŸãã Nåã®ãã©ã³ã¶ã¯ã·ã§ã³ãããããŸãã©ã N - è¡æ°ãããã¯æªããããŸãããããã£ãšéãæ¹æ³ã¯ãããŸãã? ä»åºŠã¯æšã«èŠªããã§ã¿ãŸãããã
泚: ææ°ã®ããŒã¿ããŒã¹ã®ã»ãšãã©ã¯ãããŒãã«ãå¹ççã«æ ŒçŽããããã®æ¡åŒµé å (ããŒãæ§æããŒãã«ãšã€ã³ããã¯ã¹æ§æããŒãã«) ãæäŸããŸãã ãã ããåã®ã°ã«ãŒãå ã§ç¹å®ã®æ¡ä»¶ãè¿ éã«èŠã€ãããšããåé¡ã¯å€ãããŸããã
ããŒã¿ããŒã¹ããªãŒãšã€ã³ããã¯ã¹
äºåæ¢çŽ¢ããªãŒã¯ç¹å¥ãªããããã£ãæã€äºåæšã§ãããåããŒãã®ããŒã¯æ¬¡ã®ãšããã§ããå¿ èŠããããŸãã
- å·ŠåŽã®ãµãããªãŒã«æ ŒçŽãããŠãããã¹ãŠã®ããŒãã倧ãã
- å³åŽã®ãµãããªãŒã«æ ŒçŽãããŠãããã¹ãŠã®ããŒãããå°ãªã
ãããäœãæå³ããããèŠèŠçã«èŠãŠã¿ãŸããã
ã¢ã€ãã¢
ãã®ããªãŒã«ã¯ N = 15 ã®èŠçŽ ããããŸãã 208 ãæ¢ããŠãããšããŸããã:
- ããŒã 136 ã§ããã«ãŒãããéå§ããŸãã136<208 ãªã®ã§ãããŒã 136 ã®å³åŽã®ãµãããªãŒã調ã¹ãŸãã
- 398>208 ãããã£ãŠãããŒã 398 ã®å·ŠåŽã®ãµãããªãŒãèŠãŠããŸãã
- 250>208 ãããã£ãŠãããŒã 250 ã®å·ŠåŽã®ãµãããªãŒãèŠãŠããŸãã
- 200<208 ãªã®ã§ãããŒã 200 ã®å³åŽã®ãµãããªãŒãèŠãŠããŸãããããã200 ã«ã¯å³åŽã®ãµãããªãŒããããŸããã å€ãååšããŸãã (ååšããå Žåãããã¯å³åŽã®ãµãããªãŒ 200 ã«ãããã)ã
ã§ã¯ã40 人ãæ¢ããŠãããšããŸãããã
- ããŒã 136 ã®ã«ãŒãããéå§ããŸãã136 > 40 ãªã®ã§ãããŒã 136 ã®å·ŠåŽã®ãµãããªãŒã調ã¹ãŸãã
- 80 > 40ããããã£ãŠããŒã 80 ã®å·ŠåŽã®ãµãããªãŒãèŠãŠããŸãã
- 40= 40ã ããŒããååšããŸãã ããŒãå ã®è¡ ID (å³ã«ã¯ãããŸãã) ãååŸããããŒãã«å ã§æå®ãããè¡ ID ãæ¢ããŸãã
- è¡ ID ããããã°ãããŒã¿ãããŒãã«å ã®ã©ãã«ããããæ£ç¢ºã«ç¥ãããšãã§ããã®ã§ãå³åº§ã«ããŒã¿ãååŸã§ããŸãã
çµå±ãäž¡æ¹ã®æ€çŽ¢ãè¡ããšãããªãŒå ã®ã¬ãã«æ°ãç ç²ã«ãªããŸãã ããŒãž ãœãŒãã«é¢ããéšåã泚ææ·±ãèªããšãlog(N) ã¬ãã«ãããããšãããããŸãã ãããå€æã ã³ã¹ããã°ã®æ€çŽ¢(N)ã æªããªãïŒ
åé¡ã«æ»ããŸããã
ããããããã¯éåžžã«æœè±¡çãªã®ã§ãåé¡ã«æ»ããŸãããã åçŽãªæŽæ°ã®ä»£ããã«ãåã®è¡šã®èª°ãã®åœãè¡šãæååãæ³åããŠãã ããã ããŒãã«ã®ãåœããã£ãŒã«ã (å 3) ãå«ãããªãŒããããšããŸãã
- ã€ã®ãªã¹ã§åããŠãã人ãç¥ãããå Žå
- ããªãŒãèŠãŠãã€ã®ãªã¹ãè¡šãããŒããååŸããŸãã
- ãUKnodeãå ã§è±åœã®åŽåè èšé²ã®å ŽæãããããŸãã
é åãçŽæ¥äœ¿çšããå Žåããã®æ€çŽ¢ã«ã¯ N æäœã§ã¯ãªã log(N) æäœãããããŸãã ããªããä»æ瀺ããã®ã¯ã ããŒã¿ããŒã¹ã€ã³ããã¯ã¹.
ã㌠(ãã£ãŒã«ã ã°ã«ãŒã) ãæ¯èŒããé¢æ°ãããã°ãä»»æã®ãã£ãŒã«ã ã°ã«ãŒã (æååãæ°å€ã2 è¡ãæ°å€ãšæååãæ¥ä»ãªã©) ã®ã€ã³ããã¯ã¹ ããªãŒãæ§ç¯ã§ããŸãã ããŒéã®é åº (ããŒã¿ããŒã¹å ã®ãã¹ãŠã®åºæ¬ã¿ã€ãã«åœãŠã¯ãŸããŸã)ã
B+ããªãŒã€ã³ããã¯ã¹
ãã®ããªãŒã¯ç¹å®ã®å€ãååŸããå Žåã«ã¯ããŸãæ©èœããŸãããå¿ èŠãªå Žåã«ã¯å€§ããªåé¡ãçºçããŸãã XNUMX ã€ã®å€ã®éã®è€æ°ã®èŠçŽ ãååŸããã ããªãŒå ã®åããŒãã調ã¹ãŠãããã XNUMX ã€ã®å€ã®éã«ãããã©ããã確èªããå¿ èŠããããã (ããªãŒã®é åºä»ããããèµ°æ»ãªã©ã§)ãããã«ã¯ O(N) ã®ã³ã¹ããããããŸãã ããã«ããã®æäœã¯ããªãŒå šäœãèªã¿åãå¿ èŠãããããããã£ã¹ã¯ I/O ã«é©ããŠããŸããã å¹ççã«å®è¡ããæ¹æ³ãèŠã€ããå¿ èŠããã ç¯å²ãªã¯ãšã¹ãã ãã®åé¡ã解決ããããã«ãææ°ã®ããŒã¿ããŒã¹ã§ã¯ãB+Tree ãšåŒã°ãã以åã®ããªãŒã®ä¿®æ£ããŒãžã§ã³ã䜿çšãããŠããŸãã B+Tree ããªãŒã§ã¯æ¬¡ã®ããã«ãªããŸãã
- æäžäœã®ããŒã (è) ã®ã¿ åºèæ å ± (é¢é£ããŒãã«å ã®è¡ã®äœçœ®)
- æ®ãã®ããŒãã¯ããã«ãããŸã ã«ãŒãã£ã³ã°çš æ£ããããŒãã« æ€çŽ¢äž.
ã芧ã®ãšãããããã«ã¯ããã«å€ãã®ããŒãããããŸã (XNUMX å)ã å®éãè¿œå ã®ããŒãã§ããã決å®ããŒããããããããã¯æ£ããããŒã (é¢é£ããããŒãã«å ã®è¡ã®äœçœ®ãæ ŒçŽããããŒã) ãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã ãã ããæ€çŽ¢ã®è€éãã¯äŸç¶ãšã㊠O(log(N)) ã§ã (ã¬ãã«ã XNUMX ã€ã ãå¢ããŠããŸã)ã 倧ããªéãã¯ã äžäœã¬ãã«ã®ããŒãã¯åŸç¶ããŒãã«æ¥ç¶ãããŸã.
ãã® B+Tree ã§ã40 ãã 100 ãŸã§ã®å€ãæ¢ããŠããå Žå:
- åã®ããªãŒã®å Žåãšåæ§ã«ã40 (ãŸã㯠40 ãååšããªãå Žå㯠40 ã«æãè¿ãå€) ãæ¢ãã ãã§ãã
- 次ã«ãçŽæ¥çžç¶äººãªã³ã¯ã䜿çšã㊠40 人ã«éãããŸã§ 100 人ã®çžç¶äººãéããŸãã
M åã®åŸç¶è ãèŠã€ãããããªãŒã« N åã®ããŒãããããšããŸãã ç¹å®ã®ããŒããèŠã€ããã«ã¯ãåã®ããªãŒãšåæ§ã« log(N) ã®ã³ã¹ããããããŸãã ãã ãããã®ããŒããååŸãããšãåŸç¶è ãžã®åç §ãæ〠M åã®æäœã§ M åŸç¶è ãååŸããããšã«ãªããŸãã ãã®æ€çŽ¢ã«ã¯ M+log(N) ã®ã¿ã®ã³ã¹ããããããŸã åã®ããªãŒã® N æäœãšæ¯èŒããæäœã ããã«ãããªãŒå šäœ (M+log(N) ããŒãã®ã¿) ãèªã¿åãå¿ èŠããªãããããã£ã¹ã¯äœ¿çšéãå°ãªããªããŸãã M ãå°ãã (200 è¡ãªã©)ãN ã倧ãã (1 è¡) å Žåã倧ããªéããçããŸãã
ããããããã§æ°ããªåé¡ãçºçããŸãïŒãŸãããŠãïŒïŒã ããŒã¿ããŒã¹ (ãããã£ãŠé¢é£ãã B+Tree ã€ã³ããã¯ã¹) ã§è¡ãè¿œå ãŸãã¯åé€ãããšã次ã®ããã«ãªããŸãã
- B+ ããªãŒå ã®ããŒãéã®é åºãç¶æããå¿ èŠããããŸããããããªããšããœãŒããããŠããªãããªãŒå ã®ããŒããèŠã€ããããšãã§ããªããªããŸãã
- B+Tree ã®ã¬ãã«ã®æå°æ°ãç¶æããå¿ èŠããããŸããããããªããšãO(log(N)) ã®æéèšç®éã O(N) ã«ãªããŸãã
èšãæããã°ãB+Tree ã¯èªå·±ç§©åºåããããã©ã³ã¹ãåããŠããå¿ èŠããããŸãã 幞ããªããšã«ãããã¯ã¹ããŒããªåé€ããã³æ¿å ¥æäœã§å¯èœã§ãã ãã ããããã«ã¯ã³ã¹ããããããŸããB+ ããªãŒã§ã®æ¿å ¥ãšåé€ã«ã¯ O(log(N)) ã®ã³ã¹ããããããŸãã ã ãããããããèããããšããã人ãããã§ããã ã€ã³ããã¯ã¹ãå€çšããããã®ã¯åŸçã§ã¯ãããŸããã æ¬åœã«ã ããŒãã«å ã®è¡ã®é«éãªæ¿å ¥/æŽæ°/åé€ãé ããªããŸããããã¯ãããŒã¿ããŒã¹ãã€ã³ããã¯ã¹ããšã«ã³ã¹ãã®ããã O(log(N)) æäœã䜿çšããŠããŒãã«ã®ã€ã³ããã¯ã¹ãæŽæ°ããå¿ èŠãããããã§ãã ããã«ãã€ã³ããã¯ã¹ãè¿œå ãããšãäœæ¥è² è·ãå¢å ããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãããŒãžã£ãŒ (èšäºã®æåŸã§èª¬æããŸã)ã
詳现ã«ã€ããŠã¯ãWikipedia ã®èšäºãåç
§ããŠãã ããã
泚: èªè ã¯ãäœã¬ãã«ã®æé©åã«ãããB+ ããªãŒã¯å®å šã«ãã©ã³ã¹ãåããŠããã¯ãã ãšæããŠãããŸããã
ããã·ã¥è¡š
æåŸã®éèŠãªããŒã¿æ§é ã¯ããã·ã¥ ããŒãã«ã§ãã ããã¯ãå€ããã°ãã調ã¹ããå Žåã«éåžžã«äŸ¿å©ã§ãã ããã«ãããã·ã¥ ããŒãã«ãç解ãããšãåŸã§ããã·ã¥çµåãšåŒã°ããäžè¬çãªããŒã¿ããŒã¹çµåæäœãç解ããã®ã«åœ¹ç«ã¡ãŸã ( ããã·ã¥çµåïŒã ãã®ããŒã¿æ§é ã¯ãããŒã¿ããŒã¹ã«ãã£ãŠå éšçãªãã® (äŸ: ããã¯ããŒãã« ãŸã㯠ãããã¡ããŒã«ããããã®æŠå¿µã®äž¡æ¹ã«ã€ããŠã¯åŸã§èª¬æããŸã)ã
ããã·ã¥ ããŒãã«ã¯ãããŒã«åºã¥ããŠèŠçŽ ãè¿ éã«æ€çŽ¢ããããŒã¿æ§é ã§ãã ããã·ã¥ ããŒãã«ãæ§ç¯ããã«ã¯ã以äžãå®çŸ©ããå¿ èŠããããŸãã
- клÑÑ ããªãã®èŠçŽ ã®ããã«
- ããã·ã¥é¢æ° éµçšã èšç®ãããã㌠ããã·ã¥ã«ãããèŠçŽ (ãšåŒã°ãã) ã®äœçœ®ãããããŸãã ã»ã°ã¡ã³ã ).
- ããŒãæ¯èŒããé¢æ°ã æ£ããã»ã°ã¡ã³ããèŠã€ãã£ããããã®æ¯èŒã䜿çšããŠã»ã°ã¡ã³ãå ã§æ¢ããŠããèŠçŽ ãèŠã€ããå¿ èŠããããŸãã
ç°¡åãªäŸ
ããããããäŸãèŠãŠã¿ãŸãããã
ãã®ããã·ã¥ ããŒãã«ã«ã¯ 10 åã®ã»ã°ã¡ã³ãããããŸãã ç§ã¯æ ãè ãªã®ã§ 5 ã€ã®ã»ã°ã¡ã³ãããã€ã¡ãŒãžããŸããã§ããããããªãã¯è³¢ãã®ã§ãæ®ãã® 5 ã€ã¯èªåã§ã€ã¡ãŒãžããŠããããŸãããã ããŒã® 10 ãæ³ãšããããã·ã¥é¢æ°ã䜿çšããŸããã èšãæããã°ãã»ã°ã¡ã³ããèŠã€ããããã«èŠçŽ ã®ããŒã®æåŸã®æ¡ã®ã¿ãä¿åããŸãã
- æåŸã®æ¡ã 0 ã®å ŽåãèŠçŽ ã¯ã»ã°ã¡ã³ã 0 ã«åé¡ãããŸãã
- æåŸã®æ¡ã 1 ã®å ŽåãèŠçŽ ã¯ã»ã°ã¡ã³ã 1 ã«åé¡ãããŸãã
- æåŸã®æ¡ã 2 ã®å ŽåãèŠçŽ ã¯é å 2 ã«åé¡ãããŸãã
- ...
ç§ã䜿çšããæ¯èŒé¢æ°ã¯ãXNUMX ã€ã®æŽæ°éã®åçŽãªç䟡æ§ã§ãã
èŠçŽ 78 ãååŸããããšããŸãã
- ããã·ã¥ ããŒãã«ã¯ 78 ã®ããã·ã¥ ã³ãŒããèšç®ããŸããã€ãŸã 8 ã§ãã
- ããã·ã¥ ããŒãã«ã¯ã»ã°ã¡ã³ã 8 ã調ã¹ãæåã«èŠã€ãã£ãèŠçŽ 㯠78 ã§ãã
- 圌女ã¯ã¢ã€ãã 78 ãããªãã«è¿ããŸã
- æ€çŽ¢ã«ãããã³ã¹ãã¯ããã 2 æäœã§ã (XNUMX ã€ã¯ããã·ã¥å€ãèšç®ããããããã XNUMX ã€ã¯ã»ã°ã¡ã³ãå ã®èŠçŽ ãæ€çŽ¢ããããã§ã)ã
ããã§ãèŠçŽ 59 ãååŸããããšããŸãã
- ããã·ã¥ ããŒãã«ã¯ 59 ã®ããã·ã¥ ã³ãŒããèšç®ããŸããã€ãŸã 9 ã§ãã
- ããã·ã¥ ããŒãã«ã¯ã»ã°ã¡ã³ã 9 ãæ€çŽ¢ããæåã«èŠã€ãã£ãèŠçŽ 㯠99 ã§ãã99!=59 ã§ãããããèŠçŽ 99 ã¯æå¹ãªèŠçŽ ã§ã¯ãããŸããã
- åãããžãã¯ã䜿çšããŠã9 çªç®ã®èŠçŽ (79)ã29 çªç®ã®èŠçŽ (XNUMX)ã...ãæåŸã®èŠçŽ (XNUMX) ãååŸãããŸãã
- èŠçŽ ãèŠã€ãããŸããã
- æ¢çŽ¢ã«ã¯ 7 åã®æäœãå¿ èŠã§ã.
åªããããã·ã¥é¢æ°
ã芧ã®ãšãããæ¢ããŠãã䟡å€ã«å¿ããŠãã³ã¹ãã¯åãã§ã¯ãããŸããã
ããã§ãããŒã®ããã·ã¥é¢æ°ãã¢ãžã¥ã 1 ã§å€æŽããå Žå (ã€ãŸããæåŸã® 000 æ¡ãååŸããå Žå)ãã»ã°ã¡ã³ã 000 ã«ã¯èŠçŽ ããªãããã6 åç®ã®æ€çŽ¢ã«ãããæäœã¯ 1 åã ãã§ãã æ¬åœã®èª²é¡ã¯ãéåžžã«å°æ°ã®èŠçŽ ãå«ããã±ãããäœæããé©åãªããã·ã¥é¢æ°ãèŠã€ããããšã§ãã.
ç§ã®äŸã§ã¯ãé©åãªããã·ã¥é¢æ°ãèŠã€ããã®ã¯ç°¡åã§ãã ãã ããããã¯åçŽãªäŸã§ãããããŒã次ã®å Žåãé©åãªããã·ã¥é¢æ°ãèŠã€ããã®ã¯ããå°é£ã«ãªããŸãã
- æåå (äŸ: å§)
- 2 è¡ (äŸ: å§ãšå)
- 2 è¡ãšæ¥ä» (äŸ: å§ãåãç幎ææ¥)
- ...
é©åãªããã·ã¥é¢æ°ã䜿çšãããšãããã·ã¥ ããŒãã«ã®æ€çŽ¢ã³ã¹ã㯠O(1) ã«ãªããŸãã.
é åãšããã·ã¥ããŒãã«
ãªãé åã䜿çšããªãã®ã§ãããã?
ããŒããè¯ã質åã§ããã
- ããã·ã¥ ããŒãã«ã¯æ¬¡ã®ãšããã§ãã éšåçã«ã¡ã¢ãªã«ããŒãããããæ®ãã®ã»ã°ã¡ã³ãã¯ãã£ã¹ã¯äžã«æ®ãããšãã§ããŸãã
- é åã§ã¯ãã¡ã¢ãªå ã®é£ç¶ããé åã䜿çšããå¿ èŠããããŸãã 倧ããªããŒãã«ãããŒãããŠããå Žå ååãªé£ç¶ã¹ããŒã¹ãèŠã€ããã®ã¯éåžžã«å°é£ã§ã.
- ããã·ã¥ ããŒãã«ã®å Žåãå¿ èŠãªã㌠(åœã人ã®å§ãªã©) ãéžæã§ããŸãã
詳现ã«ã€ããŠã¯ã次ã®èšäºãã芧ãã ããã
åºæïŒ habr.com