TL;DR: ããã€ã â ãŠã©ãŒã·ã£ã« ã¢ã«ãŽãªãºã ã¯ãåçããã°ã©ãã³ã°ã䜿çšããŠãã¹ãŠã®ãã¢ã®æççµè·¯ãèšç®ããŸããã°ã©ãããè·é¢è¡åãåæåãããã¹ãŠã®äžéé ç¹ k ã«ã€ããŠãåãã¢ã dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]) ã§æŽæ°ããŸãããã㯠O(V³) æéãš O(V²) 空éã§å®è¡ãããè² ã®å¯Ÿè§ãšã³ããªãéããŠè² ã®ãµã€ã¯ã«ãé²åããå¯èœæ§ããããŸãã
ããã€ã â ãŠã©ãŒã·ã£ã« ã¢ã«ãŽãªãºã : ã³ãŒãã£ã³ã°é¢æ¥ã¬ã€ã
ååž°ãã«ãŒãäžå€åŒãè¡åãã¬ãŒã¹ããã¹åæ§æããšããž ã±ãŒã¹ãããã³è€éãã®èª¬æãç·Žç¿ããŸãã
YesToTheOfferãÂÂÚ©ŠãÂÂ
ããã€ãã»ãŠã©ãŒã·ã£ã«ã¢ã«ãŽãªãºã ãšã¯äœã§ãã?
Floyd-Warshall ã¯ããã¹ãŠã®é åºä»ãé ç¹ãã¢éã®æçãã¹ãæ±ããåçããã°ã©ãã³ã° ã¢ã«ãŽãªãºã ã§ããããã¯ãæåãŸãã¯ç¡åã®éã¿ä»ãã°ã©ãã§åäœããè² ã®ãšããžãèš±å¯ããŸãããã ããé¢é£ããè² ã®éã¿ãµã€ã¯ã«ãååšããå Žåããµã€ã¯ã«ãç¹°ãè¿ãééããããšã§ãã¹ ã³ã¹ããåæžããç¶ãããããäžéšã®æçãã¹ã«ã¯æéã®æå°å€ãååšããŸããã
ãã®ã¢ã«ãŽãªãºã ã¯ãã°ããŒãã« ãã¹ã®åé¡ã 1 ã€ã®æ±ºå®ã«å€ãããããèšæ¶ã«æ®ããŸããã€ãŸããçŸåšã®äžéé ç¹ k ã«ã€ããŠãi ãã j ãžã®æãããç¥ãããŠãããã¹ã¯ãã®ãŸãŸã®æ¹ãè¯ãã®ãããããšã i ãã k ã«é²ã¿ã次㫠k ãã j ã«é²ãæ¹ãè¯ãã®ããšããããšã§ãã
åçºãã©ã®ããã«å°ãåºãã®ã§ããããïŒ
D(k, i, j) ããäžéé ç¹ãæåã® k åã®é ç¹ããã®ã¿åŸããã i ãã j ãŸã§ã®æçè·é¢ãšããŠå®çŸ©ããŸããèš±å¯ãããæçãã¹ã¯ãé ç¹ k ãåé¿ã㊠D(kâ1, i, j) ãç¶æããããk ã䜿çšã㊠i ãã k ãŸã§ã®æè¯ã®èš±å¯ããããã¹ãš k ãã j ãŸã§ã®æè¯ã®èš±å¯ããããã¹ã«åå²ããŸãã
ããã«ãããæ¬¡ã®ç¹°ãè¿ããåŸãããŸãã
YTOKEN0
ã¹ããŒãž k ã¯äºææ§ã®ããæ¹æ³ã§ã¹ããŒãž k-1 ã®å€ã®ã¿ã«äŸåãããããè¡åãé©åãªå Žæã§æŽæ°ã§ããŸãããã®æšè«ã¯ãéèŠãªã«ãŒãé åºã説æããŠããŸããk ã¯æãå€åŽã®ã«ãŒãã§ãªããã°ãªããŸããã i ãŸã㯠j ãå€åŽã«çœ®ããšäžå€åŒã倿Žãããéšåçã«èš±å¯ããããã¹ã誀ã£ãŠäœ¿çšãããå¯èœæ§ããããŸãã
è·é¢è¡åãåæåããã«ã¯ã©ãããã°ããã§ãããã?
V à V è¡åãäœæããŸãã dist[i][i] ããŒãã«èšå®ãããã€ã¬ã¯ã ãšããžã®ã»ã«ããã®éã¿ã«èšå®ãããã€ã¬ã¯ã ãšããžãååšããªãå Žåã¯ç¡é倧ã䜿çšããŸããå¹³è¡ãªãšããžãå¯èœãªå Žåã¯ãçŽæ¥ã®éã¿ãæå°ã«ä¿ã¡ãŸãã 2 ã€ã®è·é¢ã远å ããåã«ãç¡éã»ã³ããã«ããªãŒããŒãããŒãããã誀ã£ãåè£ãäœæããããããªãããã«ãäž¡æ¹ãæéã§ããããšã確èªããŠãã ããã
| ãããªãã¯ã¹ã»ã« | åæå€ | çç± |
|---|---|---|
| YTOKEN0 | 0 | é ç¹ããé ç¹èªäœãŸã§ã®ç©ºã®ãã¹ |
| ãã€ã¬ã¯ããšããž i â j | ãšããžã®éã¿ | äžéé ç¹ã®ãªãæé©ãªãã¹ |
| ãã€ã¬ã¯ããšããžãªã | ç¡é倧 | ãã¢ãå°éå¯èœãã©ããã¯ãŸã äžæã§ã |
| å¹³è¡ãšããž | æå°ãšããžéé | æè¯ã®çŽæ¥ãªãã·ã§ã³ã¯åºæ¬ã±ãŒã¹ã§ã |
ã€ã³ã¿ãã¥ãŒã§ããã€ãïŒãŠã©ãŒã·ã£ã«ãã©ã®ããã«è¿œè·¡ããŸããïŒ
ãããªãã¯ã¹ã®è¡ã«ãœãŒã¹ãåã«å®å ãšããŠã©ãã«ãä»ããŸããåæè¡åã衚瀺ããk ã 1 ã€éžæããŠã代衚çãªã»ã«ãè©äŸ¡ããŸããåã»ã«ã«ã€ããŠãçŸåšã®å€ã k ãéãã«ãŒããšæ¯èŒããŸããäž¡æ¹ã®ã»ã°ã¡ã³ããå°éå¯èœã§ãæ°ããåèšãå°ããå Žåã«ã®ã¿æŽæ°ããŸãã
éåžžã倧ããªäŸã§ã¯ãã¹ãŠã®è¡åãæç»ããå¿ èŠã¯ãããŸããã 1 ã€ã®æ¹åãš 1 ã€ã®å€æŽãããŠããªãå€ãå«ããäžå€æ¡ä»¶ã瀺ãã®ã«ååãªã»ã«ããã¬ãŒã¹ããŸãã k ãå®äºããåŸãäžéé ç¹ãåŠçãããã»ããã«å¶éãããŠãããã¹ã®äžã§ãã¹ãŠã®è¡åãšã³ããªãæé©ã§ããããšã瀺ããŸãã

