මම Google HashCode World Championship Finals 2017 සඳහා සූදානම් වෙමින් සිටියෙමි. මෙය Google විසින් සංවිධානය කරන ලද ඇල්ගොරිතම ගැටළු සහිත විශාලතම තරඟයයි.
මම නවය ශ්රේණියේ සිට C++ මුල සිට ඉගෙනීමට පටන් ගත්තෙමි. මම ක්රමලේඛනය, ඇල්ගොරිතම හෝ දත්ත ව්යුහයන් ගැන කිසිවක් දැන සිටියේ නැත. යම් අවස්ථාවක දී මම මගේ පළමු කේතය ලිව්වා. මාස හතකට පසු, වැඩසටහන් තරඟය ක්ෂිතිජය මත දිස් විය. මගේ ඉගෙනීමේ ක්රමලේඛන විලාසය කෙතරම් හොඳින් ක්රියාත්මක වේදැයි බැලීමට මට අවශ්ය විය. එය පරිපූර්ණ අවස්ථාවක් විය.
දින දෙකක තරඟයෙන් පසු ප්රතිඵල පැමිණියේය: මම රන් පදක්කම දිනුවා.
මම තිගැස්සුණා. මම අවුරුදු 5ක පළපුරුද්ද එක්ක තරගකරුවන්ට වඩා ඉදිරියෙන් හිටියා. මම වෙහෙස මහන්සි වී වැඩ කළ බව මම දැන සිටියත්, මෙම ජයග්රහණය මගේ සියලු අපේක්ෂාවන් ඉක්මවා ගියේය. ක්රීඩා වැඩසටහන් මගේ මාතෘකාව බව මට වැටහුණු අතර එය හිස ඔසවන්නට විය.
මාව සාර්ථකත්වයට ගෙන ගිය දේ මම දන්නා අතර එය ඔබ සමඟ බෙදා ගැනීමට මට අවශ්යය.
ලිපිය පරිවර්තනය කරන ලද්දේ EDISON මෘදුකාංගයේ සහය ඇතිවයක්රමලේඛකයින්ගේ සෞඛ්යය සහ ඔවුන්ගේ උදේ ආහාරය ගැන සැලකිලිමත් වේ , මෙන්මඅභිරුචි මෘදුකාංග සංවර්ධනය කරයි .
තෝරා ගත යුතු ක්රමලේඛන භාෂාව
- C++ - බෙහෙවින් නිර්දේශ කරන්න! ඔහු ඉතා වේගවත් ය. STL නිසා ඇල්ගොරිතම ක්රියාත්මක කිරීමට සුළු කාලයක් ගතවේ. C++ සියලුම තරඟ සඳහා පිළිගනු ලැබේ. මම මගේ මුල්ම කේතය ලිව්වේ C++ වලින්.
- C - STL නිසා C++ ඉගෙන ගන්න. C දන්නවනම් C++ වලින් program කරන්නත් පුලුවන්.
- ජාවා යනු මන්දගාමී ක්රමලේඛන භාෂාවකි. එහි විශාල පූර්ණ සංඛ්යා පන්තියක් ඇත, නමුත් එය ඔබට එතරම් උදව් නොකරනු ඇත. තරඟයකට කාල සීමාවක් තිබේ නම්, ජාවා සමඟ ඔබ නිසැකවම එය ඉක්මවා යනු ඇත. සියලුම තරඟ වලදී Java පිළිගනු නොලැබේ.
කොහෙද පුහුණු වෙන්න පුළුවන්
මම නිර්දේශ කරන්නේ
පළමුව, ඔබ මූලික කරුණු පිළිබඳ ඔබේ දැනුම වර්ධනය කර ගත යුතුය
ඔබ භාෂාවේ වාක්ය ඛණ්ඩයට හුරු වූ පසු, ජයගත යුතු ගැටළු කිහිපයක් තිබේ. පුහුණුව අවශ්ය වන සරල ගැටළු සමඟ ආරම්භ කරන්න. මෙම අදියරේදී, ප්රධාන දෙය වන්නේ ඔබේ ක්රමලේඛන විලාසය තීරණය කිරීමයි. සමහර විට ඔබ බොහෝ සුදු ඉඩක් සහිත කේතයක් ලිවීමට කැමති විය හැකිය, සමහර විට ඔබ එසේ නොවේ. ඔබ වරහන් "if" ලෙස එකම පේළියක තබනවා විය හැකිය, නැතහොත් ඔබ ඒවා වෙනම පේළියක තබයි.
ඔබේ ක්රමලේඛන විලාසය ඔබ සොයා ගත යුතුය, මන්ද එය ඔබගේ විලාසයයි.
ඔබ එය සොයන විට, මූලික මූලධර්ම දෙකක් මතක තබා ගන්න:
- ඔබගේ කේතය ක්රියාත්මක කිරීමට පහසු විය යුතුය. ඔබ ඉදිරිපත් කරන විසඳුම ක්රියාත්මක කිරීමේදී ඔබට සුවපහසුවක් දැනිය යුතුය. ඇයි? මොකද තරඟයක් අතරතුර, ඔබට අවශ්ය අවසාන දෙය ඔබේ කේතය අතරමං වීමයි. කේතය ක්රියාත්මක කිරීම සරල කරන්නේ කෙසේදැයි සිතා බැලීමට මිනිත්තු 5ක් වැය කිරීමට වඩා අමතර මිනිත්තු 10ක් වැය කිරීම සැමවිටම හොඳය.
- ඔබේ කේතය කියවීමට පහසු විය යුතුය. කේතය කියවීමට පහසු වන විට, එය දෝෂහරණය කිරීම පහසුය. අපි එයට මුහුණ දෙමු - දෝෂ සෑම විටම සිදු වේ. ඔබට විනාඩි 10 ක් ඉතිරිව තිබියදීත් ඔබට වැරදීම සොයාගත නොහැකි වූ විට එම හැඟීම ඔබ දන්නවාද? ඇත්තෙන්ම ඔබ කරනවා. මෙම තත්ත්වය මඟහරවා ගැනීම සඳහා, කියවිය හැකි කේතය ලියන්න. ඔබ එය නිදොස් කිරීම ආරම්භ කළ පසු, කේතය ස්වභාවික හා තේරුම් ගැනීමට පහසු වනු ඇත.
ඔබේ සංවර්ධන කුසලතා වැඩි දියුණු කර ගන්නේ කෙසේද
පුහුණු වන්න, පුහුණු වන්න සහ තවත් පුහුණු වන්න. ඔබට වඩාත්ම විසඳිය හැකි පළමු ගැටළු 250 හරහා වැඩ කරන ලෙස මම නිර්දේශ කරමි
කියන්න එපා: "මෙම ගැටලුව මට ඉතා අපහසුයි, මම ඊළඟ එක විසඳීමට උත්සාහ කරමි." පරාජිතයන් සිතන්නේ එලෙසයි.
කඩදාසි කැබැල්ලක් සහ පැන්සලක් ගන්න. ඒ ගැන සිතන්න. සමහරවිට ඔබට විසඳුමක් සොයාගත හැකිය, සමහරවිට නොවේ. අවම වශයෙන්, ඔබ ඇල්ගොරිතම චින්තනය වර්ධනය කරනු ඇත. ඔබට පැයක් ඇතුළත විසඳුමක් ඉදිරිපත් කළ නොහැකි නම්, සංසදයේ හෝ ලිපිවල සූදානම් කළ විසඳුමක් සොයන්න.
මෙම ප්රවේශය සමඟ ඔබ අත්කර ගන්නේ කුමක්ද? කේතය භාවිතයෙන් ඔබේ අදහස් ඉක්මනින් ක්රියාත්මක කිරීමට ඉගෙන ගන්න. සහ සම්භාව්ය ගැටළු සහ ඇල්ගොරිතම අධ්යයනය කරන්න.
දෙවනුව, ඔබ ඇල්ගොරිතම සහ දත්ත ව්යුහයන් ප්රගුණ කළ යුතුය
ධූරාවලි ප්රවේශයක් අනුගමනය කරන්න. ඇවිදින්න දන්නෙ නැතුව දුවන්න පටන් ගත්තද? නැත. ශක්තිමත් අත්තිවාරමක් නොමැතිව අහස උසට ගොඩනඟා ගත හැකිද? ආයෙත් නෑ.
ඔබට ඉගෙනීමේ මාර්ගයේ පියවර නොසලකා හැරිය නොහැක. ඔබ ඒවා නොසලකා හරින්නේ නම්, ඔබට දැනුම හිඩැස් ඉතිරි වනු ඇත. කාලයත් සමඟ ඒවා නරක අතට හැරෙනු ඇත.
මූලික ඇල්ගොරිතම සහ දත්ත ව්යුහයන් සමඟ ආරම්භ කරන්න
පටන් ගන්න අමාරුයි. සමහර විට ඔබ මුලින්ම ඉගෙන ගත යුත්තේ කුමක්දැයි නොදන්නා නිසා විය හැකිය. ඒක තමයි
ඔබ පහසු ගැටළු විසඳීමට කටයුතු කරන්නේ නම්, ඔබ කිසි විටෙකත් දියුණු නොවනු ඇත.
ඔබ නොදන්නා දේ තේරුම් ගැනීමට වඩාත්ම ඵලදායී ක්රමය වන්නේ එය ප්රායෝගිකව අත්විඳීමයි. එහෙම තමයි මම ඉගෙන ගත්තේ. අභියෝගාත්මක කාර්යයක් තෝරා ගැනීමෙන් මා මෙතෙක් අසා නොතිබූ බොහෝ නව ශිල්පීය ක්රම ඉගෙන ගත්තා.
ඔබ වැඩ කරන සෑම තෙවන ගැටලුවක්ම ඔබට අලුත් දෙයක් ඉගැන්විය යුතුය. ගැටළු තෝරාගැනීමේදී වඩාත් සැලකිලිමත් වන්න. වඩාත් දුෂ්කර ගැටළු තෝරන්න!
ඔබ SPOJ වෙතින් මෙම ගැටළු 250 සම්පූර්ණ කළ පසු, ඔබට ක්රීඩා වැඩසටහන්කරණයේ මූලික මාතෘකා පිළිබඳ මූලික අවබෝධයක් ලැබෙනු ඇත. මූලික ඇල්ගොරිතම පිටුපස ඇති තර්කනය පිළිබඳ ගැඹුරු අවබෝධයක් සමඟ, ඉහළ මට්ටමේ ඇල්ගොරිතම අඩු සංකීර්ණ බවක් පෙනෙනු ඇත. මේ ආකාරයෙන් ඔබට ඔබේ දැනුමෙන් උපරිම ප්රයෝජන ගත හැකිය.
එක් එක් ප්රධාන තේමාවන් ගැඹුරට හාරන්න
අලුත් දෙයක් ඉගෙන ගෙන දැනුම ශක්තිමත් කර නොගත්තොත් ඔබට ඉක්මනින් සියල්ල අමතක වෙනවා.
ඔබ නව ඇල්ගොරිතමයක් ඉගෙන ගත් පසු එය ප්රායෝගිකව භාවිතා කරන ලෙස මම නිර්දේශ කරමි. 2-3 කාර්යයන් හරහා එය වැඩ කරන්න. SPOJ හි ඇල්ගොරිතම ටැගය සොයන්න. මෙම ඇල්ගොරිතම විසඳීමට අවශ්ය ගැටළු එහිදී ඔබට හමුවනු ඇත. මුලින්ම මේ ගැටලුවලට විසඳුම් දෙන්න.
Master Dynamic Programming එය ඔබව ජයග්රහණය කරා ගෙන යනු ඇත
මගේ අත්දැකීම් අනුව, සෑම තරඟයකටම අවම වශයෙන් එක් ගැටළුවක් ඇත
ඒ වගේම මේක හොඳයි. මොකද ඩයිනමික් ක්රමලේඛනය තේරුම් ගත්තොත් ඔබ දිනනවා.
මම ගතික ක්රමලේඛනයට කැමතියි, එය මගේ ප්රියතම මාතෘකාවයි. ගතික ක්රමලේඛනයේ රහස වන්නේ දේශීය ඒවා පමණක් නොව ගෝලීය වශයෙන් ප්රශස්ත තේරීම් කිරීමයි. ඔබ ගැටලුව සරල උප ගැටළු වලට බෙදිය යුතුය. මෙම සෑම උප ගැටලුවක්ම එක් වරක් පමණක් විසඳන්න. ඉන්පසු විසඳන ලද උප ගැටළු ඒකාබද්ධ කරන විසඳුමක් සාදන්න.
නව සංකල්ප ඉගෙන ගන්නා අතරතුර, පරීක්ෂා කරන්න
මහන්සි වී වැඩ කරන්න
වසර ගණනක පුහුණුවීම් නොමැතිව ඔලිම්පික් ජයග්රහණය කරන ක්රීඩක ක්රීඩිකාවන් ගැන ඔබ අසා තිබේද? මම නැහැ.
සෑම වසරකම පරිගණක ඔලිම්පියාඩ් සඳහා සූදානම් වීමේ කටයුතු සැප්තැම්බර් මාසයේදී ආරම්භ වූ අතර අප්රේල් මාසයේදී අවසන් විය.
මේ මාස 8 පුරාම හැමදාම මම පැය 5ක් පුහුණුවීම් කළා.
ඔව්, මම මේ පැය 5 ගත කළේ ඇල්ගොරිතම ගැටළු විසඳීමට පමණයි. මට මතකයි මම පැය 8ක් 10ක් පවා පුහුණුවීම් කළ දවස්. ඇයි? මොකද මම ඒකට කැමති වුණා. හැමදාම ඉස්කෝලේ ඇරිලා ගෙදර එනකොට මම කෙලින්ම නිදන කාමරයට ගිහින් කොම්පියුටරේ වාඩි වෙලා අලුත් ප්රශ්නයක් විශ්ලේෂණය කරන්න පටන් ගත්තා. නැත්නම් මම මේ ප්රශ්නය විසඳන්න දැන ගන්න ඕන අලුත් ඇල්ගොරිතමයක් ඉගෙන ගනිමින් හිටියා.
දිනන්න නම් එහෙම කරන්නම වෙනවා. ගැටලුවක් තෝරාගෙන එයට ඇලී සිටින්න. සුපිරි වෙළඳසැලට යන විට හෝ රිය පැදවීමේදී ඒ ගැන සිතන්න.
ඔබ නිදා ගන්නා විට ඔබේ මොළය එදින රැස් කරගත් තොරතුරු defrag කරන බව ඔබ දන්නවාද? ඔහු පොත් රාක්කයක අකාරාදී පිළිවෙලට පොත් අසුරන බව පෙනේ. මූලික වශයෙන්, ඔබේ මොළය ඔබ මුහුණ දෙන විවිධ ගැටලු ගැන සිතයි.
මෙය දක්ෂ ලෙස භාවිතා කළ හැකිය. නින්දට යාමට පෙර, දුෂ්කර ගැටලුවක් කියවා එය විසඳීමට අවශ්ය දේ මතක තබා ගන්න. මෙම අවස්ථාවෙහිදී, ඔබ විසඳුමම සෙවීමට අවශ්ය නොවේ. ඇඳට යන්න. ඔබේ මොළය මෙම ගැටලුව සැකසීමට පටන් ගනී. ඔබ අවදි වන විට, ඔබ නිදා සිටියදී විසඳුම සොයාගත් බව ඔබ පුදුමයට පත් වනු ඇත.
ඔබම උත්සාහ කරන්න. ඒක මැජික් එකක් වගේ.
මම වීඩියෝ බ්ලොග් එකක් හැදුවා
මෙම කෙටි ඡේදය ක්රීඩා වැඩසටහන් වලට සම්බන්ධ නොවේ. ඔබ ඔබේ විසි ගණන්වල සිටින අතර මා ලෝකය දකින්නේ කෙසේදැයි කල්පනා කරන්නේ නම්, ඔබට පරීක්ෂා කිරීමට අවශ්ය විය හැකිය
බුද්ධිමත්ව වැඩ කරන්න
සාර්ථකත්වයේ රහස මෙයයි. ඔබට ඉලක්ක අවශ්යයි.
අපි මිනිසුන් වන අතර අපි එයට කැමතියි
කල් දැමීම පරාජය කරන්නේ කෙසේද?
ඔබටම ඉලක්ක තබාගන්න. ඔබට අලුත් දෙයක් ඉගෙන ගත හැකි රසවත් ගැටළු ඔබට සැමවිටම සොයාගත හැකිය (මා ඉහත සඳහන් කළ සම්පත් පරීක්ෂා කරන්න). නමුත් මෙම ගැටළු නිකම්ම කියවීමට පමණක් නොව විසඳිය යුතුය.
ඉතින් මම ප්රමාදය ජයගත් ආකාරය මෙන්න. මම කඩදාසි දින දර්ශනයක් ආරම්භ කර සෑම දිනකම මට විසඳීමට අවශ්ය ගැටලුවලින් පුරවන්නෙමි. මම හැම විටම ගැටලු දින දෙකකට පෙර පුරවා ඇත. ඒ නිසා මම ඊළඟ දවස්වල මගේ කාලය කළමනාකරණය කරන්නේ කෙසේදැයි දැන සිටියෙමි.
ඒ නිසා මම නිතරම දිරිමත් වුණා. මට දින දර්ශනයේ ඉදිරි දින පිරවීමට ගැටලු කිහිපයක් විසඳා අලුත් ඒවා සොයා ගැනීමට අවශ්ය විය. විසඳන ලද ප්රශ්න මඟ හරවා ගැනීම සතුටක්. ඔබත් එයට කැමති බව මම දනිමි.
ඔබේම කඩදාසි දින දර්ශනයක් ලබා ගන්න. ඔබට හෙට අමතක වන වෙනත් කළ යුතු දේ ලැයිස්තුවක් ඔබගේ දුරකථනයේ සාදන්න එපා.
ඵලදායී ලෙස දෝෂහරණය කරන්නේ කෙසේද
ඔබට වෘත්තිකයෙකු වීමට අවශ්යද? ඔව් නම්, ඔබ "ඔබේ මනසෙහි එය නිදොස් කිරීම" කළ යුතුය.
මෙය මා දන්නා වඩාත්ම කාර්යක්ෂම දෝශ නිරාකරණ තාක්ෂණය වන්නේ එයට කිසිසේත්ම නිදොස්කරණයක් අවශ්ය නොවන බැවිනි. ඔබේ මොළය එකවර කේත ශාඛා කිහිපයක් පරීක්ෂා කරන අතර ඔබට සංසන්දනය කරන විට කේතය පිළිබඳ වඩා පුළුල් දළ විශ්ලේෂණයක් ලබා දෙයි
ඔබට ඔබව චෙස් ක්රීඩා කරන ග්රෑන්ඩ්මාස්ටර් කෙනෙකු සමඟ සැසඳිය හැකි අතර ඉදිරියට 3ක් ඉදිරියට යයි.
මම මෙම තාක්ෂණය භාවිතා කරන්නේ මගේ ආරම්භක ආරක්ෂක මාර්ගය ලෙස පමණි. එතකොට මම නියම debugger එකක් පාවිච්චි කරනවා.
ඔබේ හිසෙහි දෝශ නිරාකරණය කරන්නේ කෙසේදැයි ඉගෙන ගැනීමට, ඔබ පුහුණු විය යුතුය. ඔබ ගැටලුවකට විසඳුමක් වලංගු කර "වැරදි පිළිතුරක්" ලබා ගත් විට, දෝශ නිරාකරණ බොත්තම වෙත කෙලින්ම නොයන්න. කේතය නැවත කියවා සිතන්න: "මෙම පේළියේ සිදුවන්නේ කුමක්ද?", "මෙහිදී "if" වැඩසටහනට බලපාන්නේ කෙසේද?", "අපි ලූපයෙන් පිටවන විට, පුනරාවර්තකයේ වටිනාකම කුමක්ද?"
මේ ආකාරයෙන් ඔබ ඔබම සිතන්න. කාලයාගේ ඇවෑමෙන්, ඔබ කේතය ලිවීමට සහ පියාසර කිරීමේදී එය නිදොස් කිරීමට ඉගෙන ගනු ඇත.
කතුවරයා ගැන
Andrei Margeloiu යනු ව්යවසායකත්වය, ආරම්භක සහ එළිමහනේ උනන්දුව ඇති ක්රමලේඛකයෙකි. ඔබට ඔහුව සම්බන්ධ කර ගත හැක
පරිවර්තනය: Diana Sheremyeva
මූලාශ්රය: www.habr.com