TL;DR: ã³ãµã©ãžã¥ã®ã¢ã«ãŽãªãºã ã¯ã2 ã€ã®ãã¹ã䜿çšããŠæåã°ã©ãå ã®åŒ·é£çµæåãæ€åºããŸãæ·±ãåªå æ€çŽ¢ãã¹ããŸãçµäºæéãæžãããŠé ç¹ãèšé²ãããã¹ãŠã®ãšããžã転眮ãã転眮ãããã°ã©ãããã®é åºã§æ¢çŽ¢ããŸããè»¢çœ®ãæ ŒçŽããããšãã®å®è¡æé㯠O(V + E)ãè£å©èšæ¶å㯠O(V + E) ã§ãã
ã³ãµã©ãžã¥ã®ã¢ã«ãŽãªãºã : 匷çµåã³ã³ããŒãã³ã ã¬ã€ã
ã³ãµã©ãžã¥ã®åŒ·çµåã³ã³ããŒãã³ãã®ã¢ã«ãŽãªãºã ãçŽæãæé ãè€éããç䌌ã³ãŒããäŸãããããééããã€ã³ã¿ãã¥ãŒã®ç·Žç¿ã§åŠã³ãŸãã
YesToTheOffer ã詊ããŠã¿ãã³ãµã©ãžã¥ã®ã¢ã«ãŽãªãºã ãšã¯äœã§ãã?

Kosaraju ã®ã¢ã«ãŽãªãºã ã¯ãæåã°ã©ãã匷æ¥ç¶ã³ã³ããŒãã³ã (SCC) ã«åå²ããŸãã 1 ã€ã® SCC å ã§ã¯ããã¹ãŠã®é ç¹ãä»ã®ãã¹ãŠã®é ç¹ã«å°éã§ããŸããå SCC ã 1 ã€ã®ããŒãã«çž®å°ãããšãæåéå·¡åã°ã©ããçæãããã³ã³ããŒãã³ããäŸåé¢ä¿ã®åæãããã°ã©ã ã°ã©ããå°éå¯èœæ§ãããã³ã°ã©ãã®å§çž®ã«åœ¹ç«ã¡ãŸãã
ãã®ã¢ã«ãŽãªãºã ã¯ãæ·±ãåªå æ€çŽ¢ã®æ§é çç¹æ§ã䜿çšããŸããå ã®ã°ã©ãã®çµäºæéã«ããã転眮ãããã°ã©ããæ¢çŽ¢ããããã®å®å šãªé åºãç¹å®ãããŸãããã¹ãŠã®ãšããžãå転ãããšãã³ã³ããŒãã³ãéã®ãœãŒã¹ãšã·ã³ã¯ã®é¢ä¿ã亀æããããããé ç¹ãæ£ããé åºã§åŠçãããå Žåã1 åã®æ€çŽ¢ãå²ãåœãŠãããŠããªãã³ã³ããŒãã³ãã«æŒããããšã¯ãããŸããã
2 ãã¹ ã¢ã«ãŽãªãºã ã¯ã©ã®ããã«æ©èœããŸãã?
- 蚪åã»ãããšç©ºã®çé ãªã¹ããäœæããŸãã
- å ã®ã°ã©ãå ã®æªèšªåã®é ç¹ãã¹ãŠããæ·±ãåªå æ€çŽ¢ãå®è¡ããŸãã
- ãã¹ãŠã®çºä¿¡é£æ¥é ç¹ãçµäºããåŸã«ãåé ç¹ã远å ããŸãã
- ãã¹ãŠã®æåãšããžãå転ããŠè»¢çœ®ãæ§ç¯ããŸãã
- èšªåæžã¿ã»ãããã¯ãªã¢ããŸãã
- éã®çµäºé åºã§é ç¹ãåŠçããŸãã
- 転眮ã°ã©ãå ã®å DFS ããªãŒã¯ã1 ã€ã®åŒ·ãæ¥ç¶ãããã³ã³ããŒãã³ãã§ãã
æåã® DFS åŒã³åºããè¿ããããšãã«ãé ç¹ãã¹ã¿ãã¯ã«ä¿åã§ããŸããã¹ã¿ãã¯ãããããããšãèªç¶ã«çµäºæéãççž®ãããŸããã°ã©ããåæãããŠããå¯èœæ§ããããããäž¡æ¹ã®å€åŽã®ã«ãŒãã¯é ç¹ 0 ã®ã¿ããéå§ããã®ã§ã¯ãªãããã¹ãŠã®é ç¹ãèæ ®ããå¿ èŠããããŸãã
çµäºé åºãé転ãããš SCC ãèŠã€ããã®ã¯ãªãã§ãã?
ãã¹ãŠã® SCC ã 1 ã€ã®ããŒãã«å§çž®ããããšãæ³åããŠãã ãããçµæãšããŠåŸãããåçž®ã°ã©ãã«ã¯æåãµã€ã¯ã«ããããŸãããæåã® DFS ã§ã¯ãé¢é£ããçµäºæéãæãé ãã³ã³ããŒãã³ããããã®åçž®ãããæ§é å ã®ãœãŒã¹ã®ããã«åäœããŸããã°ã©ãã転眮ããåŸããã®ã³ã³ããŒãã³ãã¯ã·ã³ã¯ã®ããã«åäœãããããããã§éå§ããã DFS ã¯å éšã«æ®ããŸãã
ãã®ã³ã³ããŒãã³ããåé€ãããšãæ¬¡ã®æªå²ãåœãŠã³ã³ããŒãã³ãã®åãåŒæ°ãæããã«ãªããŸããããã¯é¢æ¥å®ãéåžžæãã§ãã蚌æã®ã¢ã€ãã¢ã§ããçµäºé åºã«ãã£ãŠã³ã³ããŒãã³ããå®å šã«éžæããã転眮ã«ãã£ãŠ 2 çªç®ã®ãã¹ãééã£ãåºåå¢çãè¶ããã®ã鲿¢ãããŸããé·ãæ£åŒãªèšŒæãåçŸããå¿ èŠã¯ãããŸããããäž¡æ¹ã®åœ¹å²ã説æããå¿ èŠããããŸãã
æéãšç©ºéã®è€éãã¯äœã§ãã?
åæ·±ãåªå æ€çŽ¢ãã¹ã§ã¯ããã¹ãŠã®é ç¹ã蚪åãããã¹ãŠã®ãšããžã 1 忀æ»ããŸãããŸããè»¢çœ®ã®æ§ç¯ã«ãçŽç·çãªæéãããããŸãããããã£ãŠãåèšæé㯠O(V + E) ãšãªããŸããã°ã©ããšè»¢çœ®ã®äž¡æ¹ã®é£æ¥ãªã¹ãã䜿çšãããšãã¹ãã¬ãŒãžã¯ O(V + E) ã«ã蚪åç¶æ ãçµäºé åºãååž°ãŸãã¯æç€ºçãªã¹ã¿ãã¯çšã« O(V) ãå ããŸãã
| ãã§ãŒãº | æé | 远å ã®ç®ç |
|---|---|---|
| åããŠã®DFS | O(V + E) | çé ãèšé² |
| 移調 | O(V + E) | ãšããžæ¹åãéã«ãã |
| 2çªç®ã®DFS | O(V + E) | ã³ã³ããŒãã³ããåéãã |
| åèš | O(V + E) | ã°ã©ã衚çŸã®ç·åœ¢ |
éåžžã«æ·±ãã°ã©ãã®å Žåãååž°ç DFS ã¯èšèªã®åŒã³åºãã¹ã¿ãã¯å¶éãè¶ ããå¯èœæ§ããããŸããå埩ã¹ã¿ãã¯ã«ã€ããŠèšåãããšã挞è¿éçã倿Žããã«æ¬çªç°å¢ãèªèããŠããããšãããããŸãã

