倧ããªããŒãã«ã®äžéšã®ã¢ããªã±ãŒã·ã§ã³ã¯ã衚瀺/ç·šéã®ããã«æ°çŸäžã®ã¬ã³ãŒããæã€ããŒãã«ãéãããšãããšãèšèšãããããããªãŒãºãããŸãã ä»ã®äººã¯ãããŒãžã³ã°ãæ¯æããŠåçŽã¹ã¯ããŒã«ããŒã®ããã°ãªããã䜿çšããããšãæåŠããããã¹ã¯ããŒã«ããŒã®å©ããåããŠç®çã®ïŒå°ãªããšãææ°ã®ïŒã¬ã³ãŒãã«ãã°ãã移åã§ãããšããå¹»æ³ã ãããŠãŒã¶ãŒã«æäŸããŸãã
LogïŒNïŒ-fast 1ïŒåæ衚瀺2ïŒã¬ã³ãŒãã®å šç¯å²ãã¹ã¯ããŒã«ãã3ïŒæå®ãããäžæã®ããŒãæã€ã¬ã³ãŒãã«ç§»åããããããã£ã䜿çšããŠãããŒãã«ã³ã³ãããŒã«ãå®è£ ããæ¹æ³ã®1ã€ã«ã€ããŠèª¬æããŸãã ãã®ãã¹ãŠ-2ã€ã®å¶éã®äžã§ïŒ1ïŒã¬ã³ãŒãã¯ãã£ãŒã«ãã®ã€ã³ããã¯ã¹ä»ãã»ããã«ãã£ãŠã®ã¿ãœãŒãã§ãã2ïŒããŒã¿ããŒã¹ç §åèŠåã¯ã¢ã«ãŽãªãºã ã«ç¥ãããŠããå¿ èŠããããŸãã
èšäºã«èšèŒãããŠããååã¯ãJavaèšèªã«åå ãããããžã§ã¯ãã®èè ã«ãã£ãŠå®è£ ãããŸããã
åºæ¬åå
ããŒãã«ã³ã³ãããŒã«ïŒã°ãªããïŒã®2ã€ã®éèŠãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- ã¹ã¯ããŒã« - ã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒã®äœçœ®ã«å¯Ÿå¿ããã¬ã³ãŒãã衚瀺ããŸãã
- ããŒãã£ãŒã«ãã®çµã¿åããã§æå®ãããã¬ã³ãŒãã«ç§»åããŸãã
ãŸããå®è£ ã®æãç°¡åãªã¢ãããŒããæ€èšããå€æ°ã®ã¬ã³ãŒãã®å Žåã«ããããäžé©åãªçç±ã瀺ããŸãã
æãç°¡åãªã¢ãããŒãã¯ããã¹ãŠã®ã¬ã³ãŒãïŒãŸãã¯å°ãªããšããã®ãã©ã€ããªããŒïŒãRAMã«èªã¿èŸŒã¿ããã®åŸãé åã»ã°ã¡ã³ããéžæããŠã¹ã¯ããŒã«ããé åå ã®ãšã³ããªãæ€çŽ¢ããŠé 眮ããããšã§ãã ããããå€æ°ã®ã¬ã³ãŒããããå ŽåããŸããé åã®åæããŒãã«æéããããããããã®çµæãã°ãªãããç»é¢äžã§é 延ãã次ã«ãããŒãã«ããŒã¿ãRAMãå æãå§ãããããå šäœçãªããã©ãŒãã³ã¹ãäœäžããŸãã
ãã1ã€ã®ã¢ãããŒãã¯ãèšç®ãDBMSã«ãã·ãããããããšã§ãããã©ãŒã ... select ... limit ... offset ...ã®æ§é ã䜿çšããŠã¹ã¯ããŒã«ãŠã£ã³ããŠã«è¡šç€ºããã¬ã³ãŒããéžæããŸãã ãã ãããªãã»ãããšã«ãŠã³ãïŒ*ïŒã®äž¡æ¹ããµãŒããŒå ã®ã¬ã³ãŒãã®åæã«é¢é£ä»ããããŠãããéåžžã¯å®è¡é床ãOïŒNïŒã§ãããããå€æ°ã®ã¬ã³ãŒãã§ã¯ç¡å¹ã§ãã é »ç¹ã«åŒã³åºããšãããŒã¿ããŒã¹ãµãŒããŒãéè² è·ã«ãªããŸãã
ãããã£ãŠãã¡ã¢ãªãžã®ããŒã¿ã®å®å šãªããŠã³ããŒããå¿ èŠãšãããåæã«éå¹ççã«å®è¡ããããªã¯ãšã¹ãã§ãµãŒããŒã«è² è·ããããªãã·ã¹ãã ãå®è£ ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãã©ã®ã¯ãšãªãå¹æçã§ãã©ã®ã¯ãšãªãå¹æçã§ãªãããç解ããŸãã
ã€ã³ããã¯ã¹ããã£ãŒã«ãkã«æ§ç¯ãããŠããå Žåã次ã®ã¯ãšãªã¯é«éã§ãïŒã€ã³ããã¯ã¹ã«ãã¯ã¢ããã䜿çšãããã°ïŒNïŒäžã«å®è¡ãããŸãïŒã
- ã¯ãšãªA.ããŒã¿ã»ããå
ã®æåãšæåŸã®ã¬ã³ãŒããæ€çŽ¢ããŸãã
select ... order by k [desc] limit 1
- ã¯ãšãªB. Kã®æå®ãããå€ä»¥äžã®ããŒãæã€håã®æåã®ã¬ã³ãŒããæ€çŽ¢ããŸãã
select ... order by k where k >= K limit h
次ã®ã¯ãšãªã¯é«éã§ã¯ãããŸããã
- ã¯ãšãªCããŒã¿ã»ããå
ã®ã¬ã³ãŒãã®ç·æ°ãèšç®ããŸãã
select count(*) ...
- ã¯ãšãªDããã以äžã®ããŒãæã€ã¬ã³ãŒãã«å
è¡ããã¬ã³ãŒãã®æ°ãèšç®ããŸãã
select count(*) ... where key < K
åºæ¬ååã¯ããŠãŒã¶ãŒã«è¿ éãªå¿çãå¿ èŠãšããæé ã§ã¯ãããŒã¿ããŒã¹ãžã®é«éã¯ãšãªã®ã¿ãå®è¡ããããšã§ããwhere k1 >= K1 and (k1 > K1 or (k2 >= K_2 and (k2 > K2 or ...)))
äž»ããŒã®ã¬ã³ãŒãçªå·ãžã®äŸåããæšæž¬ããã
ãã°ããã®éãããŒãã«ã®äž»ããŒã«æŽæ°ãã£ãŒã«ãã1ã€ãããªãããšãæ³åããŠãã ããïŒãã®å¶éã以äžã§åé€ããŸãïŒã
ã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒã®åäœçœ®ãã0ã ã©ã㧠-ããŒãã«å ã®ãšã³ããªã®ç·æ°ã -ã°ãªããã®1ããŒãžã«åãŸãè¡ã®æ°ã ã¹ã¯ããŒã«ããŒã ãããã¯ãã°ãªãããã¬ã³ããªã³ã°ãããšãã«ã¹ãããããå¿ èŠãããããšãæå³ããŸã ããŒãã«ã®æåã®ãšã³ããªã次ã«å°å· ã¬ã³ãŒãã ããã¯ãŸãã«PostgreSQLã®offsetããã³limitããŒã¯ãŒããæ åœãããã®ã§ãããå€æ°ã®ã¬ã³ãŒããããå Žåããããã䜿çšããããšã¯ã§ããŸããã ããããäœããã®ãéæ³ã®ãæ¹æ³ã§ãçæéã§é¢æ°ãèšç®ã§ãããªã ããã³ãã®éé¢æ° äž»ããŒãšãããããå°ããããŒãæã€ã¬ã³ãŒãæ°ãæ¥ç¶ããã¯ãšãªBã䜿çšããŠãããã«å€ãä»£å ¥ããŸã ããŠãŒã¶ãŒã«è¡šç€ºããäžé£ã®ã¬ã³ãŒãããã°ããååŸã§ããŸããã ç®çã®ã¬ã³ãŒãã«ç§»åããã¿ã¹ã¯ã¯ããã®æ¹æ³ã§è§£æ±ºãããŸããäž»ããŒã¯äºåã«ããã£ãŠãããããã¯ã€ãã¯ã¯ãšãªãã©ã¡ãŒã¿ãŒBãšããŠããã«äœ¿çšã§ããã¹ã¯ããŒã«ããŒã¯æ¬¡ã®ããã«èšå®ããå¿ èŠããããŸãã ã ã¿ã¹ã¯ã¯è§£æ±ºãããŸãïŒ
ïŒãã©ã¡ãŒã¿kã§åŒã³åºãããã¯ãšãªDã¯å€ãè¿ãã ãã§ããããšã«æ³šæããŠãã ãã ããããã1ïŒããã¯é ãã§ãã2ïŒã©ã®ããã«èšç®ã§ããããã«ããå¿ èŠããããŸã 圌女ã®å察ãïŒ
èªç¶ã«æ©èœãã ããŒãã«å ã®ããŒã¿ã«ãã£ãŠå®å šã«æ±ºå®ããããããããŒå€ãšã¬ã³ãŒãçªå·ã®çžäºäŸåæ§ãæ£ç¢ºã«åŸ©å ããã«ã¯ãããŒã¿ããŒã¹ãããã¹ãŠã®ããŒã1ã€ãä»ããŠRAMã«èªã¿èŸŒãå¿ èŠããããŸãïŒ Bãªã¯ãšã¹ããäžéç¹ã§æ£ããæ©èœããã«ã¯ã ïŒã¯ãšãªBã®çŽ æŽãããç¹æ§ãæãåºããŠãã ããïŒã ããã¯ãè¡ã®ãã¹ãŠã®ããŒãèšæ¶ãããããåªããŠããŸãããããŒãã«ã®åæ衚瀺ã«OïŒNïŒæéãšRAMãå¿ èŠãšããããããŸã ååã§ã¯ãããŸããã 幞ããªããšã«ãé¢æ°ã®æ£ç¢ºã«æ¢ç¥ã®ãã€ã³ãã®ã¯ããã«å°ããå€ã§ååŸã§ããŸã ããããŠãããç解ããã«ã¯ãå¯èœãªå€ã®å°ããªçµã¿åããåæãå¿ èŠã§ã ã
ãªã¯ãšã¹ããå®äºããŸããã
select min(k), max(k), count(*) from foo
0ã60ã7ã®çµæãåŸãããŸãããã€ãŸããããŒãã«ã«ã¯7ã€ã®ã¬ã³ãŒããããªãããšãããããŸããïŒã€ãŸããæå€§å€ 6ïŒã«çžåœããæåã®ãšã³ããªã®ããŒã¯0ã§ãæåŸã®ãšã³ããªã®ããŒã¯60ã§ãããã®ãããªã¯ãšãªã®1ã€ã§ãå®éã«å€ãåŠç¿ããŸãã 3ã€ã®ãã€ã³ãã§ ïŒ ã ãã㊠ã ããã ãã§ã¯ãããŸããããŸãã«å®çŸ©ãã ããã«ç¶ãïŒ
- å調ã«æé·ãã
- å¢å ãšãšãã« åäœããã 1å¢å ãããå¢å ããªããããé¢æ°ã°ã©ã ãã€ã³ããé€ã å®å šã«å¹³è¡å蟺圢ã«ãããŸã ã ã ã ã
- å¯èœãªæ©èœã®ç·æ° é
åžæ¹æ³ã®æ°ã«çãã ã®èšé² ããŒå€ïŒæåãšæåŸã®ã¬ã³ãŒãã®äœçœ®ã¯åºå®ïŒãã€ãŸã
- å¯èœãªæ©èœã®æ° ã©ã®æç¹ã§ å€ãåã ããŒã®å°ãªãã¬ã³ãŒãã®çµã¿åããã®æ°ã®ç©ã«ãã£ãŠæ±ºå®ãããŸã ãããã³ä»¥äž ïŒ
ãããã£ãŠãå¯èœãªãªãã·ã§ã³ã®ãããããåçã«èããããå Žåãç¹å®ã®å€ã«å¯Ÿã㊠ãŸãã«ãããŸã ããŒãå³å¯ã«å°ããã¬ã³ãŒã é¢ä¿ã«ãã£ãŠå®çŸ©ãããŸã è¶ å¹ŸäœååžãšããŠç¥ãããŠããŸãã ã®ããã« ã åçã¯æ¬¡ã®ããã«ãªããŸãã
è¶ å¹Ÿäœååžã®ç¹æ§ã¯ããç¥ãããŠããŸãã ã®å Žå ãã€ã ãã»ã°ã¡ã³ãäž å¹³åå€ kã«ç·åœ¢äŸåïŒ
å€ã®åæ£ ã»ã°ã¡ã³ãã®ç«¯ã«ãŒããããéæŸç©ç·ã®åœ¢ãããŠããŸã äžå€®ã«æ倧å€ããããŸã
ãåŒ
ïŒãããããå¹³å誀差㯠ïŒ
äžèšã®åŒã«ããå€ã®èšç® ã å¯èœãªæå°å€ãšæ倧å€ïŒèµ€ç·ïŒãå¹³åå€ïŒéç·ïŒã®ãã®ãããªç»åã瀺ããŠããŸã ãããã³æšæºåå·®ã®å¢çç·ïŒç°è²ã®é åïŒïŒ
ãã®ããã ãã€ã³ãéã«æ§ç¯ãããç Žç· ã ããã㊠é¢æ°ãèšç®ããããã®çµ±èšçã«æå¹ãªè¿äŒŒã§ã ãããŠé ããã®è¿äŒŒã«ããã1ã€ã®ã¯ãšãªã§ååŸããã3ç¹ã®å€ããããããªãå Žåã§ããé¢æ°ã®å€ãéåžžã«æ£ç¢ºã«ãæšæž¬ãããããšãã§ããŸãã å®éããæšæž¬ãã§ã¯ãå¢çå€ãæ éã«æ±ºå®ããããšã«ãã£ãŠã®ã¿ã è£éæ€çŽ¢ã¢ã«ãŽãªãºã ã®æåã®å埩ãå®è¡ããŸãã
ä»ã®å Žå ã æ°ããæ£ç¢ºãªå€ãæ¢ç¥ã«ãªã ã«ããã«ãè¿œå ã§ããŸã è£éããŒãã«ã«ã¢ã¯ã»ã¹ããåºåè£éã䜿çšããŠå€ã®æŽæ°ãããèšç®ãååŸããŸã ã¹ã¯ããŒã«åé¡ã解決ããåºåçéè£éã䜿çšããŠãæŽç·Žãããå€ãèšç®ããŸã ããžã·ã§ãã³ã°ã®åé¡ã解決ãããšãã 环ç©ãããåãã€ã³ãã§ãå¯èœãªäžäžèŽã®ç¯å²ãçããªããé¢æ°ã®ç²ŸåºŠãåäžããŸã ã
è€æ°ã®ããŒãã£ãŒã«ãããããããŒã¿ã¿ã€ããINTã§ãªãå Žå
å®éã«ã¯ãããžãã¹ã¯ããŒã¿ã»ããããœãŒãããããã®åäžã®æŽæ°ãã£ãŒã«ãã«éå®ãããŸããã ãŸããããŒã¿åãç°ãªãå ŽåããããŸãïŒæååãæ¥ä»ãªã©ã 第äºã«ãããã€ãã®ãœãŒãå¯èœãªãã£ãŒã«ãããããŸãã èšç®ã§ããã°ããã®å°é£ã¯åãé€ãããŸã
- ãã³ããªã³ã°æ©èœ ä»»æã®ã¿ã€ãã®ãã£ãŒã«ãã®å€ã®ã»ãããèªç¶æ°ã«å€æãã
- ããã®éé¢æ° èªç¶æ°ãäžé£ã®ãã£ãŒã«ãå€ã«å€æãçŽãã ã
ãã³ããªã³ã°é¢æ°ã«ã¯ã次ã®ããããã£ãå¿ èŠã§ãã å°ãªããã€ã€ã« èŸæžé ã®æå³ã§ã¯ã ã
æ°åŠã®èšèªã§ã¯ãå šåå° ãã£ãŒã«ãã®ã»ããã®å¯èœãªå€ã®ã»ãããšèªç¶æ°ã®ã»ããã®éã§é åºã®ååã確ç«ããå¿ èŠããããŸãã 泚ïŒé©åãªã¿ã¹ã¯ãèŠã€ããããã« æ°åŠçã«è§£ãããšãã§ãããããå¯èœãªãã£ãŒã«ãå€ã®ã»ãããéèŠã§ã æéã§ããã ããšãã°ãèªç¶æ°ïŒå®æ°ã®ãã¢ïŒã®èŸæžåŒã«é åºä»ãããããã¹ãŠã®ãã¢ã®ã»ãããšèªç¶ïŒå®æ°ïŒã®ã»ããã®éã§ãé åºã®ååãæ§ç¯ããããšã¯äžå¯èœã§ãã ãã¡ããããããããã·ã³ããŒã¿ã¿ã€ãã®ãã¹ãŠã®å¯èœãªå€ã®ã»ããã¯ãéåžžã«å€§ãããã®ã®ãæéã§ãã
å€ãè¡šãã«ã¯ æšæºã®32ãããããã³64ãããæŽæ°åã¯é©åã§ã¯ãããŸããããããã£ãŠããã¹ãŠã®çš®é¡ã®10ãã€ãæååã ãã«çªå·ãä»ãçŽãã«ã¯ã64ãããïŒ8ãã€ãïŒæŽæ°ã§ã¯ãã¯ãäžååã§ãã å®è£ ã§ã¯ã java.math.BigIntegerã¯ã©ã¹ã䜿çšããŸãããããã¯ãä»»æã®ãµã€ãºã®æŽæ°ãè¡šãããšãã§ããŸãã ãã®å Žåãå€ãå ããRAMã®é å€ã®ã»ãããå ããäœç©ã«ã»ãŒçãã ã
å¯éçãªãã³ããªã³ã°æ©èœãããå Žå ããã³å¯éè£éé¢æ° ã
- ã°ãªããã¹ã¯ããŒã«ã¯ãããŒãã£ãŒã«ãã®å€ã®èšç®ã«éå®ãããŸã ã©ã㧠-åçŽã¹ã¯ããŒã«ããŒã®äœçœ®ããã®åŸãããŒã¿ããŒã¹ãžã®ã¯ã€ãã¯ã¯ãšãªãæ€åºãããŸã æåã®ãšã³ããªä»¥äž ã
- ããžã·ã§ãã³ã°ã¯èªæžã«ãªããŸã 以åã«æ¢ç¥ã®å€ã«åŸã£ãŠããŒã¿ããŒã¹ããæåã®ã¬ã³ãŒã ãããã³ã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒã®äœçœ®ãèšç®ããŸã ã
ããã·ãŒãžã£çžäºäœçšã¹ããŒã
ãã®æ®µéã§ã¯ãæ°åŠããè±åºããã¢ã«ãŽãªãºã éšåèªäœãåŠçã§ããŸãã ã·ã¹ãã æé ã®çžäºäœçšã®äžè¬çãªã¹ããŒã ã次ã®å³ã«ç€ºããŸãã ãè¿äŒŒUMLã¢ã¯ãã£ããã£ãè¡šèšã䜿çšãããå®ç·ã®ç¢å°ã¯æé ã®ã·ãŒã±ã³ã¹ã瀺ããç¹ç·ã®ç¢å°ã¯å¥ã®å®è¡ã¹ã¬ããã§ã®éåæåŒã³åºãã瀺ããŸãã
ãŠãŒã¶ãŒãåçŽã¹ã¯ããŒã«ããŒã®ã¹ã©ã€ããŒã®äœçœ®ãå€æŽãããšä»®å®ããŸãïŒå³ã®å·Šäžé ãåç §ïŒã è£éåšã¯ãããŒãã£ãŒã«ãå€ã®çµã¿åããçªå·ã®å€ãèšç®ããŸãïŒ ïŒBigIntegerã¿ã€ãã ãã®å€ã«åºã¥ããŠãåæåã¯ããŒãã£ãŒã«ãã®çµã¿åããã埩å ããŸã ã
ãã£ãŒã«ãã®ãã®æ®µéã§ãããç解ããããšãéèŠã§ã ããŒã¿ããŒã¹ã«å®éã«ååšããå€ã¯å¿ ãããèŠã€ãããšã¯éããŸãããè¿äŒŒå€ã®ã¿ãååšããŸãã ããšãã°ãæååãã£ãŒã«ãã«ã¯ãæå³ã®ãªãæåã»ããããããŸãã ãã ããã¯ãšãªBã®é¡èãªç¹æ§ã®ãããããŒã¿ããŒã¹ããã®åºå ã»ãã以äžã®ããŒãæã€è¡ æå®ãããã¹ã¯ããŒã«ããŒã®äœçœ®ã«å¯ŸããŠã»ãŒæ£ããçµæã«ãªããŸãã
ãŠãŒã¶ãŒãã¹ã¯ããŒã«ããŒãé¢ãããã°ãã觊ããªãå Žåãéåæã§ïŒå®è¡ã®å¥ã®ã¹ã¬ããã§ïŒã¯ãšãªDãå®è¡ãããã¬ã³ãŒãã®ã·ãªã¢ã«çªå·ããããã£ãŠãŠãŒã¶ãŒã«è¡šç€ºããããã®ã«å¯Ÿå¿ããã¹ã¯ããŒã«ããŒã®æ£ç¢ºãªäœçœ®ã決å®ãããŸãã èŠæ±ãå®äºãããšãåä¿¡ããããŒã¿ã«åºã¥ããŠãè£éããŒãã«ãæŽæ°ãããŸãã ãã®æç¹ã§ãŠãŒã¶ãŒãåã³ããŒãã«ã®ã¹ã¯ããŒã«ãéå§ããŠããªãå ŽåãåçŽã¹ã©ã€ããŒã¯æ°ããæŽç·Žãããäœçœ®ã«ãããŠã³ã¹ãããŸãã
èšé²ã«ç§»è¡ãããšãããã·ãŒãžã£ã³ãŒã«ã®ã·ãŒã±ã³ã¹ã¯å察æ¹åã«çºçããŸãã ããŒãã£ãŒã«ãã®å€ã¯æ¢ã«ããã£ãŠããããããŠãŒã¶ãŒãªã¯ãšã¹ãBã¯ããŒã¿ããŒã¹ããããŒã¿ãããã«ååŸããŸãã çªå·ä»ãã¯èšç®ããŸã ããããŠè£éåšã¯ã¹ã¯ããŒã«ããŒã®ããããã®äœçœ®ã次ã®ããã«æ±ºå®ããŸã ã 䞊è¡ããŠãéåæã®å®è¡ã¹ã¬ããã§ãæŽç·Žã¯ãšãªãå®è¡ããããã®çµæã«ãã£ãŠæ°ãããã€ã³ããè£éããŒãã«ã«è¿œå ãããŸãã 1ã2ç§åŸãã¹ã¯ããŒã«ããŒã¹ã©ã€ããŒãæ°ããããŠã³ãäœçœ®ã«ãããŠã³ã¹ãããŸãã
ãŠãŒã¶ãŒãæå®ãããåçŽã¹ã©ã€ããŒããããŸãããããã»ã©ãè£éããŒãã«ã«åéããããã€ã³ããå€ããªãããããŠã³ã¹ããå°ãªããªããŸãã å®è·µã§ã¯ãè£éããŒãã«ã§4ã5åã®æåãããã€ã³ãã ãããããŠã³ã¹ããéåžžã«å°ããããã®ã«ååã§ããããšã瀺ããŠããŸãã
è£éã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ã32ãããæŽæ°ã®ã»ããïŒããŒãã«å ã®ã¬ã³ãŒãçªå·ïŒãšBigIntegerãªããžã§ã¯ãã®ã»ããïŒããŒãã£ãŒã«ãå€ã®çµã¿åããã®ã·ãŒã±ã³ã¹çªå·ïŒã®éã®å調å¢å é¢æ°ã®äžéç¹ãæ ŒçŽããå¿ èŠããããŸãã
ã°ãªãããåæåããçŽåŸã«ãæ£ããå€ãååŸããããã«ãå¥ã®å®è¡ã¹ã¬ããã§ããŒãã«å ã®ã¬ã³ãŒãã®ç·æ°ãèŠæ±ããå¿ èŠããããŸã ã 䞊åã¹ã¬ããã§å®è¡ãããŠããã¯ãšãªã䜿çšããŠãã®å€ãååŸããããŸã§ãããã©ã«ãå€ïŒ1000ãªã©ïŒã䜿çšã§ããŸã-ããã¯æ£ããæäœã«ã¯åœ±é¿ããŸããã
è£éåšã¯ãè£éç¹ã®æ°ãšããç¹ã§é«éã§ããããã«ãäžæ¹ã®æ¹åãšä»æ¹ã®æ¹åã®äž¡æ¹ã§å€ãèšç®ã§ããå¿ èŠããããŸãã ãã ããçµã¿åããã®ã·ãŒã±ã³ã¹çªå·ã®å€ãã¬ã³ãŒãçªå·ã§èšç®ããå¿ èŠãããå Žåãå€ãããšã«æ³šæããŠãã ããããã®ãããªèšç®ã¯ããŠãŒã¶ãŒã°ãªãããã¹ã¯ããŒã«ããããã»ã¹ã§æ¯ç§äœåãå®è¡ãããŸãã ãããã£ãŠãã€ã³ã¿ãŒãã¬ãŒã¿ãŒã¢ãžã¥ãŒã«ã®å®è£ ã®åºç€ãšããŠãããŒãã¬ã³ãŒãæ°ã§ãããå€ãçµã¿åããïŒJavaã®TreeMap <IntegerãBigInteger>ã¯ã©ã¹ïŒã®ã·ãŒã±ã³ã¹çªå·ã§ãããã€ããªããªãŒã«åºã¥ããèŸæžã䜿çšãããšäŸ¿å©ã§ãã
äžããããæ°ã«å¯Ÿã㊠ãã®ãããªèŸæžã¯ã察æ°æéã§2ã€ã®ãã€ã³ããèŠã€ããŸãïŒ ïŒãã®éã§é¢æ°ã®çŽæ¥è£éãæ§ç¯ããŸã ã ãããããšããäºå® å調ã«æé·ããçŽ æ©ãæéãšéèšç®ãå¯èœã«ããŸãã 確ãã«ïŒçµã¿åããçªå·ãäžããããŠããå Žå ã ããããŒã¹ã»ã°ã¡ã³ãã®æ€çŽ¢ ãäºåæ³ã«ããèŸæžã«äœæã§ããŸãã ç®çã®ã»ã°ã¡ã³ããèŠã€ãã£ãããéè£éãå®è¡ããŸã ãããŠçªå·ãèŠã€ãã 察å¿ãã ã
ãã£ã¯ã·ã§ããªãè£éãã€ã³ãã§æºããå Žåãè£éãããé¢æ°ãå調ãªãŸãŸã§ããããšã確èªããå¿ èŠããããŸãã ä»ã®ãŠãŒã¶ãŒã¯è¡šç€ºãããŠããããŒãã«ã®ãšã³ããªãåé€ããã³è¿œå ã§ãããããèŸæžãèªèããŠããè£éç¹ã®é¢é£æ§ã倱ãããæ°ããè¿œå ãããç¹ãå調æ§ãæãªãå¯èœæ§ããããŸãã ãããã£ãŠãæ°ããè£éãã€ã³ããè¿œå ããæ¹æ³ã§ã¯ãè¿œå ããã°ããã®ãå·ŠåŽã®ãã€ã³ãããå°ããå€ã«å¯Ÿå¿ãããå³åŽã®ãã€ã³ããã倧ããå€ã«å¯Ÿå¿ããããšã確èªããå¿ èŠããããŸãã ããã§ã¯ãªãããšãå€æããå ŽåãæåŸã«è¿œå ããããã€ã³ããçŸåšã®ç©äºã®ç¶æ ã«å¯Ÿå¿ããå€ããã€ã³ãã®äžéšãé¢é£æ§ã倱ã£ããšããä»®å®ããé²ãå¿ èŠããããŸãã æ°ããè¿œå ããããã€ã³ãã«é¢é£ããŠã倧ããªå€ãå«ãå·ŠåŽã®ãã¹ãŠã®ãã€ã³ããšãäœãå€ãå«ãå³åŽã®ãã¹ãŠã®ãã€ã³ããåé€ããå¿ èŠããããŸãã ãããã¯ã¢ãŠããã€ã³ããã«ãããããããã»ã¹ãå³ã«ç€ºããŸãã
ãŸããã€ã³ã¿ãŒãã¬ãŒã¿ãŒã«ã¯ãåé·ãªãã€ã³ãã§ãªãŒããŒãããŒããããšããèŸæžãä¿è·ãããããã®æäžäœãç Žæ£ããã¡ã¢ãªãä¿åããããã®ã¡ã«ããºã ãå«ãŸããŠããå¿ èŠããããŸãïŒæãåºãããã«ããã¹ãŠã®ãã€ã³ããé£ç¶ããŠä¿åããããšã¯æå³ããããŸãã-1ã€ã ãã§ååã§ãïŒã
ååã®çµè«
ãã®ãããã·ã¹ãã ã®äžè¬çãªé 眮ãç解ããŸããããã®äž»èŠéšåã¯è£éåšãšçªå·ä»ãããã€ã¹ã§ããã è£é åšã®å®è£ ã«ã€ããŠãååã«è°è«ããŸããã åé¡ã®è§£æ±ºãå®äºããã«ã¯ã çªå·ä»ã -ãã€ãžã§ã¯ã·ã§ã³ãå®è£ ããå¿ èŠããããŸã ãããŒãã£ãŒã«ãå€ã®ã»ããããªã³ã¯ããŸããããã¯ãUnicodeç §åèŠåãªã©ã䜿çšããŠãœãŒããããæ¥ä»ãæååã§æ§æãããåãé åºã§æ°åãå¢å ããŸãã
èšäºã®ç¬¬2éšã¯ããã«å°å¿µããŸã ã
ãŸããç§åŠåºçç©ãæºåããŠããŸãããŸããarxiv.orgã®ãã®èšäºã®ç§åŠçã®åå·ãã«æ £ããããšãã§ããŸãã