Yandexã®åå ã§äœæãããå¥ã®äŸ¿å©ãªå°éåé- ã³ãŒã¹ã¢ã«ãŽãªãºã ãšããŒã¿æ§é -ãCourseraã«ç»å ŽããŸããã æåž«ã®äžã«ã¯ãYandexãHSEããµã³ã¯ãããã«ãã«ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã»ã³ã¿ãŒã®ä»£è¡šè ã ãã§ãªããã«ãªãã©ã«ãã¢å€§åŠãµã³ãã£ãšãŽæ ¡ã®è¬åž«ããããããä»åã¯ãã¹ãŠã®å°éã³ãŒã¹ãè±èªã話ããŸãã
ãã®ãã¡ã®5ã€ããããèŽè¡ã®çµããã«æçµãããžã§ã¯ããåŸ ã£ãŠããŸãã ãã®ãã¡ã®1ã€ã¯ãã€ãªã€ã³ãã©ããã£ã¯ã¹ã«é¢é£ãã2ã€ç®ã¯å®éã®é路網ãšã°ã©ãã®æççµè·¯ã®æ€çŽ¢ã§ãã å°éã®åœ¢åŒã§ã¯ããã¹ãŠã®è³æãç¡æã§å©çšã§ããŸãã 確èªã®ããã«å®¿é¡ãéãã蚌ææžãååŸããå Žåã«ã®ã¿ãæ¯æããå¿ èŠã«ãªããŸãã 次ã«ãçŽ100ã®ã¿ã¹ã¯ãããã°ã©ã ãããã¹ãã·ã¹ãã ã«éä¿¡ããå¿ èŠããããŸãã ããã¯ãCãC ++ãCïŒãHaskellãJavaãJavaScriptãPython2ãPython3ãRubyãããã³Scalaã§å®è¡ã§ããŸãã
ä»æ¥ã¯æåã®ã³ãŒã¹ã§ããAlgorithmic Toolboxãéå§ããŸãã ã«ããã®äžã«ã¯ãå°éããã°ã©ã ãæåž«ã«é¢ããæ å ±ãããã³ããã誰ã«åœ¹ç«ã€ãããããŠãã®çç±ã«é¢ããæèŠããããŸãã
å çæ¹
ããã€ã«ã»ã¬ãã³ã YandexãHSEã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹åŠéšã Yandex Data Factoryã®ããã°ããŒã¿åæ責任è ã 圌ã¯ããŒã¿åæåŠéšã§ãã¢ã«ãŽãªãºã ãšããŒã¿æ§é ãã³ãŒã¹ãæããHSEãšYandexã®ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹åŠéšã§ãã¬ãŒãã³ã°ããã°ã©ã ã®äœæã«åå ããŠããŸãã ã¢ã¹ã¯ã¯å·ç«å€§åŠã®ããŒã ã®äžå¡ãšããŠãACM ICPCã§2åã¡ãã«ãç²åŸããŸããã M.V. ãã¢ããœãã Habréã®å€ãã¯ãæ°åŠã§Yandexãåºååå ¥ãåŸãã®ã«ã©ã®ããã«åœ¹ç«ã€ãã«é¢ããããŒã·ã£ã®è¬çŸ©ãèŠããŠããŸãã
ã¢ã«ãŽãªãºã ãšããŒã¿æ§é ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®åºç€ã§ãããããããã¯ã©ã®ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ããã°ã©ã ã§ãå¿ é ã®ã³ãŒã¹ã§ãã ããŒã¿ããŒã¹ãåæ£ã·ã¹ãã ãã¹ãã¬ãŒãžèªäœãäœæããããã ãã§ãªããããšãã°æ€çŽ¢ãããã²ãŒã¿ãŒãªã©ã®ãµãŒãã¹ãäœæããããã«ããããããç¥ã£ãŠããå¿ èŠããããŸãã ã¢ã«ãŽãªãºã ã¯ããŒã¿ãµã€ãšã³ã¹ã§äœ¿çšãããæ©æ¢°åŠç¿ã®éèŠãªéšåã¯æ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã§ãã
ç§ãã¡ã®å°éã¯ãSHADã®ã³ãŒã¹ãšã¯ããšã³ããªãŒã®ãããå€ãå€§å¹ ã«äœãããšããã«ãŒããå°ãªãããšïŒå€ãã¯ãªãã·ã§ã³ã§ãïŒããããã¯ã®ã»ãããå®çšçãªäŸãšææ°ã®ã¢ããªã±ãŒã·ã§ã³ã«éç¹ã眮ããŠããããšãããã³Capstoneãããžã§ã¯ãã®ååšã§ãã
ãã®å°éåã¯ãããã°ã©ããŒãšç 究è ã®äž¡æ¹ã«åœ¹ç«ã¡ãŸãã 圌女ã¯ãããããã¯ãããžãŒäŒæ¥ãšã®ã€ã³ã¿ãã¥ãŒãåããããè€éãªåé¡ã解決ããæ¹æ³ãåŠã³ãããã«ãã£ãŠè·å Žã§ã®æé²ãåŸãããã«ã圌女ã®ã¹ãã«ãã¢ããã°ã¬ãŒãããã®ãæåã«æ¯æŽããŸãã ãŸããããšãã°ãç 究è ã¯ãæã§å®éšãåŠçãã代ããã«ãã³ã³ãã¥ãŒã¿ãŒã®èšç®èœåã䜿çšã§ããŸãã
ãããšã«ã±ã€ã³ ãã«ãªãã©ã«ãã¢å€§åŠãµã³ãã£ãšãŽæ ¡ ã CSEããã³æ°åŠç§ã®åææã ãããšã«ã¯ã¢ã«ãŽãªãºã ã®çŽ¹ä»ãæããŠããŸãã 圌ã®ç§åŠçé¢å¿ã®äžã«ã¯ãæ°åŠã®ããŸããŸãªåéãšã³ã³ãã¥ãŒã¿ãŒç§åŠã®çè«ãããã圌ã®ä»äºã®ã»ãšãã©ã¯ãæ°è«ãèšç®ã®è€éããããã³çµã¿åããè«ã«é¢ãããã®ã§ãã ãããšã«ã±ã€ã³ã¯ããŒããŒã倧åŠãåæ¥ããMITã§å士å·ãååŸããŸããã
ãœãããŠã§ã¢éçºãã²ãã 解æãæžæ»äºæž¬ãæšå¥šã·ã¹ãã ãªã©ãããããå Žæã§ã¢ã«ãŽãªãºã ã䜿çšãããŠããŸãã ã€ã³ã¿ãŒãããã䜿çšããã ãã§ã¢ã«ãŽãªãºã ã«ééããŸãã ãããã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®ããããåéã§äœ¿çšãããŠãããããã¢ã«ãŽãªãºã ãšããŒã¿æ§é ã®ã³ãŒã¹ã¯CSããã°ã©ã ã®åºæ¬çãªéšåã§ãã
Pavel Pevznerãã«ãªãã©ã«ãã¢å€§åŠãµã³ãã£ãšãŽãã¢ã«ãŽãªãºã çç©åŠç 究æãSPbAUã Pavelã¯PhysTechãåæ¥ããçŸåšã¯ãµã³ãã£ãšãŽã®CSEéšéã®ææã§ããã12幎éãã€ãªã€ã³ãã©ããã£ã¯ã¹ã®ã¢ã«ãŽãªãºã ãæããŠããŸãã 2011幎ã圌ã¯ãµã³ã¯ãããã«ãã«ã¯ã®ã¢ã«ãŽãªãºã çç©åŠç 究æã®èšç«ã«åå ãããã¶ãªã³ããã©ãããã©ãŒã ãéçºããŸããã 圌ã®ç§åŠçæ¥çžŸãèªããããããŒã«ã¯ACMããã³ISCBã®æ£äŒå¡ã®ç§°å·ãæäžãããŸããã
ã¢ã«ãŽãªãºã ã¯ã©ãã«ã§ããããŸãïŒ äœå ã®æ°å åã®çŽ°èã®ããããã¯ããŸã ååã«ç 究ãããŠããªãã¢ã«ãŽãªãºã ã®è€åäœå šäœãå®è¡ããŸãã ãããã¯ãã©ã®çªç¶å€ç°ã人ã ãäºãã«åºå¥ãã圌ããç§ãã¡ã®ç æ°ãšã©ã®ããã«é¢ä¿ããŠãããã«ã€ããŠã®éèŠãªçç©å»åŠç質åãžã®çããžã®éµã§ãã ãã®å°éåéã§ã¯ãã¢ã«ãŽãªãºã ã®çè«ã«ç²Ÿéããããšã«å ããŠãç¬èªã®ã¢ã«ãŽãªãºã ãéçºããŸãã 圌ãã¯ã100äžåã®å°ããªæçããæ倧ã®ããºã«ã§ããã²ãã ãåéãããªã©ã®ã¿ã¹ã¯ã解決ããå¿ èŠããããŸãã
ã«ãªãã©ã«ãã¢å€§åŠãµã³ãã£ãšãŽæ ¡Googleã®ããŒã«ããŒã㹠圌ã¯UCSDãåæ¥ããã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ãåŠã³ãŸããã 圌ã¯ãã§ã«å士å·ãååŸããŠããŸãããã倧åŠãèŸããèªèº«ã®äŒç€Ÿã§ããPalomar Softwareã®éçºãéå§ããããšã«ããŸããã 10幎以äžã«ããããããŒã«ããŒãã¹ã¯ãµã³ãã£ãšãŽã§ã¢ã«ãŽãªãºã ãæ©æ¢°åŠç¿ãé¢æ£æ°åŠãããã³èšç®å¯èœæ§çè«ã®ã³ãŒã¹ãæããŠããŸããã 圌ã¯AppleãšPalmã®åŸæ¥å¡åãã®ãã¬ãŒãã³ã°ããã°ã©ã ãéçºããŸããã éå»7幎éã圌ã¯Googleã®éçºè ã§ããã
䜿çšããã¢ã«ãŽãªãºã ãå¹ççã§ããããšã¯éåžžã«éèŠã§ãã ãã·ã³ãäœååãã®ããŒãžãæ€çŽ¢ããå Žåã§ãã人ã¯ç¬ãéã«æ€çŽ¢çµæãå¿ èŠãšããŸãã ããèããããŠããªãã¢ã«ãŽãªãºã ã¯ãæåéãã€ã³ããã¯ã¹åãããæ€çŽ¢ãšã³ãžã³ããŒãžãŸãã¯äœäžçŽã«ãããããã¹ãŠã®Facebookæçš¿ãåŠçã§ããŸãã ãããã®ãµãŒãã¹ã䜿çšã§ããããã«ããã«ã¯ãã¢ã«ãŽãªãºã ãç¶ç¶çã«æ¹åããå¿ èŠããããŸãã ãã®ããããã¯ãããžãŒäŒæ¥ã¯ã€ã³ã¿ãã¥ãŒã§åžžã«ã¢ã«ãŽãªãºã ã«é¢ãã質åãããããããŸãã
ã¢ã¬ã¯ãµã³ããŒã»ã¯ãªã³ããæ°åŠç 究æ V.A. Yandexã®ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã»ã³ã¿ãŒSteklovaã 圌ã¯ãµã³ã¯ãããã«ãã«ã¯å·ç«å€§åŠã®æ°åŠãåæ¥ããã¹ãã¯ããæ°åŠç 究æã§ç©çåŠãšæ°åŠã®å士å·ãæè·ããŸããã 圌ã®ç 究察象ã¯ãNPå°é£ãªåé¡ãšåè·¯ã®è€éãã®ã¢ã«ãŽãªãºã ã§ãã ã¢ã¬ã¯ãµã³ããŒã¯ããµã³ã¯ãããã«ãã«ã¯ã®ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã»ã³ã¿ãŒãçããŠãããããã«åºã¥ããŠYandex Data Analysis Schoolã®æ¯éšãéå¶ãããŠããŸãã 圌ã¯ããã·ã¢ã§äŒè°ãšåŠçã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã¹ã¯ãŒã«ãéå¬ããŠããŸãã
ã¢ã«ãŽãªãºã ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®ãã¹ãŠã®ã»ã¯ã·ã§ã³ã§å¿ èŠãšããããããæè¡é¢æ¥ã§ã¯åžžã«ã¢ã«ãŽãªãºã ã«é¢ãã質åããããŸãã Kurserã«ã¯ãã§ã«2ã€ã®åªããã¢ã«ãŽãªãºã ã³ãŒã¹ããããŸãã1ã€ã¯ã¹ã¿ã³ãã©ãŒãã®Tim Rafgardenããããã1ã€ã¯ããªã³ã¹ãã³ã®Robert Sajwickããã§ãã ç§ãã¡ã®å°éã¯ããã®ç¹ã§åœŒããšæ¯èŒããŠæå©ã§ã
å®çšçãªã³ã³ããŒãã³ãã«å€§ããªéç¹ã眮ããŠããŸãã å šéš
åŠçã¯ãåŠç¿ããã¢ã«ãŽãªãºã ãå®è£ ããŠã倧éã®ããŒã¿ã«å¯ŸããŠãéåžžã«è¿ éã«äœæ¥ããå¿ èŠããããŸãã ããã«ãããã¢ã«ãŽãªãºã ã®ç解ãæ·±ãŸããé«éã§ä¿¡é Œæ§ã®é«ãããã°ã©ã ãäœæããã³ãããã°ããéã®è²ŽéãªçµéšãåŸãããŸãã ç§ãã¡ã®å°éåéã®2çªç®ã®å©ç¹ã¯ããäžè¬çã§ã-ããã¯ããå€ãã®ææãæã£ãŠããŸãã
å§ããã«ã¯ãåºæ¬çãªæ°åŠçãã¬ãŒãã³ã°ïŒåž°çŽæ³ã«ãã蚌æãççŸã«ãã蚌æïŒãããã°ã©ãã³ã°çµéšïŒCãC ++ãCïŒãHaskellãJavaãJavaScriptãPython2ãPython3ãRubyãŸãã¯ScalaïŒãå¿ èŠã§ãããªã¹ãã®æäœæ¹æ³ãæ³åããŠãã ãã/é åãšååž°ã®ä»çµã¿ã ã¹ãã·ã£ã©ã€ãŒãŒã·ã§ã³ã¯ãããå€ãã®éèŠã«ãªããããè€éãªåé¡ã解決ããæ¹æ³ãåŠã³ããããã°ã©ããŒã«åœ¹ç«ã¡ãŸãã
ããã°ã©ã
å°éåéã¯ã5ã€ã®ã³ãŒã¹ãšæçµãããžã§ã¯ãã§æ§æãããŸãã
1. ã¢ã«ãŽãªãºã ããŒã«ããã¯ã¹
å幎床ãç§ãã¡ã¯ããªããç¥ãããšãã§ããªãã¢ã«ãŽãªãºã ãšãå®éã«é »ç¹ã«çºçããã¿ã¹ã¯ã«ã€ããŠè©±ããŸããïŒäžŠã¹æ¿ããšæ€çŽ¢ãåå²çµ±æ²»ã¢ãããŒãã貪欲ãªã¢ã«ãŽãªãºã ãåçããã°ã©ãã³ã°ã 貪欲ãªã¢ã«ãŽãªãºã ã䜿çšããããšãçã«ããªã£ãŠããå Žåãšãã²ãã ã®ç 究ã§åçããã°ã©ãã³ã°ãã©ã®ããã«äœ¿çšãããããåŠç¿ããŸãã æ°ããã¢ã«ãŽãªãºã ã®äœæãšãã®å¹æçãªå®è£ ãç·Žç¿ã§ããŸãïŒ1ç§ä»¥å ã«æ©èœããããã«ïŒã
2. ããŒã¿æ§é
å¹ççãªã¢ã«ãŽãªãºã ã¯ãã»ãšãã©ã®å Žåãå¹ççãªããŒã¿æ§é ã䜿çšããŸãã ãã®ã³ãŒã¹ã§ã¯ãããŸããŸãªåé¡ã解決ããããã«äœ¿çšã§ããäž»ãªãã®ãæ±ããŸãã åºæ¬çãªæ§é ããå§ããŸãããïŒé åããã¥ãŒãã¹ã¿ãã¯ãããªãŒã ã©ã®ãããªç¶æ³ã§äœ¿çšãããã«ã€ããŠèª¬æããŸãã 次ã«ãèŸæžãå®è£ ãã2ã€ã®æ¹æ³ãæ€èšããŸã-ããã·ã¥ããŒãã«ãšãã€ããªæ€çŽ¢ããªãŒã䜿çšããŸãã ãããã®æ§é ã¯ãããã°ã©ãã³ã°èšèªãšããŒã¿ããŒã¹ã§äžè¬çã«äœ¿çšãããŠããŸãã å®éã«ã¯ãã»ãšãã©ãã¹ãŠã®éèŠãªããã°ã©ã ãäœããã®åœ¢ã§ããã·ã¥ããŒãã«ãŸãã¯æ€çŽ¢ããªãŒã䜿çšããŸãã ãŸãããããã®æ§é ã¯éåžžããã°ã©ãã³ã°èšèªã®ã©ã€ãã©ãªã«å®è£ ãããŸãããããã°ã©ã ã§å¹æçã«äœ¿çšããæ¢åã®å®è£ ãæ¡åŒµã§ããããã«ããã«ã¯ããã®é·æãšçæãç解ããããšãéèŠã§ãã
ããã«ããã®ã³ãŒã¹ã§ã¯ãYandex.Diskãå€ãã®ã¹ããŒã¹ãç¯çŽããæ¹æ³ãšã倧ããªãã¡ã€ã«ãDropboxã«ããŠã³ããŒãããããšãã»ãŒç¬æã«è¡ãããçç±ã«ã€ããŠåŠç¿ããŸãã ããã°ããŒã¿ãä¿åããããã«äœ¿çšãããåæ£ããã·ã¥ããŒãã«ãæ§ç¯ããåçãç解ããŸãã
æåŸã«ããã®ã³ãŒã¹ã§ã¯ããæå°èŠçŽ ã®æœåºããã2ã€ã®èŠçŽ ãåãã»ããã«å±ããŠãããã©ããã®ç¢ºèªããªã©ã®ã¯ãšãªãå®è¡ã§ããããŒã¿æ§é ã«ã€ããŠèª¬æããŸãã
3. ã°ã©ãäžã®ã¢ã«ãŽãªãºã
ããã²ãŒã¿ãŒãèµ·åããŠã«ãŒããæ§ç¯ããããããããã®ç§»åæéãèŠã€ãããããå Žåãã°ã©ãã®ã¢ã«ãŽãªãºã ã䜿çšããŸããã ã°ã©ãã¯ãéè·¯ãããã¯ãŒã¯ãã³ã³ãã¥ãŒã¿ãŒãããã¯ãŒã¯ãããã«æè¿ã§ã¯ãœãŒã·ã£ã«ãããã¯ãŒã¯ãªã©ãããŸããŸãªçŸå®ã«çŸããŸãã ä»äºãå§ããããã®ç°¡åãªæ¹æ³ãè€æ°ã®ã³ã³ãã¥ãŒã¿ãŒããããã¯ãŒã¯ã«æ¥ç¶ããæãå®äŸ¡ãªæ¹æ³ããŸãã¯Facebookã§äººæ°ã®ãã人ãèŠã€ããããã®å¹æçãªæ¹æ³ãæ¢ããŠããå Žåãã°ã©ãã®ã¢ã«ãŽãªãºã ã䜿çšããå¿ èŠããããŸãã
ãã®ã³ãŒã¹ã§ã¯ãã°ã©ããšã¯äœããã°ã©ãã®ããããã£ãã°ã©ããåé¿ããæ¹æ³ãã°ã©ãã圹ç«ã€å ŽæãèŠã€ããŸãã æççµè·¯ãèŠã€ããããã®ã¢ã«ãŽãªãºã ãæ€èšããŸãïŒããŸããŸãªããã²ãŒã·ã§ã³ãµãŒãã¹ã§äœ¿çšãããæççµè·¯ããã æçãã¹ã§ãããžã§ã¯ããéžæããå Žåãæçµãããžã§ã¯ããå®äºãããšãã«åŸè ãå¿ èŠã«ãªããŸãã ã³ãŒã¹ã¯ãéè·¯ãé»è©±ãããã³ã³ã³ãã¥ãŒã¿ãŒãããã¯ãŒã¯ã®èšèšã§äœ¿çšãããã¯ã©ã¹ã¿ãªã³ã°ã¢ã«ãŽãªãºã ã§äœ¿çšãããæå°ã¹ããã³ã°ããªãŒã®èª¬æã§çµãããŸãã
4. æååã®ã¢ã«ãŽãªãºã
ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®èŠ³ç¹ããèŠããšãç§ãã¡ãåãå·»ããã¹ãŠã®ããã¹ãã¯ç·ã§ãã å¹æçãªæ€çŽ¢ãäœæããããã«ãéçºè ã¯åç·äžã§ã¢ã«ãŽãªãºã ãç©æ¥µçã«äœ¿çšããŸãã ãããã¯å»åŠã§ã䜿çšãããŠããŸããç 究è ã¯ã圌ãã®å©ããåããŠãç¹å®ã®çŸæ£ãåŒãèµ·ããããã²ãã ã®çªç¶å€ç°ãèŠã€ããŸãã å°éåéã®4çªç®ã®ã³ãŒã¹ã¯ãåç·äžã®ã¢ã«ãŽãªãºã ã«å°å¿µããŸãã
5. é«åºŠãªã¢ã«ãŽãªãºã ãšè€éã
åºæ¬çãªã¢ã«ãŽãªãºã ã®ç 究ã¯ãããŸã§ã«å®äºããé«åºŠãªã¢ã«ãŽãªãºã ã«é²ã¿ãŸãã ã³ãŒã¹ã¯ããããã¯ãŒã¯ãšãã®ã¢ããªã±ãŒã·ã§ã³ã®ãããŒããå§ãŸããŸã-æãããªãã®ïŒæé©ãªå¯Ÿå¿ãåé¢ããããã¹ãã¹ã±ãžã¥ãŒãªã³ã°ã®æ€çŽ¢ïŒãããã³ããäºæããªããã®ïŒã³ã³ãã¥ãŒã¿ãŒããžã§ã³ã§ã®ç»åã®ã»ã°ã¡ã³ããŒã·ã§ã³ãã°ã©ãã§ã®å¯éããã¯ã©ã¹ã¿ãŒã®æ€çŽ¢ïŒã§ãã 次ã«ãç·åœ¢èšç»æ³ãå®è¡ããŠãæé©ãªäºç®ãäœæããåé¡ãäžãããããã©ã¡ãŒã¿ãŒã«åŸã£ãŠæãå®ãé£äºãèŠã€ãããé»æ°éä¿¡ã§ã®é話ãã«ãŒãã£ã³ã°ãããªã©ã®åé¡ã解決ããŸãã
ãã®åŸãé©åãªè§£æ±ºçãèŠã€ããããã»ãšãã©ã®å ŽåãèŠã€ãããªãå°é£ãªã¿ã¹ã¯ãæ®ããŸãã çåŸã¯å®éã«ãããã解決ããæ¹æ³ãåŠã³ãŸãã æåŸã«ãããã°ããŒã¿ãšæ©æ¢°åŠç¿ã«ãããã¢ã«ãŽãªãºã ã®é©çšã«ã€ããŠèª¬æããŸãã