颿¥ã®ããã«ç¥ã£ãŠããã¹ãç䌌ã³ãŒãã¯äœã§ãã?
``ããã¹ã çµäºé åº = [] èšªåæžã¿ = set()
ã°ã©ãã®é ç¹ã®å Žå: é ç¹ã蚪åãããŠããªãå Žå: dfs_finish(é ç¹ãã°ã©ããèšªåæžã¿ãfinish_order)
transpose = reverse_all_edges(ã°ã©ã) èšªåæžã¿.clear() ã³ã³ããŒãã³ã = []
éæ¹åã®é ç¹ã®å Žå(finish_order): é ç¹ã蚪åãããŠããªãå Žå: ã³ã³ããŒãã³ã = [] dfs_collect(é ç¹ã転眮ãèšªåæžã¿ãã³ã³ããŒãã³ã) ã³ã³ããŒãã³ã.远å (ã³ã³ããŒãã³ã) ãã
dfs_finish ã§ãè¿åã蚪åããåŸã«é ç¹ã远å ããŸãã dfs_collectã§ã¯ãé ç¹ãèŠã€ãã£ãã远å ããŸããããã 2 ã€ã®è²¬ä»»ã¯åããŠãããŠãã ãããæåã®ãã¹ã§ preorder ã䜿çšããããšã¯ãããããšã©ãŒã§ãã
ã³ãµã©ãžã¥ã®å®è£ ãå£ãäžè¬çãªééãã¯ã©ãã§ãã?
æãäžè¬çãªééãã¯ãçµäºé åºã§ã¯ãªãæ€åºé åºãèšé²ããã2 çªç®ã®ãã¹ã®é åºãéã«ããã®ãå¿ãããäžéšã®ãšããžã®ã¿ãå転ãããèšªåæžã¿ã®ç¶æ ãã¯ãªã¢ããã«åå©çšãããå€ç«ãŸãã¯åæãããé ç¹ãã¹ããããããªã©ã§ãããã 1 ã€ã®ééãã¯ãç¡åã°ã©ãã SCC ãåãããã«æå³ããããã®ããã«æ±ãããšã§ããæ¥ç¶ãããã³ã³ããŒãã³ãã¯ãããåçŽãªæŠå¿µã§ãã
åäžã®é ç¹ãå€ç«ããé ç¹ã1 ã€ã®æåãµã€ã¯ã«ãäžæ¹åãã§ãŒã³ã1 ã€ã®ãšããžã§çµåããã 2 ã€ã®ãµã€ã¯ã«ãèªå·±ã«ãŒããããã³åæãããã°ã©ãããã¹ãããŸããæå¹ãª DFS èµ°æ»é åºãç°ãªããšãã³ã³ããŒãã³ããŸãã¯é ç¹ã®ãªã¹ããç°ãªãå¯èœæ§ããããããã³ã³ããŒãã³ãã®åºåé åºã«äŸåããã®ã§ã¯ãªããããŒãã£ã·ã§ã³ãæ€èšŒããŠãã ããã
ã³ãµã©ãžã¥ã¯ Tarjan ã®ã¢ã«ãŽãªãºã ãšã©ãæ¯èŒããŸãã?
ã©ã¡ãã®ã¢ã«ãŽãªãºã ã O(V + E) ã§ SCC ãèŠã€ããŸãã Kosaraju 㯠2 ã€ã® DFS ãã¹ã䜿çšããéåžžã¯è»¢çœ®ãããã°ã©ããä¿åãããããæšè«ãšå®è£ ãç°¡åã«ãªããŸãã Tarjan ã¯ãæ€åºã€ã³ããã¯ã¹ãäœãªã³ã¯å€ãããã³ã¹ã¿ãã¯ãåãã 1 ã€ã® DFS ã䜿çšããŸããæç€ºçãªè»¢çœ®ãåé¿ããŸãããããå€ãã®ç¶æ ãæ£ããç¶æã§ããŸãã
颿¥ã§ã¯ãå¶çŽãããå Žåãé€ãã説æããŠç¢ºå®ã«å®è£ ã§ããã¢ã«ãŽãªãºã ãéžæããŠãã ããã颿¥å®ã 1 åã®ãã¹ãŸãã¯ç§»èª¿ãªããèŠæ±ããå Žåã¯ãTarjan ã®æ¹ãé©ããŠããå¯èœæ§ããããŸããæç¢ºããšçŽæ¥çãªèšŒæãåªå ãããå Žåã¯ãå€ãã®å ŽåãKosaraju ãåªããéžæè¢ãšãªããŸãã
AI ã¯ã°ã©ã ã¢ã«ãŽãªãºã ã®å®è·µã責任ãæã£ãŠãµããŒãããã«ã¯ã©ãããã°ããã§ãã?
AI ã¯ãå°ããªåäŸãçæããDFS ç¶æ ããã¬ãŒã¹ããå®è£ ãæ¯èŒããè€éãã®èª¬æã«ç°è°ãå±ããããšãã§ããŸããã³ãŒãã£ã³ã°æ¯æŽã¯é åºä»ãã蚪åç¶æ ã®ãã°ãèŠã€ããã®ã«åœ¹ç«ã¡ãŸããããã©ã³ã¹ã¯ãªããã®ã¬ãã¥ãŒã¯èšŒæã®ã¢ã€ãã¢ãæç¢ºã«èª¬æãããã©ããã瀺ãããšãã§ããŸãã
åžžã«å°ãªããšã 1 ã€ã®ã°ã©ããèªåã§æç»ããã³ãã¬ãŒã¹ãããã¹ããå®è¡ããŠãçæãããã¯ã¬ãŒã ãæ€èšŒããŠãã ãããè©äŸ¡ã«ãŒã«ã«åŸããçŠæ¢ãããŠããæ¯æŽã䜿çšããªãã§ãã ããã YesToTheOffer ã¯ãã³ãŒãã£ã³ã°ã®æºåãèš±å¯ããããªã¢ã«ã¿ã€ã æšè«ãå人çãªã¡ã¢ãããã³é¢æ¥åŸã®ã¬ãã¥ãŒããµããŒãããŸãã
ãããã質å
FAQ
ã³ãµã©ãžã¥ã®ã¢ã«ãŽãªãºã ã¯äœã«äœ¿çšãããŸãã?
Kosaraju ã®ã¢ã«ãŽãªãºã ã¯ãæåã°ã©ãå ã®åŒ·ãæ¥ç¶ãããã³ã³ããŒãã³ããèŠã€ããŸãã SCC ã¯ãåã³ã³ããŒãã³ãã 1 ã€ã®ããŒãã«çž®å°ããŠæåéå·¡åå§çž®ã°ã©ããçæã§ãããããå°éå¯èœæ§ãšäŸåé¢ä¿ã®æ§é ãç°¡çŽ åããã®ã«åœ¹ç«ã¡ãŸãã
ãªã Kosaraju ã®ã¢ã«ãŽãªãºã ã«ã¯ 2 ã€ã® DFS ãã¹ãå¿ èŠãªã®ã§ãããã?
æåã®ãã¹ã§ã¯ãæ¬¡ã«æ¢çŽ¢ããŠãå®å šãªã³ã³ããŒãã³ããç¹å®ããçµäºæéã®é åºãèšç®ããŸãã 2 çªç®ã®ãã¹ã¯ã転眮ãããã°ã©ãäžã§å®è¡ãããŸããããã§ã¯ããšããžãå転ãããŠãããããæ€çŽ¢ãå¥ã®æªå²ãåœãŠã³ã³ããŒãã³ãã«ãšã¹ã±ãŒããããã®ãé²ããŸãã
ã³ãµã©ãžã¥ã®ã¢ã«ãŽãªãºã ã®è€éãã¯ã©ããããã§ãã?
æéèšç®é㯠O(V + E) ã§ãã飿¥ãªã¹ã ã°ã©ãã§ã¯ã2 ã€ã® DFS ãã¹ãšãšããžå転ãããããç·åœ¢ã§ããå ã®ã°ã©ããšè»¢çœ®ãããã°ã©ãã®ä¿åããã飿¥ãªã¹ãã¯ã远å ã® O(V) ãã©ããŒãµã«ç¶æ ãšãšãã« O(V + E) ã¹ããŒã¹ã䜿çšããŸãã
ã³ã³ããŒãã³ãã®åºåé åºã¯éèŠã§ãã?
éåžžã¯ãããã飿¥é¢ä¿ã®é åºãç°ãªããšãåãæå¹ãªããŒãã£ã·ã§ã³ãäœæããªãããDFS ãã©ããŒãµã«ãšé ç¹ãŸãã¯ã³ã³ããŒãã³ãã®é åºã倿Žãããå¯èœæ§ããããŸããåé¡ã§æç€ºçã«ç¹å®ã®é åºä»ããå¿ èŠãªå Žåãé€ãããã¹ãã§ã¯ã³ã³ããŒãã³ãã®ã¡ã³ããŒã·ãããã»ãããšããŠæ¯èŒããå¿ èŠããããŸãã
Tarjan ã®ã¢ã«ãŽãªãºã 㯠Kosaraju ã®ã¢ã«ãŽãªãºã ããåªããŠããŸãã?
ã©ã¡ããäžè¬çã«åªããŠãããšããããã§ã¯ãããŸãããã©ã¡ãã O(V + E) ã§å®è¡ãããŸãã Tarjan 㯠1 ã€ã® DFS ã䜿çšããæç€ºçãªè»¢çœ®ã¯äœ¿çšããŸããããäœãªã³ã¯ç¶æ ãç¶æããŸãã Kosaraju ã¯æŠå¿µçã«åçŽãª 2 ã€ã®ãã¹ã䜿çšããéåžžã¯å転ããã°ã©ããä¿åããŸããå¶çŽãšå®è£ ã®ä¿¡é Œæ§ã«åºã¥ããŠéžæããŠãã ããã
ç·Žç¿ãåçŸå¯èœãªã·ã¹ãã ã«å€ãã
蚌æ ã«åºã¥ããç·Žç¿èšç»ãç«ãŠãèš±å¯ãããŠããå Žåã¯è²¬ä»»ãããµããŒããå©çšããæ°é®®ãªãã¡ã«äŒè©±ãèŠçŽããŸãã
å®è·µãå埩å¯èœãªã·ã¹ãã ã«å€ãã
ç¬èªã®èšŒæ ãçšæããŠããã¹ãŠã®åçãããæç¢ºãªã³ã³ããã¹ãã§ç¢ºèªããŸãã
YesToTheOffer ã詊ããŠãã ãã