ã°ãã°ãã®éåã·ã¹ãã
äœããã®çç±ã§ã2ã€ã®ã¯ãšãªã§nç¹ã®ã»ããããµããŒãããå¿ èŠããããšæ³åããŠãã ãããUnionïŒxãyïŒã¯ç¹xãšyããšããžã§æ¥ç¶ããIsConnectedïŒxãyïŒã¯ç¹xãšyããã§ãã¯ããŸãã xãããšããžã«æ²¿ã£ãŠyã«æž¡ãããšã¯å¯èœã§ããïŒ ãã®ãããªåé¡ã解決ããæ¹æ³ã¯ïŒ
ãŸãããã€ã³ãã«ã€ããŠã§ã¯ãªããæ¥ç¶ãããã³ã³ããŒãã³ãã«ã€ããŠèããããšãè³¢æã§ãã æ¥ç¶ãããã³ã³ããŒãã³ãã¯ãåãã€ã³ãããåãã»ããã®ãšããžãçžäºã«ééã§ãããã€ã³ãã®ã»ããã§ãã UnionïŒxãyïŒã¯ãxãšyãå«ãã³ã³ããŒãã³ãã®ãŠããªã³ã§ãïŒåãã³ã³ããŒãã³ãã«ãªãå ŽåïŒãIsConnectedïŒxãyïŒã¯ãxãšyãåãã³ã³ããŒãã³ãã«ãããã©ããã確èªãããã¹ãã§ãã
第äºã«ãã©ã³ãã ã«ååŸãããç¹å®ã®éžæãããé ç¹ãåã³ã³ããŒãã³ãã§éžæãããšäŸ¿å©ã§ãã FindïŒxïŒã¯ãxãå«ãã³ã³ããŒãã³ãããéžæããé ç¹ãè¿ããŸãã FindïŒxïŒã䜿çšãããšãIsConnectedïŒxãyïŒé¢æ°ã¯FindïŒxïŒãšFindïŒyïŒã®åçŽãªæ¯èŒã«ãªããŸãïŒIsConnectedïŒxãyïŒ==ïŒFindïŒxïŒ== FindïŒyïŒïŒ Unionã䜿çšããŠ2ã€ã®ã³ã³ããŒãã³ãã1ã€ã«ããŒãžãããšã1ã€ã®ã³ã³ããŒãã³ãã§éžæãããé ç¹ã¯åžžã«1ã€ã§ãããããçµåãããã³ã³ããŒãã³ãã®1ã€ã®éžæãããé ç¹ã¯éžæãããªããªããŸãã
ãããã£ãŠãå ã®åé¡ããæœè±¡åããããäžè¬çãªå¥ã®åé¡ã®è§£æ±ºçã«éå ããŸãããUnionã䜿çšããŠçµåã§ããFindã䜿çšããŠååŸããéžæèŠçŽ ãå«ãŸãããäºãã«çŽ ãªã»ããã®ã»ããããããŸãã æ£åŒã«ã¯ãæ§é ã¯æ¬¡ã®ããã«èª¬æã§ããŸãã次ã®æäœãå«ãã·ã³ã°ã«ãã³ã»ããã®åæã»ãã{x 1 }ã{x 2 }ã...ã{x n }ããããŸãã
- UnionïŒxãyïŒã¯ãèŠçŽ xããã³yãå«ãã»ãããããŒãžããŸãã
- FindïŒxïŒã¯ãèŠçŽ xãå«ãã»ããããéžæãããèŠçŽ ãè¿ããŸãã xãšåãã»ããããyãååŸãããšãFindïŒyïŒ= FindïŒxïŒã«ãªããŸãã 2ã€ã®èŠçŽ ãåãã»ããã«ãããã©ããã確èªã§ããããã«ãæ€çŽ¢ãå¿ èŠã§ãã
ã°ãã°ãã®ã»ããã®ã·ã¹ãã ããŸãã¯ããããã®å®è£ ã¯ãåŸã§èª¬æããŸãããã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®ofææã«çºæãããŸããã ãã®æ§é ã¯ãUnion-FindãšåŒã°ããããšããããŸãã äºãã«çŽ ãªéåã®ã·ã¹ãã ã«ã¯å€ãã®çšéããããŸãïŒãããã¯æå°ã¹ã±ã«ãã³ãèŠã€ããããã®ã¯ã©ã¹ã«ã«ã¢ã«ãŽãªãºã ã§äžå¿çãªåœ¹å²ãæãããããããããããŒã¿ãŒããªãŒïŒã³ãŒãåæã®èªç¶ãªãã®ïŒã®æ§ç¯ã«äœ¿çšãããã°ã©ãå ã®æ¥ç¶ãããã³ã³ããŒãã³ããç°¡åã«ãã©ããŸãã ãã®èšäºã«ã¯çŽ éåã»ããã®æ§é ã®å®è£ ã®ç°¡åãªèª¬æãå«ãŸããŠããŸããããããã®æ§é ã®é©çšãšå®è£ ã®è©³çŽ°ã«ã€ããŠã¯ã ãããšããã·ã ã»ã€ã¯ããã§ãã§ã«åŒçšãããŠãããœãŒã¹ãèªãæ¹ãè¯ããšããã«èšããªããã°ãªããŸããã ããããã°ãã°ãã®éåã®ã·ã¹ãã ã®åäœæéã®ç°åžžãªæšå®å€ãã©ã®ããã«ååŸãããããç¥ãããšã¯ãç§ã«ãšã£ãŠåžžã«èå³æ·±ãããšã§ããã ãããã£ãŠããã®èšäºã®äž»ãªç®æšã¯ãUnion-Findæ§é ã®æå¹æ§ãçè«çã«æ£åœåããããšã§ãã
Union-Findæäœã§ã»ãããå®è£ ããæ¹æ³ã¯ïŒ æåã«æãæµ®ãã¶ã®ã¯ãã»ãããæåæšã®åœ¢ã§ä¿åããããšã§ãïŒå³ãåç §ïŒã ãã¹ãŠã®æšã¯å€æ°ã§ãã ã»ããã®åŒ·èª¿è¡šç€ºãããèŠçŽ ïŒFindé¢æ°ãè¿ãèŠçŽ ïŒã¯ãããªãŒã®ã«ãŒãã§ãã ããªãŒãããŒãžããã«ã¯ãããããªãŒã®ã«ãŒããå¥ã®ããªãŒã«ã¢ã¿ããããã ãã§ãã
FindïŒxïŒã¯ãxããã«ãŒãã«å°éãããŸã§ç¢å°ã®æ¹åã«åçŽã«äžæããã«ãŒããè¿ããŸãã ãããããã¹ãŠããã®ãŸãŸã«ããŠãããšãFindãå€ãã®æéãè²»ãããæªããããªãŒïŒé·ãããã§ãŒã³ããªã©ïŒãç°¡åã«ååŸã§ããŸãã ã€ãŸãããèã®é«ããæšã¯ç§ãã¡ãå¿ èŠãšããŸããã
é ç¹x ã®é«ãã¯ããªãŒãããxãŸã§ã®æ倧ãã¹é·ã§ãã ããšãã°ãäžã®å³ã§ã¯ãé«ãy-2ãx-1ãz-0ã§ããå°ãèããã°ãåé ç¹ã«é«ããèšå®ã§ããŸãã ãããã®é«ããã©ã³ã¯ãšåŒã³ãŸãïŒå°æ¥çã«ã¯ããããã®ããšã¯é«ããšã¯äºæ³ãããŠããŸãããå°æ¥ãããªãŒãåæ§ç¯ãããã©ã³ã¯ãé«ãã«æ£ç¢ºã«å¯Ÿå¿ããªããªãããã§ãïŒã ããã§ã2ã€ã®ããªãŒãçµåããããšãäžäœã®ããªãŒãäžäœã®ããªãŒã«åºå®ãããŸãïŒäžå³ãåç §ïŒã
å®çŸããŸããïŒ æ¬¡ã®ããã«èŠçŽ ããŒããå®çŸ©ããŸãã
struct elem { elem *link; // int rank; // double value; //- };
æåã¯ãåèŠçŽ xã«ã€ããŠãx.link = 0ããã³x.rank = 0ã§ãã ãŠããªã³é¢æ°ãšäºåé¢æ°ã®Findé¢æ°ããã§ã«äœæã§ããŸãã
void Union(elem *x, elem *y) { x = Find(x); y = Find(y); if (x != y) { if (x->rank == y->rank) y->rank++; else if (x->rank > y->rank) swap(x, y); x->link = y; } } elem *Find(elem *x) // Find { return x->link ? Find(x->link) : x; }
ãã®ãããªå®è£ ã§ããããã§ã«éåžžã«å¹æçã§ãã ãããèŠãããã«ãããã€ãã®ç°¡åãªè£é¡ã蚌æããŸãã
è£é¡1.ã©ã³ã¯æé©åã«ããUnion-Findå®è£ ã§ã¯ãã«ãŒãxãæã€åããªãŒã«ã¯ãâ¥2x- >ã©ã³ã¯é ç¹ãå«ãŸããŸãã
蚌æã 1ã€ã®é ç¹xã§æ§æãããããªãŒã®å Žåãx-> rank = 0ã§ãããè£é¡ã®äž»åŒµãæãç«ã€ããšã¯æããã§ãã Unionããè£é¡ã®èšè¿°ãçã§ããæ ¹xãšyã§æšãçµåãããŸãã ã«ãŒãxãšyãæã€ããªãŒã«ã¯ãããããâ¥2x- >ã©ã³ã¯ãšâ¥2y- >ã©ã³ã¯ã®é ç¹ãå«ãŸããŸãã xãyã«çµåããyã®ã©ã³ã¯ãäžãããšåé¡ãçºçããå ŽåããããŸãã ããããããã¯x->ã©ã³ã¯== y->ã©ã³ã¯ã®å Žåã«ã®ã¿èµ·ãããŸãã çµååã®yã®ã©ã³ã¯ãrãšããŸãã ãããã£ãŠãã«ãŒãyãæã€æ°ããããªãŒã«ã¯ãâ¥2x- >ã©ã³ã¯ + 2 r = 2 2 r = 2 r + 1ã®é ç¹ãå«ãŸããŸãã ãããŠãããã¯èšŒæããããã«å¿ èŠã§ããã
è£é¡2.ã©ã³ã¯æé©åã䜿çšããUnion-Findã§ã¯ãåé ç¹xã®ã©ã³ã¯ã¯ãã«ãŒããxã«ããããªãŒã®é«ãã«çãããªããŸãã
蚌æã ã¢ã«ãŽãªãºã ãæ©èœãå§ããã°ããã§ããã¹ãŠã®ã»ãããã·ã³ã°ã«ãã³ã§ããå Žåãåé ç¹x->ã©ã³ã¯= 0ãããã¯ééããªãé«ãã§ãã Unionã2ã€ã®ããªãŒãã«ãŒãxããã³yãšçµã¿åããããããã®ããªãŒã®é«ãã察å¿ããã©ã³ã¯x->ã©ã³ã¯ããã³y->ã©ã³ã¯ãšæ£ç¢ºã«çãããªãããã«ããŸãã çµåã®åŸã§ããã©ã³ã¯ã¯é«ãã«çããããšã瀺ããŠããŸãã x->ã©ã³ã¯<y->ã©ã³ã¯ã®å Žåãxã¯yã«ããã¯ãããæããã«ãã«ãŒãyãæã€ããªãŒã®é«ãã¯å€åããŸããã Unionã¯y->ã©ã³ã¯ãå®éã«å€æŽããŸããã x-> rank> y-> rankã®å Žåãåæ§ã§ãã x-> rank == y-> rankã®å Žåãxãyã«ã¢ã¿ãããããšãé«ãyã1å¢å ããŸãã Unionã¯y->ã©ã³ã¯ã1ã ãå¢ãããŸãã å¿ èŠã§ããã
è£é¡1ãããé ç¹ã®ã©ã³ã¯ã¯log nïŒ2ãåºãšãããã¹ãŠã®å¯Ÿæ°ãæã£ãŠããŸãïŒãã倧ããããããšã¯ã§ããŸãããããã§ãnã¯èŠçŽ ã®æ°ã瀺ããŸãã ãŸããè£é¡2ãããããªãŒã®é«ãã¯log nãè¶ ããªãããšãããããŸãã ãããã£ãŠãåæ€çŽ¢æäœã¯OïŒlog nïŒã§å®è¡ãããŸãã ãããã£ãŠãmåã®Union-Findæäœã¯OïŒm log nïŒã§å®è¡ãããŸãã
ããã«å¹ççã§ããïŒ 2çªç®ã®æé©åãå©ãã«ãªããŸãã Findããã·ãŒãžã£ã§ã¢ã»ã³ããå®è¡ããå ŽåãåçŽã«ãã¹ãŠã®é ç¹ãã«ãŒãã«ãªãã€ã¬ã¯ãããŸãïŒå³ãåç §ïŒã 確ãã«æªåããããšã¯ãããŸããã ããããã¯ããã«åªããŠããããšãããããŸããã
elem * Find(elem *x) { return x->link ? (x->link = Find(x->link)) : x; }
ãããã£ãŠãnåã®èŠçŽ ã«å¯Ÿããmåã®Unionããã³Findæäœã®ã·ãŒã±ã³ã¹ãããããããæ©èœããæéãæšå®ããå¿ èŠããããŸãã OïŒm log nïŒã§ããããïŒ ãŸãã¯OïŒm log log nïŒïŒ ãããšãOïŒmïŒã§ããïŒ
çŽæçã«ã¯ã2çªç®ã®æé©åã®ã¢ã«ãŽãªãºã ãããå¹ççã§ãããšæãããŸãã ããã¯ããã§ãããããã蚌æããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã å°ãåæãããšãã¢ã«ãŽãªãºã ã¯ç·åœ¢ã§ãããšä»®å®ã§ããŸãã Unionããã³Find shuffleã®måã®æäœã®ã·ãŒã±ã³ã¹ã¯OïŒmïŒã§å®è¡ãããŸãã ããããã©ããªæ¹æ³ãè©ŠããŠããããã§ã¯ãªãã®ã§ããããå³å¯ã«èšŒæããããšã¯ã§ããŸããã æ£ç¢ºãªäžéãšäžéã®æåã®å®å šãªèšŒæã¯1975幎ã«Taryanã«ãã£ãŠäžãããããã®å¢çã¯ãã»ãŒãOïŒmïŒã§ããããæ®å¿µãªããOïŒmïŒã§ã¯ãããŸããã§ããã ãã®åŸãååãšããŠOïŒmïŒãåŸãããšãäžå¯èœã§ããããšã蚌æãããç 究ãç¶ããã æ£çŽãªãšãããç§ã¯ãã¹ãŠãç解ããããšãã§ããŸããã§ããã Union-FindãOïŒmïŒããé ãããšã瀺ãåäŸã§ãããç解ããã®ã¯éåžžã«å°é£ã§ãã ããã幞ããªããšã«ã2005幎ããµã€ãã«ãšã·ã£ãªãŒã«ã¯äžéã®æ°ãããç解å¯èœãªã蚌æ ãåãåããŸããã 圌ãã®èšäºã¯ããã¹å§çž®ã®ãããããŠã³åæããšåŒã°ããŠããŸãã ããã§çŽ¹ä»ããã®ã¯ãå°ãç°¡ç¥åããã圢åŒã®çµæã§ãã äžéã®ãç解å¯èœãªã蚌æ ãèŠã€ããããšã¯ãæªè§£æ±ºã®åé¡ãšèŠãªãããšãã§ããŸãã
OïŒmïŒãšäžç·ã«æé·ããŠããªãã®ã¯ãšãŠãæªãã§ããïŒ å®éãTaryanã«ãã£ãŠååŸããããã»ãŒãOïŒmïŒã¯ãèãããããã¹ãŠã®å ¥åããŒã¿ã®OïŒmïŒãšåºå¥ã§ããªããããããã¯çŽç²ã«çè«çã«èå³æ·±ããã®ã§ãïŒããã«æããã«ãªããŸãïŒã ãããOïŒmïŒã§ã¯ãªããšãã蚌æ ã¯ãªãããšãç§ã¯ããã«èšããªããã°ãªããŸããïŒç§ã¯ãããèªåã§ãŸã£ããç解ããŠããŸããïŒãããã§ãããªãã¯ãŸã å°ãã§ããããã«æãããããããŸãã...ããããã§ããŸããã å°ãªããšããããã€ãã®è©Šã¿ã倱æããã«ãããããããé倧ãªãšã©ãŒã¯Taryanã®äœåãšäžé£ã®é¢é£äœåã«èŠã€ãããŸããã§ããã èè ãUnion-Find Problem is Linearãã®èšäºã§ããç¥ãããŠããè©Šã¿ã¯ã誀ã£ãåŒçšã§ããããã®è«æã«ã¯èª€ãããããæ€åãããŸããã Citeseerããåé€ããã ãã§ãã ãããé€ãã°ãç§ã¯ãã®ãèšæ£ããæåºããŠããŸãã
æãæãæ
ãã»ãŒãOïŒmïŒãäžããé¢æ°ã¯ã©ã®ãããªé¢æ°ã§ããïŒ ãã¹ãŠã®n> 1ã«å¯ŸããŠfïŒnïŒ<nã§ããããfïŒnïŒã¯ç¡é倧ã«ãªãåŸåããããããªé¢æ°fãèããŸãã é¢æ°fã¯ãã£ãããšæé·ããŸããã°ã©ãå šäœãé¢æ°gïŒnïŒ= nã®ã°ã©ãã®äžã«ãããŸãã ã¹ããŒé¢æ°fããã¹ãŒããŒã¹ããŒé¢æ°f *ãäœæããå埩æŒç®å*ãå®çŸ©ããŸã ã
f * ïŒnïŒ= min {kïŒfïŒfïŒ... fïŒnïŒïŒïŒ<2ãããã§fã¯kåååŸãããŸã}
ã€ãŸããf * ïŒnïŒã¯ãæäœfïŒnïŒ> fïŒfïŒnïŒïŒ> fïŒfïŒfïŒnïŒïŒïŒ> ...ã«ãã£ãŠæ°nãå§çž®ããå¿ èŠãããåæ°ã瀺ãã2æªæºã®å®æ°ãååŸããŸãã
å¿«é©ã«ããããã®ããã€ãã®äŸã fïŒnïŒ= n-2ã®å Žåãf * ïŒnïŒ= [n / 2]ïŒ2ã§å²ã£ãæŽæ°éšåïŒã fïŒnïŒ= n / 2ã®å Žåãf * ïŒnïŒ= [log n]ïŒ2é²å¯Ÿæ°ã®æŽæ°éšåïŒã fïŒnïŒ= log nã®å Žåãf * ïŒnïŒ= log * nãšã¯äœã§ããïŒ log * né¢æ°ã¯ã å埩察æ°ãšåŒã°ããŸãã çŽã«å°ãèµ°ãæžãããŠãlog * n = OïŒlog log nïŒãlog * n = OïŒlog log log nïŒãããã³äžè¬çã«log * n = OïŒlog log ... log nïŒã§ããããšã蚌æã§ããŸããã°ã å埩察æ°ãã©ãã»ã©é ãããæ³åããã«ã¯ãå€log * 2 65536 = 5ãèŠãŠãã ããã
以äžã§ã¯ãmåã®Union-Findæäœã®å®è¡æéã¯OïŒm log * nïŒãšããŠæšå®ã§ããããã«æšå®OïŒm log ** nïŒãOïŒm log *** nïŒããã³åæ§ã«ã以äžã§å®çŸ©ãããããå¶éé¢æ°OïŒmαïŒmãnïŒïŒãŸã§ã äžè¬ã«ãçŸä»£ã®å®çšçãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãOïŒm log log nïŒã¯OïŒmïŒãšã»ãšãã©åºå¥ã§ããŸããã ãããŠãOïŒm log * nïŒã¯äžè¬ã«OïŒmïŒãšåºå¥ã§ããŸãããã€ãŸããOïŒm log ** nïŒãªã©ã«ã€ããŠåºå¥ã§ããŸããã ããã§ããã»ãŒãOïŒmïŒã«ã€ããŠè©±ããŠããçç±ãæ³åã§ããŸãã
ã°ã¬ãŒãOïŒm log * nïŒ
OïŒm log * nïŒã®æšå®å€ãååŸããããšã¯ã蚌æã®éèŠãªéšåã§ãã ãã®åŸãã»ãŒããã«æ£ç¢ºãªæšå®å€ãååŸãããŸãã ç°¡åã«ããããã«ãåãã«è¶³ããªãä»®å®ã1ã€äœæããŸããmâ¥nã§ãã
æšè«ã®äžè¬æ§ãå¶éããããšãªããUnionæäœã¯åžžã«éåã®ãã«ãŒãããã€ãŸãã Unionã¯ãUnionïŒFindïŒxïŒãFindïŒyïŒïŒã®ããã«åŒã³åºãããŸãã ãã®åŸãOã§Unionãå®è¡ãããŸãïŒ1ïŒã UnionïŒxãyïŒã¯ãŸãFindïŒxïŒãšFindïŒyïŒãåŒã³åºãã ããªã®ã§ããã®å¶éã¯ããèªç¶ã§ãã ãããã£ãŠãåæã§ã¯ãæ€çŽ¢æäœã®ã¿ã«é¢å¿ããããŸãã
åŒãç¶ãç°¡çŽ åããŸãã æ€çŽ¢æäœããŸã£ããå®è¡ãããããŠãŒã¶ãŒãäœããã®åœ¢ã§ã»ããã®ã«ãŒããã©ãã«ããããæšæž¬ãããšæ³åããŠãã ããã äžé£ã®çµåããã©ã¬ã¹ãFãæ§ç¯ããŸãïŒãã©ã¬ã¹ãã¯å€ãã®æšã§ãïŒã Fã®è£é¡2ã«ãããåé ç¹xã®ã©ã³ã¯ã¯ãxãã«ãŒããšãããµãããªãŒã®é«ãã§ãã ãããã£ãŠãåé ç¹ã®ã©ã³ã¯ã¯ããã®é ç¹ã®èŠªã®ã©ã³ã¯ãããäœããªããŸãã ç§ãã¡ã«ãšã£ãŠããã®èŠ³å¯ã¯éèŠã§ãã
Findsã®ã·ãŒã±ã³ã¹ãã·ã¹ãã ã«è¿ããŸãããã æåã®æ€çŽ¢ãFã®ãã¹ã«æ²¿ã£ãŠå®è¡ãããF ã®ãã¹ãå§çž®ããæäœãå®è¡ãããšæ³åã§ããŸãããã¹ã®åé ç¹ã¯ããã¹ã®ãããããã®é ç¹ã®åå«ã«ãªããŸãïŒå³ãåç §ïŒã ããã«ããã¹ã®å é ã¯å¿ ãããFã®ã«ãŒãã§ã¯ãããŸãããã€ãŸããããæå³ã§ããã¹ãŠã®Unionãäºåã«å®è¡ããããã©ã¬ã¹ãFã§ã¯ãFindã«å¯Ÿå¿ãããã¹å§çž®ãã¢ã«ãŽãªãºã ã®éåžžã®éçšã§å®è¡ãããããšã«åæããŸãã 次ã«ã2çªç®ã®æ€çŽ¢ã¯ãå€æŽããããã©ã¬ã¹ãã«æ¢ã«ãããã¹ã«æ²¿ã£ãŠå®è¡ããïŒå ã®ãã©ã¬ã¹ãFã§ã¯ããã®ãã¹ã¯ãŸã£ããååšããªãå ŽåããããŸãïŒãåã³ãã¹ãå§çž®ããŸãã ãªã©ãªã©ã
ãã¹ã®å§çž®åŸãã©ã³ã¯ã¯å€æŽãããªãããšã«æ³šæããããšãéèŠã§ãã ãããã£ãŠãå€æŽããããã©ã¬ã¹ãã§ã¯ãã©ã³ã¯ãé«ãã«å¯Ÿå¿ããªãå¯èœæ§ããããããã©ã³ã¯ãé«ãã§ã¯ãªãã©ã³ã¯ãšåŒã³ãŸãã
ããã§ã蚌æããŠããããšãæ確ã«è¿°ã¹ãããšãã§ããŸãã ãã©ã¬ã¹ãã®ã·ãŒã±ã³ã¹F = F 1 ãF 2 ã...ãF mãšããããããã©ã¬ã¹ãF 1 ãF 2 ã...ãF mã®ãã¹P 1 ãP 2 ã...ãP mã®å§çž®ã®ã·ãŒã±ã³ã¹ããããŸãã ãã©ã¬ã¹ãF 1ã®ãã¹P 1ã®å§çž®ã¯ãã©ã¬ã¹ãF 2ãåãåããF 2ã®ãã¹P 2ã®å§çž®ã¯F 3ãåãåããŸãã ïŒããã«ãããšãã°ããã¹P kã¯ãã©ã¬ã¹ãFã«ãŸã ååšããããã¹P 1 ãP 2 ã...ãP k-1ãå§çž®ãããåŸã«ã®ã¿åºçŸããå¯èœæ§ããããŸãïŒãã¹é·P 1 ãP 2 ...ã®åèšãæšå®ããå¿ èŠããããŸããP m ïŒãã¹ã®é·ãã¯ãã¹å ã®ãšããžã®æ°ã§ãïŒã å§çž®å¯èœãªãã¹ã®é·ãã¯ã察å¿ããFindã®é ç¹ããªã³ã¯ãæäœã®æ°ã«ãããªããããmåã®Findæäœã®å®è¡æéã®æšå®å€ãååŸããŸãã
å®éããã¹å§çž®ã®ãã¹ãŠã®ã·ãŒã±ã³ã¹ãUnion-Findã®äžé£ã®æäœã«å¯Ÿå¿ããããã§ã¯ãªããããå¿ èŠä»¥äžã«äžè¬çãªã¹ããŒãã¡ã³ãã蚌æããããšã«çæããŸããã ãããããããã®ãã¥ã¢ã³ã¹ã«ã¯èå³ããããŸããã
ãããã£ãŠãäžèšã«é¢é£ä»ããããæå³ã§ããã©ã¬ã¹ãFãšãã®äžã®ãã¹ã®åçž®ã®ã·ãŒã±ã³ã¹ããããŸãã ãã©ã¬ã¹ãã®ã·ãŒã±ã³ã¹F = F 1 ãF 2 ã...ãF mãšããããã®ãã¹P 1 ãP 2 ã...ãP mã®åçž®ã®ã·ãŒã±ã³ã¹ããããŸãã TïŒmãnïŒã¯ãé·ãP 1 ãP 2 ã...ãP mã®åèšãæ倧ã®å Žåãææªã®å Žåã®å§çž®å¯èœãã¹P 1 ãP 2 ã...ãP mã®é·ãã®åèšã瀺ããã®ãšããŸãã ã¿ã¹ã¯ã¯ãTïŒmãnïŒãæšå®ããããšã§ãã ããã¯çŽç²ã«çµã¿åããã®äœæ¥ã§ãããUnion-Findã®æå¹æ§ã®èªæã§ãªã蚌æ ã¯ãã¹ãŠããã®æ§é ã«äœããã®åœ¢ã§èªç¶ã«æžå°ããŸãã
å§çž®å¯èœãªãã¹ã®é·ãã®æšå®
è°è«ã®æåã®æ¬è³ªçã«éèŠãªã¹ãããã¯ãè¿œå ã®ãã©ã¡ãŒã¿ãŒã®å°å ¥ã§ãã ãã©ã¬ã¹ãFã®ã©ã³ã¯ã¯ãé ç¹Fã®ã©ã³ã¯ã®äžã§æ倧ã§ããTïŒmãnãrïŒã«ãããTïŒmãnïŒãšåæ§ã«ãææªã®å Žåã®å§çž®å¯èœãªãã¹P 1 ãP 2 ã...ãP mã®é·ãã®åèšã瀺ããŸããé·ãP 1 ãP 2 ã...ãP mã®åèšãæ倧ã§ããœãŒã¹ãã©ã¬ã¹ãã®ã©ã³ã¯ãr以äžã§ããå Žåã é ç¹ãnåãããã©ã¬ã¹ãã®ã©ã³ã¯ã¯n以äžã§ãããããTïŒmãnïŒ= TïŒmãnãnïŒã§ããããšã¯æããã§ãã ãã©ã¡ãŒã¿rã¯ããã©ã¬ã¹ãFã®æšå®åé¡ãäžèFã®ãµãã¿ã¹ã¯ã«ååž°çã«åæžããããã«å¿ èŠã§ãã
d = log rã瀺ããŸãã ãã©ã¬ã¹ãFã2ã€ã®ã°ãã°ãã®ãã©ã¬ã¹ãF +ãšF-ã«åå²ããŸãããäžéšãã©ã¬ã¹ããF +ã¯ã©ã³ã¯> dã®ããŒã¯ã§æ§æããããäžéšãã©ã¬ã¹ããF-ã¯ä»ã®ãã¹ãŠã®ããŒã¯ã§æ§æãããŸãïŒå³ãåç §ïŒã ãã®åå²ã¯ã次ã®äºå®ã«é¢é£ããUnion-Findæšå®ã®æåã®èšŒæ ã§ããæ°ã¥ãããŸããïŒäžäœãã©ã¬ã¹ãF +ã«ã¯F-ãããèããå°ãªãé ç¹ãå«ãŸããŠããããšãããããŸãã
äž»ãªã¢ã€ãã¢ã¯ãF +ã«ãããã¹å§çž®ã®é·ãã倧ãŸãã«æšå®ãïŒF +ãéåžžã«å°ãããããããè¡ãããšãã§ããŸãïŒã次ã«F-ã®ãã¹å§çž®ã®é·ããååž°çã«æšå®ããããšã§ãã ã€ãŸããéå ¬åŒã«ã¯ãååž°TïŒmãnãrïŒâ€TïŒmãnãdïŒ+ïŒF-ã«å«ãŸããªããã¹ã®é·ãïŒãå°ãåºãããšãç®æšã§ãã F +ã ãéåžžã«å°ãããããšãæå³ãããã®ã圢åŒåããããšã«ããããã®ç®æšã«åãã£ãŠåãå§ããŸãã ã§ç€ºã| F '| ä»»æã®ãã©ã¬ã¹ãã®ããŒã¯ã®æ°F 'ã
è£é¡3. F +ã ãã©ã³ã¯> dã®é ç¹Fã§æ§æããããã©ã¬ã¹ããšããŸãã ãã®åŸ| F + | <| F | / 2 d ã
蚌æã ããã€ãã®t> dãä¿®æ£ããŸãã F +ã®ã©ã³ã¯tã®é ç¹ã®æ°ãæšå®ããŠã¿ãŸãããã Fã§ã¯ãè£é¡2ã«ãããé ç¹ã®ã©ã³ã¯ã¯ãäžããããé ç¹ã«ã«ãŒããæã€ããªãŒã®é«ãã«çãããªããŸãã ãããã£ãŠãã©ã³ã¯tã®é ç¹ã®èŠªã¯å¿ ãã©ã³ã¯> tã«ãªããŸãã ãããã£ãŠãã©ã³ã¯tã®ã«ãŒããæã€ãµãããªãŒFã¯äº€å·®ããŸããïŒäžå³ãåç §ïŒã è£å©å®ç1ã«ããã©ã³ã¯tã®ã«ãŒããæã€ããªãŒã«ã¯ãâ¥2 tã®é ç¹ãå«ãŸããŸãã ãããã£ãŠãåèšã§ã©ã³ã¯tã®â€n/ 2 tã®é ç¹ãååšããŸãã d + 1ãd + 2ã...ã«æ²¿ã£ãŠtãå®è¡ãããšãF +ã®é ç¹ã®æ°ãç¡éã®åèšn / 2 d + 1 + n / 2 d + 2 + n / 2 d + 3 + ...çæ¯æ°åã®ç·èšå ¬åŒã«ããããã®ç·èšãn / 2 dã§ããããšãããããŸãã å¿ èŠã§ããã
ããããã¯ãç°¡æœã«ããããã«ãn + = | F + | ããã³n-= | F-|ã
æšè«ã«ãããéèŠãª2çªç®ã®ã¹ãããã ãã¹ã®ã»ããP 1 ãP 2 ã...ãP mã3ã€ã®ãµãã»ããã«åå²ããŸãïŒå³ãåç §ïŒã
- P + -å®å šã«F +ã«å«ãŸãããã¹ã
- P - F-ã«å®å šã«å«ãŸãããã¹ã
- P +-ã¯ãF +ãšF-ã®äž¡æ¹ããã®é ç¹ãæã€ãã¹ã§ãã
ã»ããP +-ããã®åãã¹ã¯ 2ã€ã®ãã¹ã«åå²ãããŸãïŒF +ã®äžã®ãã¹ïŒå·Šäžã®å³ã®çœãé ç¹ïŒãšF-ã®äžã®ãã¹ïŒå·Šäžã®å³ã®ç·ã®é ç¹ïŒã äžã®ãã¹ãå€æ°ã®P +ãã¹ã«é 眮ããŸããã ãã®ããã«ããŠåŸãããã»ããå ã®ãã¹ã®æ°ãm +ã§ç€ºããŸãã m + = | P + | + | P +- | ïŒãã©ã¬ã¹ãã®åæ§ã®è¡šèš| F '|ãšã¯ç°ãªãã| P |ã¯ã»ããPå ã®ãã¹ã®æ°ã瀺ãããããã®é ç¹ã®ç·æ°ã§ã¯ãããŸããïŒã m-= | P-|ã瀺ããŸãã 次ã«ïŒ
TïŒmãnãrïŒâ€TïŒm + ãn + ãrïŒ+ TïŒm-ãn-ãdïŒ+ïŒP +-ããã®ãã¹ã®äžéšã®é·ãã®åèšïŒã
P +-ãããã¹ã®äžéšã®é·ãã®åèšãæšå®ããŠã¿ãŸãããã PãP +- ïŒäžã®å³ã®ç·ã®é ç¹ïŒããã®ãã¹ã®äžéšãšããŸãã ããã1ãé€ãPã®ãã¹ãŠã®é ç¹ã«ã¯ããªã³ã¯åã«F-ããã®èŠªãããïŒãªã³ã¯1ã«ã¯å¿ ãF +ããã®èŠªããããŸãïŒããªã³ã¯åŸã¯F +ããã®èŠªããããŸãïŒäžã®å³ãåç §ïŒã ãããã£ãŠãF-ããã®åé ç¹ã¯ãP +-ããã®ãã¹ã®äžäœéšåã«1åã ãéããããšããŠåå ã§ããŸãã P +ããã®ãã¹ã®äžéšã®é·ãã®åèšã| P +- |以äžã§ããããšãããããŸãã + n-ïŒåé ã®é ç¹ã«1ã€ãããã«F-ã®åé ç¹ã«1ã€ïŒã | P +- | â€m + ã ãããã£ãŠãP +-ããã®ãã¹ã®äžéšã®é·ãã®åèšã¯ãm + + n-ãè¶ ããŸããã
éèŠãªæ³šæïŒè°è«ã§ã¯ãFã®ã©ã³ã¯ãd = log r以äžã§ããããšã¯éèŠã§ã¯ãããŸããã§ããã log rã®ä»£ããã«ãä»ã®å€ãååšããå¯èœæ§ããããŸãã ããªãããã®å Žæã«çããããããã§ãšããäžå€®è£é¡ã蚌æããã ãã§ãã
äžå€®è£é¡ã F +ãF>ããã®é ç¹ã®ãã©ã¬ã¹ããranks> dãããã³F - Fããã®ä»ã®é ç¹ã®ãã©ã¬ã¹ããšããŸããè¡šèšm + ãm-ãn + ãn- ã¯é¡æšã«ãã£ãŠå®çŸ©ãããŸãã ååž°ã¯æå¹ã§ãïŒTïŒmãnãrïŒâ€TïŒm + ãn + ãrïŒ+ TïŒm-ãn-ãdïŒ+ m + + n-ã
ãã§ã«è¿°ã¹ãããã«ãF +ãã©ã¬ã¹ãã¯éåžžã«å°ããããããã®äžã®ãã¹ã®é·ãã¯å€§ãŸããªæ¹æ³ââã§æšå®ã§ããŸãã ãã£ãŠã¿ãŸãããã æããã«ãF +ã®é·ãkã®ãã¹ã®å§çž®ã¯ãk-1é ç¹ãªã³ã¯ãå®è¡ããŸãã ã€ãŸããk-1ããŒã¯ãããªãŒããäžæãããŸãã é«ãF +ã¯rãè¶ ããªããããåé ç¹ã¯råãŸã§ããäžæã§ããŸããã ãããã£ãŠãm +ãã¹ã®å§çž®ã¯ãæ倧ã§rn +åãªã³ã¯ïŒã€ãŸããé ç¹ããç»ããïŒãå®è¡ããŸãã ãã®ããšãããF +ã®çµè·¯åçž®ã®é·ãm +ã®åèšã¯ãæ°å€rn + + m + ïŒåé ç¹äžæã«1ã€ãåçµè·¯ã®é ã«1ã€ïŒã«ãã£ãŠäžã«å¶éããããšçµè«ä»ããŸãã è£é¡3ã«ãããrn + â€rn / 2 d = rn / 2 log r = nãåŸãããŸãã ãã®çµæãTïŒm + ãn + ãrïŒâ€n + m +ãåŸãããŸãã äžå€®è£é¡ãé©çšããŠãååž°ãå°ããŸãïŒ
TïŒmãnãrïŒâ€TïŒm + ãn + ãrïŒ+ TïŒm-ãn-ãlog rïŒ+ m + + n - â€
â€n + m + + TïŒm-ãnãlog rïŒ+ m + + n =
= 2n + 2m + + TïŒm-ãnãlog rïŒã
ä»ãååž°çã«ããã©ã¬ã¹ãFã§è¡ã£ãã®ãšåãããã«ããã©ã¬ã¹ãFã§åãããã«è¡åãç¶ããŸãã ååž°ãå±éããã ãã§ãïŒ
TïŒmãnãrïŒâ€ïŒ2n + 2m + ïŒ+ TïŒm-ãnãlog rïŒâ€
â€ïŒ2n + 2m + ïŒ+ïŒ2n + 2m 0 + ïŒ+ TïŒm 0- ãnãlog log rïŒâ€
â€ïŒ2n + 2m + ïŒ+ïŒ2n + 2m 0 + ïŒ+ïŒ2n + 2m 1 + ïŒ+ TïŒm 1- ãnãlog log log rïŒâ€
â€...
ããã§ãm 0 + ãm 1 + ã...ã¯ãããŸããŸãªååž°ã¬ãã«ã§ã®m +ã«å¯Ÿå¿ããå€ã§ãã m + + m 0 + + m 1 + + ...â€mã§ããããšã¯æããã§ãïŒäžå³ãåç §ïŒã ååž°ã®æ·±ãã¯ãå®æ°ãååŸããããã«rãããããŒã°ããå¿ èŠãããåæ°ã§ãã ããããããã¯log * rã§ãïŒ çµæãšããŠãTïŒmãnãrïŒâ€2m + 2n log * rãå°ãåºããŸãã
ã¢ãã«ãŒãã³ã®éæçµãœãªã¥ãŒã·ã§ã³
調æ»çµæã詳ããèŠããšãäžè¬ã«ãlog rã®å€ã¯åŒTïŒm + ãn + ãrïŒãå±éããŠTïŒm + ãn + ãrïŒâ€n + m + ã ããã¯ãè£é¡3ãšTïŒm + ãn + ãrïŒâ€rn + + m +ã§ããããšã蚌æããçŽ æŽãªåŒæ°ã䜿çšããŠéæãããŸããã ããããåã®ã»ã¯ã·ã§ã³ã§ã¯ãTïŒm + ãn + ãrïŒâ€2m + + 2n + log * rã®ããè¯ãæšå®å€ãåŸãããŸããã ãã©ã¬ã¹ãF-ããäžãããããšã§ã¡ã€ã³ãã£ã©ã¯ã¿ãŒãåå®çŸ©ããŸããF +ã¯ãã©ã³ã¯> log * rã®ããŒã¯Fã®ãã©ã¬ã¹ãã§ãããF-ã¯ãã©ã³ã¯â€log * rã®æ®ãã®ããŒã¯ã®ãã©ã¬ã¹ãã§ãã åæ§ã«ããã©ã¡ãŒã¿m + ãm-ãn + ãn-ã決å®ããŸãã
è£é¡3ãŸã§ã«ãn + <n / 2 log * rãååŸããŸã ã F +ãã©ã¬ã¹ãã¯ãF-ã«æ¯ã¹ãŠãŸã ãå°ããããªã£ãŠããŸãïŒæåã¯çŽæã«åããããã«æããŸããïŒã åã®ã»ã¯ã·ã§ã³ã§ã¯ãTïŒm + ãn + ãrïŒâ€2m + + 2n + log * rã§ããããšã確ç«ããŸããã ãããã£ãŠãä»»æã®æŽæ°xâ¥1ã«å¯ŸããŠ2ïŒn / 2 x ïŒxâ€nã§ããããšãèæ ®ããŠãTïŒm + ãn + ãrïŒâ€2m + + 2ïŒn / 2 log * r ïŒlog * râ€ãå°åºããŸã2m + + nã ããã¯ã以åã«åŸãããæšå®å€TïŒm + ãn + ãrïŒâ€n + m +ãšã»ãŒåãã§ãïŒ äžå¿è£é¡ãé©çšãããšãååž°ãåŸãããŸãã
TïŒmãnãrïŒâ€TïŒm + ãn + ãrïŒ+ TïŒm-ãn-ãlog * rïŒ+ m + + n-ã
TïŒm + ãn + ãrïŒâ€2m + + nãéããååž°ãå€æããŸãã
TïŒmãnãrïŒâ€TïŒm + ãn + ãrïŒ+ TïŒm-ãn-ãlog * rïŒ+ m + + n - â€
â€2m + + n + TïŒm-ãn-ãlog * rïŒ+ m + + n - â€
â€3m + + 2n + TïŒm-ãnãlog * rïŒã
ããã§ãããã€ãã®ååž°ã¬ãã«ãæããã«ããŸãã
TïŒmãnãrïŒâ€ïŒ3m + + 2nïŒ+ TïŒm-ãnãlog * rïŒâ€
â€ïŒ3m + + 2nïŒ+ïŒ3m 0 + + 2nïŒ+ TïŒm 0- ãnãlog * log * rïŒâ€
â€ïŒ3m + + 2nïŒ+ïŒ3m 0 + + 2nïŒ+ïŒ2m 1 + + 2nïŒ+ TïŒm 1- ãnãlog * log * log * rïŒâ€
â€...
ããã§ãåã®ã»ã¯ã·ã§ã³ãšåæ§ã«ãm 0 + ãm 1 + ã...ã¯ãããŸããŸãªååž°ã¬ãã«ã§ã®m +ã«å¯Ÿå¿ããå€ã§ãã m + + m 0 + + m 1 + + ...â€mã§ããããšã¯æããã§ãã ååž°ã®æ·±ãã¯log ** rã§ãã ãã®çµæãTïŒmãnãrïŒâ€3m + 2n log ** rã ãšãŠãè¯ãããŒã¯ã§ãã ãããããã®ãã©ãŒã«ã¹ã¯ãååŸããã°ããã®æšå®å€TïŒmãnãrïŒâ€3m + 2n log ** rã䜿çšããŠããäžåºŠå®è¡ã§ããŸããïŒ ã¯ãïŒ
詳现ã¯ä»åçç¥ããŸãã ãã©ã¬ã¹ãF-ãlog ** rã®ã©ã³ã¯ã«ãäžãããããšã«ãããåã³è£é¡3ã䜿çšããŠTïŒm + ãn + ãrïŒâ€3m + + nãååŸã§ããŸãã ããã¯ãTïŒm + ãn + ãrïŒâ€2m + + nã®æšå®å€ãšã»ãŒåãã§ãã 次ã«ããã®æšå®å€ãšäžå€®è£é¡ã䜿çšããŠãTïŒmãnãrïŒâ€4m + 2n log *** rãå°ãåºããŸãã
Fããã°*** rã®ã©ã³ã¯ã«ãäžãããããšã§ãããã«ç¶è¡ã§ããŸãã äžè¬ã«ãæ£ã®æŽæ°kã«å¯ŸããŠãã®æé ãkåå®è¡ãããšã次ã®æšå®å€ãååŸã§ããŸãã
TïŒmãnãrïŒâ€km + 2n log ** ... * rãæã®æ°ã¯k-1ã§ãã
|
ãã®ç¹°ãè¿ãé¢ä¿ãæé©åããããšã¯æ®ã£ãŠããŸãã æãå€ãã»ã©ãçšèª2n log ** ... * rã¯å°ãããªããŸãããkmã¯é·ããªããŸãã 平衡ã¯çŽkã§éæãããŸãã ããããæã ã¯ããã決å®ããŸãïŒçšèªn log ** ... * rã2mã«å€ããŸãã ãã®æçµã¹ãããã®åã«ãrã®ä»£ããã«ãn-å ã®ãã©ã¬ã¹ãFã®ã©ã³ã¯ã®äžéãä»£å ¥ããŸãïŒãã ããè£é¡1ã«ãããr = log nã«ãªããŸããããã€ã³ãã«ã¯ãªããŸããïŒã 次ã®æ©èœãå°å ¥ããŸãã
αïŒmãnïŒ= min {kïŒn log ** ... * n <2mãæã®æ°ã¯k}ã
|
é¢æ°Î±ïŒmãnïŒã¯ãã¢ãã«ãŒãã³é¢æ°ã®éé¢æ°ãšåŒã°ããŸã ã mâ¥nã®å Žåã«ã®ã¿é¢å¿ãããããšãæãåºããŠãã ããã αïŒmãnïŒã®å®çŸ©ã«ãããåŒn log ** ... * nïŒÎ±ïŒmãnïŒã®æïŒã¯2mæªæºã§ãã å®éã«ãé¢æ°Î±ïŒmãnïŒãå°å ¥ããŠãæå°éã®æã§ãã®ãããªå¹æãååŸããŸããã ãã¶ãããã¯ããã«ç®ç«ã£ãããã§ã¯ãªããããããŸããããmåã®Union-FindæäœãOïŒmαïŒmãnïŒïŒã§å®è¡ãããããšã蚌æããã ãã§ãã
ã¿ãã ïŒ
ã¢ãã«ãŒãã³ã®éé¢æ°ã«ã€ããŠå°ã
éã¢ãã«ãŒãã³é¢æ°ã以åã«èŠãå Žåãã»ãšãã©ã®å Žåå®çŸ©ã¯ç°ãªã£ãŠããŸããïŒãããããã«ããïŒããæçµçã«ã¯åãé¢æ°ã挞è¿çã«äžããŸãããTaryanã䜿çšããAckermanã®åæå®çŸ©ã¯ããã®æ©èœã«ã€ããŠå人çã«ã¯äœãèªããŸããïŒãã®å ŽåãAckermanãèªåã®æ©èœãå°å ¥ããå°åã§ã¯ãå®çŸ©ã¯èªç¶ã§ããïŒã ZeidelãšSharirã«ãã£ãŠææ¡ãããïŒãããŠäžããããã°ããã®ïŒå®çŸ©ã¯ãéã¢ãã«ãŒãã³ã®ãç§å¯ã®æå³ããæããã«ããŠããŸãããŸããå³å¯ã«èšãã°ããã¢ãã«ãŒãã³é¢æ°ã®éé¢æ°ãã¯ééã£ãååã§ãããªããªããαïŒmãnïŒã¯2ã€ã®å€æ°ã®é¢æ°ã§ããããããªãé¢æ°ã«å¯ŸããŠããéãã«ã§ããªãããã§ãããããã£ãŠãαïŒmãnïŒã¯ã¢ãã«ãŒãã³ã®æ¬äŒŒéé¢æ°ã§ãããšèšãããããšããããŸããã¢ãã«ãŒãã³ã®æ©èœã¯æäŸããŸããã
å°ãåæããŸããæ倧αïŒmãnïŒã¯ãm = nã§éæãããŸããéåžžã«å°ããªåå·®ã§ãïŒäŸïŒmâ¥n log *****nïŒÎ±ïŒmãnïŒãå®æ°ã«ãããé¢æ°Î±ïŒnãnïŒã¯ãä»»æã®æ°ã®æã«ã€ããŠlog ** ... * n ããããã£ãããšæé·ããŸãããšããã§ãαïŒnãnïŒã®å®çŸ©ã¯ãå埩ã®å®çŸ©ã«äŒŒãŠããŸãïŒ
αïŒnãnïŒ= min {kïŒlog ** ... * n <2ãæã®æ°ã¯k}ã
ãã¡ãããããã¯å¶éã§ã¯ãªããlogαïŒnãnïŒã®ããã«ãããã«ãã£ãããšæé·ããé¢æ°ããããŸããå¥ã®ããšã¯é©ãã¹ãããšã§ããαïŒmãnïŒã¯ããã®ãããªèªç¶ãªã¢ã«ãŽãªãºã ã®åæã§çºçããŸããããã«é©ãã¹ãããšã«ãçµæã®æšå®å€OïŒmαïŒmãnïŒïŒãæ¹åããããšã¯äžå¯èœã§ãããšãã蚌æ ããããŸãã