ããã«ã¡ã¯ã
ãã®ã¡ã¢ã§ã¯ãã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã§ã°ã©ããä¿åããããã«äœ¿çšãããäž»ãªããŒã¿æ§é ããªã¹ãããããšã«ããŸããããŸããç§ã«ãšã£ãŠã©ãããããããçµæ¶åããããã®ãããªæ§é ãããã«ããã€ãã話ããŸãã
ããã§ã¯ãå§ããŸãããã ããããæåããã§ã¯ãããŸãããç§ãã¡ã¯çãã°ã©ããäœã§ãããããããŠããããäœã§ãããïŒæåãç¡åãéã¿ä»ããéã¿ãªããè€æ°ã®ãšããžãã«ãŒãã®æç¡ã«ãããããïŒãã§ã«ç¥ã£ãŠãããšæããŸãã
ãããè¡ããã ãã°ã©ãã¹ãã¬ãŒãžãã®ããŒã¿æ§é ã«ã¯ã©ã®ãããªãªãã·ã§ã³ããããŸãã?
1. è¡åããŒã¿æ§é
1.1 é£æ¥è¡åã é£æ¥è¡åã¯ãè¡ãšåã®èŠåºããã°ã©ãã®é ç¹ã®æ°ã«å¯Ÿå¿ããè¡åã§ããã®åèŠçŽ a(i,j) ã®å€ã¯é ç¹éã®ãšããžã®æç¡ã«ãã£ãŠæ±ºãŸããŸãã i ãš j (ç¡åã°ã©ãã®å Žåããã®ãããªè¡åã察称ã§ããããšã¯æããã§ãããŸãã¯ããã¹ãŠã®å€ã䞻察è§ã®äžã«ã®ã¿ä¿åããããšã«åæã§ããŸã)ã éã¿ä»ããããŠããªãã°ã©ãã®å Žåãa(i,j) 㯠i ãã j ãŸã§ã®ãšããžã®æ°ã«ãã£ãŠèšå®ã§ããŸã (ãã®ãããªãšããžããªãå Žåã¯ãa(i,j)= 0)ãéã¿ä»ããããã°ã©ãã®å Žåã¯ãéã¿ã«ãã£ãŠãèšå®ã§ããŸããåè¿°ã®ãšããžã®ïŒç·ééïŒã
1.2 çºççãããªãã¯ã¹ã ãã®å Žåãã°ã©ãã¯ããŒãã«ã«ãä¿åãããŸããããŒãã«ã§ã¯ãååãšããŠãè¡çªå·ããã®é ç¹ã®çªå·ã«å¯Ÿå¿ããåçªå·ãäºåã«çªå·ä»ãããããšããžã«å¯Ÿå¿ããŸãã é ç¹ãšãšããžãäºãã«è¡çªããå Žåã察å¿ããã»ã«ã«ãŒã以å€ã®å€ãæžã蟌ãŸããŸã (ç¡åã°ã©ãã®å Žåãé ç¹ãšãšããžãè¡çªããå Žå㯠1 ãæžã蟌ãŸããŸããæåã°ã©ãã®å Žåããšããžãè¡çªããå Žåã¯ã1ããæžã蟌ãŸããŸã)ãé ç¹ãããåºããå Žåã¯ã-1ããé ç¹ã«ãå«ãŸãããå Žåã¯ã-1ãã«ãªããŸãïŒæ°åã-1ãã«ã¯ããã€ãã¹ãèšå·ããå«ãŸãããããã§ãã®ã§ãèŠããŠããã®ã¯ç°¡åã§ãïŒã éã¿ä»ãã°ã©ãã®å Žåãã1 ãš -XNUMX ã®ä»£ããã«ããšããžã®åèšéã¿ãæå®ã§ããŸãã
2. åæåããŒã¿æ§é
2.1 é£æ¥ãªã¹ãã ããŠãããã§ã¯ãã¹ãŠãç°¡åã«èŠããŸãã äžè¬ã«ãã°ã©ãã®åé ç¹ã¯ãæå®ãããé ç¹ã«é£æ¥ãããã¹ãŠã®é ç¹ã®çªå·ãæ ŒçŽããä»»æã®åææ§é (ãªã¹ãããã¯ãã«ãé åãªã©) ã«é¢é£ä»ããããšãã§ããŸãã æåã°ã©ãã®å Žåããã£ãŒãã£é ç¹ãããæåããšããžãååšããé ç¹ã®ã¿ããã®ãããªãªã¹ãã«è¿œå ããŸãã éã¿ä»ãã°ã©ãã®å Žåãå®è£ ã¯ããè€éã«ãªããŸãã
2.2 ãªãã®ãªã¹ãã éåžžã«äžè¬çãªããŒã¿æ§é ã§ãã Captain Obviousness ãèšãããã«ããšããžã®ãªã¹ãã¯å®éã«ã¯ã°ã©ãã®ãšããžã®ãªã¹ãã§ãããåãšããžã¯éå§é ç¹ãšçµäºé ç¹ã«ãã£ãŠæå®ãããŸã (ç¡åã°ã©ãã®å Žåãé åºã¯ããã§ã¯éèŠã§ã¯ãããŸããããçµ±åã®å Žåã¯æ¬¡ã®ããã«ããããšãã§ããŸã)ããšãã°ãé ç¹ã®å¢å é ã®æå®ãéã¿ä»ã (éã¿ä»ããããã°ã©ãã®ã¿) ãªã©ãããŸããŸãªã«ãŒã«ã䜿çšããŸãã
äžèšã®ãããªãã¯ã¹ ãªã¹ããããã«è©³ãã (ããã³å³ã䜿çšããŠ) 確èªã§ããŸããããšãã°ã次ã®ããã«ãªããŸãã
2.3 é£æ¥é åã æãäžè¬çãªæ§é ã§ã¯ãããŸããã ãã®æ žå¿ã¯ãé£æ¥ãªã¹ãã XNUMX ã€ã®åææ§é (é åããã¯ãã«) ã«ãè©°ã蟌ãã圢åŒã§ãã ãã®ãããªé åã®æåã® n (ã°ã©ãã®é ç¹ã®æ°ã«å¿ãã) èŠçŽ ã«ã¯ãåãé åã®éå§ã€ã³ããã¯ã¹ãå«ãŸããŠãããããããéå§ããŠãæå®ãããé ç¹ã«é£æ¥ãããã¹ãŠã®é ç¹ãè¡ã«æžã蟌ãŸããŸãã
ããã§ïŒç§ã«ãšã£ãŠïŒæããããããã説æãèŠã€ããŸããã
3. é£æ¥ãã¯ãã«ãšé£æ³é£æ¥é å
ãããã®è¡ã®äœæè ã¯ããã®ããã°ã©ãã§ã¯ãããŸããããå®æçã«ã°ã©ããæ±ã£ãŠãããæãé »ç¹ã«ãšããžã®ãªã¹ããæ±ã£ãŠããããšãå€æããŸããã 確ãã«ãã°ã©ãã«è€æ°ã®ã«ãŒããšãšããžããããšäŸ¿å©ã§ãã ãããã£ãŠããšããžã®å€å žçãªãªã¹ãã®éçºã«ãããŠãç§ã¯ãããã®ãçºç/åå²/å€æŽ/çªç¶å€ç°ããã€ãŸãé£æ¥ãã¯ãã«ãšé£æ³é£æ¥é åã«æ³šæãæãããšãææ¡ããŸãã
3.1 é£æ¥ãã¯ãã«
ã±ãŒã¹ (a1): éã¿ä»ããããŠããªãã°ã©ã
éã¿ä»ããããŠããªãã°ã©ãã®é£æ¥ãã¯ãã«ããå¶æ°ã®æŽæ° (a[2i]ãa[2i+1]ã...ãi ã«ã¯ c 0 ã®çªå·ãä»ããããŸã) ã®é åºä»ãã»ãããšåŒã³ãŸããããã§ãåæ°å€ã®ãã¢ã¯ã¯ a[2i]ãa[2i+1 ] ã¯ããããé ç¹ a[2i] ãš a[2i+1] ã®éã®ã°ã©ã ãšããžãæå®ããŸãã
ãã®èšé²åœ¢åŒã«ã¯ãã°ã©ããæ¹åä»ããããŠãããã©ããã«é¢ããæ
å ±ã¯å«ãŸããŸãã (äž¡æ¹ã®ãªãã·ã§ã³ãå¯èœã§ã)ã æåã°ã©ã圢åŒã䜿çšããå Žåããšããžã¯ a[2i] ãã a[2i+1] ã«åãããã®ãšã¿ãªãããŸãã 以äž: ç¡åã°ã©ãã®å Žåãå¿
èŠã«å¿ããŠãé ç¹ãèšé²ããé åºã®èŠä»¶ãé©çšã§ããŸã (ããšãã°ãå²ãåœãŠãããçªå·ã®å°ããå€ãæã€é ç¹ãæåã«ãªããªã©)ã
C++ ã§ã¯ãstd::vector ã䜿çšããŠé£æ¥ãã¯ãã«ãæå®ããããšããå§ãããŸããããããã®ããŒã¿æ§é ã®ååã®ç±æ¥ã§ãã
ã±ãŒã¹ (a2): éã¿ä»ããããŠããªãã°ã©ãããšããžã®éã¿ã¯æŽæ°ã§ã
ã±ãŒã¹ (a1) ãšåæ§ã«ãæŽæ°ãšããžã®éã¿ãæã€éã¿ä»ãã°ã©ãã®é£æ¥ãã¯ãã«ããæ°å€ (a[3i]ãa[3i+1]ãa[3i+2]ã ...ãããã§ãi ã«ã¯ c 0) ã®çªå·ãä»ããããŸããããã§ãçªå· a[3i]ãa[3i+1]ãa[3i+2] ã®åãããªãã¬ãããã¯ãa[3i] ã®çªå·ãä»ããããé ç¹éã®ã°ã©ãã®ãšããžãæå®ããŸãããš a[3i+1] ããããããããå€ a [3i+2] ã¯ãã®ãšããžã®éã¿ã§ãã ãã®ãããªã°ã©ãã¯ãæ¹åãæå®ããããšããæ¹åãæå®ããªãããšãã§ããŸãã
ã±ãŒã¹ (b): éã¿ä»ããããŠããªãã°ã©ããéæŽæ°ãšããžã®éã¿
ç°çš®ã®èŠçŽ ãäžã€ã®é åïŒãã¯ãã«ïŒã«æ ŒçŽããããšã¯äžå¯èœãªã®ã§ãäŸãã°ä»¥äžã®ãããªå®è£ ãå¯èœã§ãã ã°ã©ãã¯ãã¯ãã«ã®ãã¢ã«æ ŒçŽãããŸããæåã®ãã¯ãã«ã¯éã¿ãæå®ããªãã°ã©ãã®é£æ¥ãã¯ãã«ã§ã2 çªç®ã®ãã¯ãã«ã«ã¯å¯Ÿå¿ããéã¿ãå«ãŸããŸã (C++ ã®å¯èœãªå®è£ : std::pair) ïŒã ãããã£ãŠãæåã®ãã¯ãã«ã®ã€ã³ããã¯ã¹ 2iã1i+XNUMX ã®äžã®é ç¹ã®ãã¢ã«ãã£ãŠå®çŸ©ããããšããžã®å Žåãéã¿ã¯ XNUMX çªç®ã®ãã¯ãã«ã®ã€ã³ããã¯ã¹ i ã®äžã®èŠçŽ ãšçãããªããŸãã
ããŠããªããããå¿ èŠãªã®ã§ããããïŒ
ãããã®è¡ã®äœæè ã¯ããããå€ãã®åé¡ã解決ããã®ã«éåžžã«åœ¹ç«ã€ããšã«æ°ã¥ããŸããã 圢åŒçãªèŠ³ç¹ããèŠããšã次ã®ãããªå©ç¹ããããŸãã
- é£æ¥ãã¯ãã«ã¯ãä»ã®ãåæåãæ§é ãšåæ§ãéåžžã«ã³ã³ãã¯ãã§ãé£æ¥è¡å (ã¹ããŒã¹ ã°ã©ãã®å Žå) ãããã¡ã¢ãªã®äœ¿çšéãå°ãªããå®è£ ãæ¯èŒçç°¡åã§ãã
- ååãšããŠãã°ã©ãã®é ç¹ã«ã¯è² ã®æ°å€ãããŒã¯ããããšãã§ããŸãã ãã®ãããªãåé¯ããå¿ èŠãªå Žåã¯ã©ããªãã§ããããïŒ
- ã°ã©ãã«ã¯ãç°ãªãéã¿ (æ£ãè² ãããã«ã¯ãŒã) ãæã€è€æ°ã®ãšããžãšè€æ°ã®ã«ãŒããå«ããããšãã§ããŸãã ããã«ã¯å¶éã¯ãããŸããã
- ãšããžã«ããŸããŸãªããããã£ãå²ãåœãŠãããšãã§ããŸããã詳现ã«ã€ããŠã¯ã»ã¯ã·ã§ã³ 4 ãåç §ããŠãã ããã
ãã ãããã®ããªã¹ããã¯ãšããžãžã®è¿ éãªã¢ã¯ã»ã¹ãæå³ãããã®ã§ã¯ãªãããšãèªããªããã°ãªããŸããã ããã§ã以äžã§èª¬æããé£æ³é£æ¥é åã圹ã«ç«ã¡ãŸãã
3.2 é£æ³é£æ¥é å
ãããã£ãŠãç¹å®ã®ãšããžããã®éã¿ããã®ä»ã®ããããã£ãžã®ã¢ã¯ã»ã¹ãéèŠã§ãããã¡ã¢ãªèŠä»¶ã«ããé£æ¥è¡åã䜿çšã§ããªãå Žåã¯ããã®åé¡ã解決ããããã«é£æ¥ãã¯ãã«ãå€æŽããæ¹æ³ãèããŠã¿ãŸãããã ãããã£ãŠãããŒã¯ã°ã©ãã®ãšããžã§ãããæŽæ°ã®é åºä»ããã¢ãšããŠæå®ã§ããŸãã ããã¯ã©ã®ããã«èŠããŸãã? é£æ³é åã®ããŒã§ã¯ãªãã§ããããïŒ ãããããªãããããå®è£ ããŠã¿ãŸããã? åã㌠(é åºä»ããããæŽæ°ã®ãã¢) ãå€ (ãšããžã®éã¿ãæå®ããæŽæ°ãŸãã¯å®æ°) ã«é¢é£ä»ããããé£æ³é åãèããŠã¿ãŸãããã C++ ã§ã¯ãstd::map ã³ã³ãã㌠(std::map) ã«åºã¥ããŠãã®æ§é ãå®è£ ããããšããå§ãããŸãã ãint> ãŸã㯠std::map ãdouble>)ããŸãã¯è€æ°ã®ãšããžãäºæãããå Žå㯠std::multimapã ããã§ãããã°ã©ããä¿åããããã®æ§é ã¯ããè¡åãæ§é ãããã¡ã¢ãªã®äœ¿çšéãå°ãªããè€æ°ã®ã«ãŒããšãšããžãå«ãã°ã©ããå®çŸ©ã§ããé ç¹çªå·ã®éè² æ§ã«é¢ããå³å¯ãªèŠä»¶ãããããŸãã (ããããŸãã)ãããå¿ èŠãšãã人ã¯ããªãã§ãããããããã§ãïŒã
4. ããŒã¿æ§é ã¯ãã£ã±ãã§ãããäœããäžè¶³ããŠããŸã
ãããŠããã¯çå®ã§ããå€ãã®åé¡ã解決ãããšããã°ã©ãã®ç«¯ã«ããã€ãã®ç¹æ§ãå²ãåœãŠãããã«å¿ããŠããããä¿åããå¿ èŠããããããããŸããã ãããã®ç¹åŸŽãæ確ã«æŽæ°ã«æžããããšãã§ããã°ãé£æ¥ãã¯ãã«ãšé£æ³é£æ¥é åã®æ¡åŒµããŒãžã§ã³ã䜿çšããŠããã®ãããªãè¿œå ã®ç¹åŸŽãå«ãã°ã©ãããä¿åããããšãã§ããŸãã
ããã§ãéã¿ä»ããããŠããªãã°ã©ããäœæããŸããã°ã©ãã®åãšããžã«ã¯ãããšãã°ãæŽæ°ã§æå®ããã 2 ã€ã®è¿œå ã®ç¹åŸŽãä¿åããå¿ èŠããããŸãã ãã®å Žåãé£æ¥ãã¯ãã«ãããã¢ãã§ã¯ãªããæŽæ° (a[2i]ãa[2i+1]ãa[2i+2]ãa) ã®ãã«ã«ããããã®é åºä»ãã»ãããšããŠå®çŸ©ããããšãã§ããŸãã [2i+3]âŠ) ãããã§ã a[2i+2] ãš a[2i+3] ã¯ã察å¿ãããšããžã®ç¹æ§ã決å®ããŸãã ãšããžã®éã¿ãæŽæ°ã§ããã°ã©ãã®å Žåãé åºã¯éåžžåæ§ã§ã (å¯äžã®éãã¯ãå±æ§ããšããžã®éã¿ã«åŸããèŠçŽ a[2i+3] ããã³ a[2i+4] ã«ãã£ãŠæå®ãããããšã§ã) ããšããžèªäœã¯ 4 ã§ã¯ãªã 5 ã€ã®é åºçªå·ã§æå®ãããŸã)ã ãŸããéæŽæ°ââã®ãšããžéã¿ãæã€ã°ã©ãã®å Žåãç¹åŸŽã¯éã¿ä»ããããŠããªãã³ã³ããŒãã³ãã«æžã蟌ãããšãã§ããŸãã
æŽæ°ã®ãšããžã®éã¿ãæã€ã°ã©ãã«é£æ³é åã䜿çšããå Žåãå€ãšããŠåäžã®æ°å€ã§ã¯ãªãããšããžã®éã¿ã«å ããŠãã®ä»ã®å¿ èŠãªãã¹ãŠãæå®ããæ°å€ã®é å (ãã¯ãã«) ãæå®ããããšãã§ããŸããç¹åŸŽã åæã«ãéæŽæ°ã®éã¿ã®å Žåã®äžäŸ¿ãªç¹ã¯ãæµ®åå°æ°ç¹æ°ã§ç¬Šå·ãæå®ããå¿ èŠãããããšã§ã (ã¯ããããã¯äžäŸ¿ã§ããããã®ãããªç¬Šå·ãããã»ã©å€ããªããæå®ããªãå Žå)ããŸãã«ããããªãããŒãªãäºéã«èšå®ããªãã§ãã ãããããããã°ãäœãèµ·ãããªããããããŸããïŒã ããã¯ãC++ ã§ã¯æ¡åŒµé£æ³é£æ¥é åã次ã®ããã«å®çŸ©ã§ããããšãæå³ããŸãã std::map ãstd::vector> ãŸã㯠std::map ãstd::vectorããããŒå€ãã¯ãã«ãã®æåã®å€ããšããžã®éã¿ã«ãªãããã®åŸããã®ç¹æ§ã®æ°å€æå®ãé 眮ãããŸãã
æåŠïŒ
ã°ã©ããšã¢ã«ãŽãªãºã å šè¬ã«ã€ããŠ:
1. ã³ãŒã¡ã³ãããŒãã¹ H.ãã©ã€ã¶ãŒãœã³ããã£ãŒã«ãº I.ããªãã¹ããããã«ã L.ãã¹ã¿ã€ã³ãã¯ãªãã©ãŒãã ã¢ã«ãŽãªãºã : æ§ç¯ãšåæã第 2 ç: Trans. è±èªããâ M.: ãŠã£ãªã¢ã ãºåºç瀟ã2011 幎ã
2. ãã©ãªã»ãã©ã³ã¯ã ã°ã©ãçè«ã ãïŒããŒã«ã1973幎ã
ãããã®åããã¯ãã«ãšé£æ¥é¢ä¿ã®é£æ³é
åã«é¢ããèè
ã®ã¬ããŒãã¯æ¬¡ã®ãšããã§ãã
3.ãã§ã«ããŒããS.A. ã°ã©ããè¡šçŸããã³ä¿åããæ¹æ³ãšããŠã®é£æ¥ãã¯ãã«ãšé£æ³é£æ¥é
å / SA Chernouhovã ã°ã©ããè¡šãããŒã¿æ§é ãšããŠã®é£æ¥ãã¯ãã«ãšé£æ¥ããã // åœéç§åŠå®è·µäŒè°ã®è«æéãé©æ°çãªéçºã®çµæãå®è£
ããéã®åé¡ãšãã®è§£æ±ºæ¹æ³ãïŒãµã©ããã14.09.2019 幎 2019 æ 65 æ¥ïŒã â ã¹ãã«ãªã¿ãã¯: AMIã69ãp. XNUMX-XNUMX
ãã®ãããã¯ã«é¢ãã圹ç«ã€ãªã³ã©ã€ã³ ãœãŒã¹:
4.
5.
åºæïŒ habr.com