ã©ã®ãããªç䌌ã³ãŒããæžãã°ããã§ãããã?
k ãå€åŽã«ãã 3 ã€ã®ãã¹ããããã«ãŒãã䜿çšããŸãã
for k from 0 to V - 1:
for i from 0 to V - 1:
for j from 0 to V - 1:
if dist[i][k] is finite and dist[k][j] is finite:
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
æéæ€æ»ãšæ°å€åã«ã€ããŠèª¬æããŸãã倧ããªæŽæ°ã»ã³ããã«ãæã€èšèªã§ã¯ãè² ã®å€ã«ç¡é倧ãå ç®ãããšãæéã§ããããªãŒããŒãããŒã®ããã«èŠããããšããããŸããã¬ãŒãã¯æ£ç¢ºæ§ã®äžéšã§ãããåãªãå®è£ ã®è©³çްã§ã¯ãããŸããã
æéãšç©ºéã®è€éãã¯äœã§ãã?
3 ã€ã®ã«ãŒã㯠kãiãj ã®ãã¹ãŠã®çµã¿åãããæ€æ»ãããããã©ã³ã¿ã€ã 㯠O(V³) ã«ãªããŸããè·é¢è¡å㯠O(V²) ã¹ããŒã¹ãå æããŸããã€ã³ãã¬ãŒã¹æŽæ°ã«ãã 3 次å ããŒãã«ãåé¿ããããã¹åæ§ç¯ã®ããã®ãã¯ã¹ãããããŸãã¯å è¡ãããªãã¯ã¹ã«ãã O(V²) åã®ã¹ããŒã¹ã远å ãããŸãã
Floyd-Warshall ã¯ãå®è£ ãã³ã³ãã¯ãã§äºæž¬å¯èœã§ãããããé©åºŠãªå¯åºŠã®ã°ã©ãã«ãšã£ãŠé åçãªããšããããããŸããéè² ã®ãšããžãæã€å€§èŠæš¡ãªçã°ã©ãã®å ŽåãåãœãŒã¹ãããã€ã¯ã¹ãã©ãå®è¡ããæ¹ãå¹ççã«ãªãå¯èœæ§ããããŸããéžæããåã«ãå¿ èŠãªåºåãã°ã©ãå¯åºŠãéã¿å¶çŽãé ç¹æ°ãåžžã«æ¯èŒããŠãã ããã
å®éã®æççµè·¯ãã©ã®ããã«åæ§ç¯ããã®ã§ãããã?
è·é¢ã ãã§ã¯é ç¹ã®ã·ãŒã±ã³ã¹ã¯ããããŸããã i ãã j ãžã®çŽæ¥ãšããžãååšããå Žåãj ã«åæåããã next[i][j] è¡åãç¶æããŸãã k ãä»ããã«ãŒãã£ã³ã°ã«ãã£ãŠ dist[i][j] ãæ¹åããããã³ã«ãnext[i][j] ã next[i][k] ã«èšå®ããŸãããã¹ãåæ§ç¯ããã«ã¯ãç®çå°ã«å°éãããŸã§çŸåšã®é ç¹ãã next[current][destination] ãžã®ç§»åãç¹°ãè¿ããŸãã
åæ§ç¯åã«å°éäžèœãªãã¢ããã§ãã¯ããè² ã®ãµã€ã¯ã«ã®ã±ãŒã¹ããä¿è·ããŸãããã¢ãè² ã®ãµã€ã¯ã«ã«ç§»åããŠç®çå°ã«å°éã§ããå Žåãåæ§ç¯ããããã®æéã®æççµè·¯ã¯ãããŸããã
ããã€ãã»ãŠã©ãŒã·ã£ã«ã¯ã©ã®ããã«ããŠè² ã®ãµã€ã¯ã«ãæ€åºããã®ã§ãããã?
ã¢ã«ãŽãªãºã ãçµäºãããã察è§ç·ãæ€æ»ããŸããå€ dist[v][v] < 0 ã¯ãè² ã®éã¿ãµã€ã¯ã«ã v ããå°éå¯èœã§ãããv ã«æ»ãããšãã§ããããšã蚌æããŸããããã¯ãåã«è² ã®ãšããžãèŠã€ããããã匷åã§ããè² ã®ãšããžã¯ãå®å šã«æå¹ãªæçãã¹ãæã€ã°ã©ãã«ååšããå¯èœæ§ããããŸãã
ã€ã³ã¿ãã¥ã¢ãŒãã©ã®ãã¢ã圱é¿ãåããããå°ããããi ããã®ãããªé ç¹ v ã«å°éã§ããv ã j ã«å°éã§ãããã¹ãŠã® i ãš j ãç¹å®ããŸãããããã®ãã¢ã¯è² ã®ãµã€ã¯ã«ãä»»æã«äœåºŠã§ãã«ãŒãã§ãããããæçãã¹ã®å€ã¯æéã§ã¯ãããŸããã
å¥ã®æçãã¹ ã¢ã«ãŽãªãºã ãéžæããå¿ èŠãããã®ã¯ã©ã®ãããªå Žåã§ãã?
éã¿ä»ããããŠããªãã°ã©ãã«ã¯å¹ åªå æ¢çŽ¢ã䜿çšããéè² ã®éã¿ãæã€åäžãœãŒã¹åé¡ã«ã¯ãã€ã¯ã¹ãã©ã䜿çšããè² ã®éã¿ãŸãã¯å°éå¯èœãªè² ã®ãµã€ã¯ã«æ€åºãéèŠãªå Žåã«ã¯åäžãœãŒã¹ã«ãã«ãã³ã»ãã©ãŒãã䜿çšããŸãããã¹ãŠã®ãã¢ã®è·é¢ãå¿ èŠã§ãããç«æ³æéã蚱容ã§ããå Žåã«ã¯ãããã€ã â ãŠã©ãŒã·ã£ã«ãçŽæ¥ã®éžæè¢ãšãªããŸãã
| èŠä»¶ | å žåçãªéžæ |
|---|---|
| éã¿ä»ããããŠããªãåäžãœãŒã¹ | å¹ åªå æ€çŽ¢ |
| éè² ã®éã¿ä»ãåäžãœãŒã¹ | ãã£ã¯ã¹ãã© |
| è² ã®éã¿ãåäžãœãŒã¹ | ãã«ãã³ã»ãã©ãŒã |
| ãã¹ãŠã®ãã¢ãæ§ãããŸãã¯å¯ãªã°ã©ã | ããã€ãã»ãŠã©ãŒã·ã£ã« |
é¿ããã¹ã颿¥ã®ééãã¯ã©ãã§ãã?
k ãå¥ã®ã«ãŒãå ã«å ¥ãããã察è§ã®ãŒããå¿ããããã¬ãŒããªãã§ç¡éã远å ããããè² ã®ãšããžãšè² ã®ãµã€ã¯ã«ãæ··åããããO(V²) è¡å空éã«ãã¹ãŠã®è¡šçŸã§å ¥åãèªåçã«å«ãŸãããšäž»åŒµãããããªãã§ãã ãããã°ã©ãã«æ¹åããããã©ãããå¹³è¡ãªãšããžãååšãããã©ããã颿¥å®ãè·é¢ããã¹ããŸãã¯ãµã€ã¯ã«ã®åœ±é¿ãåãããã¢ãå¿ èŠãšããŠãããã©ãããæç¢ºã«ããŸãã
ã³ãŒãã£ã³ã° ã€ã³ã¿ãã¥ãŒ ã¢ã·ã¹ã¿ã³ã ã¯ãŒã¯ãã㌠ãç·Žç¿ãããã«ãã³-ãã©ãŒã ã¢ã«ãŽãªãºã ãæ¯èŒããããã° ãªãŒã®è€éãã«é¢ããããŒãã·ãŒã ã確èªããŠãã ããã
ãããã質å
FAQ
ããã€ã â ãŠã©ãŒã·ã£ã« ã¢ã«ãŽãªãºã ã¯äœã«äœ¿çšãããŸãã?
Floyd-Warshall ã¯ãéã¿ä»ãã°ã©ãå ã®é ç¹ã®ãã¹ãŠã®ãã¢éã®æççµè·¯è·é¢ãèšç®ããŸããè² ã®ãšããžã®éã¿ããµããŒãããŸãããå°éå¯èœãªè² ã®éã¿ãµã€ã¯ã«ã®åœ±é¿ãåãããã¢ã®æçãã¹ã¯æç¢ºã«å®çŸ©ãããŠããŸããã
ããã€ãã»ãŠã©ãŒã·ã£ã«åçºãšã¯äœã§ãã?
åäžéé ç¹ k ã«ã€ããŠãdist[i][j] ããã®çŸåšã®å€ãš dist[i][k] ã« dist[k][j] ãå ããå€ã®æå°å€ã«æŽæ°ããŸãããã¹ãŠã®æŽæ°ã§èš±å¯ãããäžéé ç¹ã®ã¿ã䜿çšãããããã«ãæãå€åŽã®ã«ãŒã㯠k ã§ãªããã°ãªããŸããã
æéãšç©ºéã®è€éãã¯äœã§ãã?
æšæºã¢ã«ãŽãªãºã 㯠O(V³) æéã§å®è¡ãããè·é¢è¡åã« O(V²) 空éã䜿çšããŸãããã¹ã®åæ§ç¯ã§ã¯ãå¥ã® O(V²) è¡åã远å ãããŸãããæŒžè¿æéå¢çã¯å€æŽãããŸããã
ããã€ãã»ãŠã©ãŒã·ã£ã«ã¯è² ã®ãµã€ã¯ã«ãæ€åºã§ããã§ãããã?
ã¯ãããã¹ãŠã®äžéé ç¹ãåŠçããåŸãdist[v][v] ã®è² ã®å€ã¯ãè² ã®éã¿ãµã€ã¯ã«ã v ããå°éå¯èœã§ããããšãæå³ããŸãããã®ãããªãµã€ã¯ã«ã®åœ±é¿ãåãããã¹ãŠã®éä¿¡å ãšå®å ã®ãã¢ãç¹å®ããã«ã¯ã远å ã®å°éå¯èœæ§æšè«ãå¿ èŠã§ãã
ãã£ã¯ã¹ãã©ã®ä»£ããã«ããã€ãã»ãŠã©ãŒã·ã£ã«ã䜿çšããå¿ èŠãããã®ã¯ã©ã®ãããªå Žåã§ãã?
ãã¹ãŠã®ãã¢ã®è·é¢ãå¿ èŠã§ãã°ã©ãã®ãµã€ãºãæ§ããã§ãåçŽãªå¯ã°ã©ã ãœãªã¥ãŒã·ã§ã³ã蚱容ãããå Žåã¯ãFloydâWarshall ã䜿çšããŸããéåžžãå埩ãã€ã¯ã¹ãã©ã¯ãéã¿ãè² ã§ãªã倧ããªçã°ã©ãã®å Žåã«é©ããŠããŸãã
ã«ãŒãã ãã§ãªããäžå€æ¡ä»¶ãç·Žç¿ããŸããã
YesToTheOffer ã¯ãã³ãŒãã£ã³ã°ã®èª¬æãæ§é åããå人çãªæºåããŒãã«åºç€ã眮ããç¹æ®ãªã±ãŒã¹ãæ€èšããåŸã§ç¢ºèªã§ããããã«ã€ã³ã¿ãã¥ãŒã®èšé²ãä¿åããã®ã«åœ¹ç«ã¡ãŸãã
ã«ãŒãã ãã§ãªããäžå€æ¡ä»¶ãç·Žç¿ããŸããã
åçºããªããŒãµã«ããk ãæãå€åŽã§ããçç±ã説æãããã¹ã®åæ§æãšè² ã®ãµã€ã¯ã«ã®ãšããž ã±ãŒã¹ããã¹ãããŸãã
YesToTheOfferãÂÂÚ©ŠãÂÂ