මෙම උපුටා දැක්වීම පැහැදිලිවම නරක කේතයක් හෝ කේතයක් සාධාරණීකරණය කිරීම සඳහා භාවිතා කර ඇති බව මම බොහෝ විට දැක ඇත්තෙමි, එහි ක්රියාකාරිත්වය මනිනු නොලැබුවද, කේත ප්රමාණය වැඩි නොකර හෝ කියවීමේ හැකියාව අඩපණ නොකර බොහෝ විට ඉතා පහසුවෙන් කළ හැකිය.
පොදුවේ ගත් කල, මුල් ක්ෂුද්ර ප්රශස්තිකරණය නරක අදහසක් විය හැකි යැයි මම සිතමි. කෙසේ වෙතත්, සාර්ව ප්රශස්තිකරණය (O (N ^ 2) වෙනුවට O (log N) ඇල්ගොරිතමයක් තෝරා ගැනීම වැනි දේ බොහෝ විට වටී. එය O (N ^ 2) ඇල්ගොරිතමයක් ලිවීම නාස්තියක් විය හැකි බැවින් කල්තියාම කළ යුතුය. ඕ (ලොග් එන්) ප්රවේශයකට පක්ෂව එය සම්පූර්ණයෙන්ම විසි කරන්න.
වචන විය හැකි බව සලකන්න : O (N ^ 2) ඇල්ගොරිතම සරල හා ලිවීමට පහසු නම්, එය මන්දගාමී බව පෙනේ නම් ඔබට වරදකාරී හැඟීමකින් තොරව එය ඉවත දැමිය හැකිය. නමුත් ඇල්ගොරිතම දෙකම එක හා සමානව සංකීර්ණ නම්, හෝ අපේක්ෂිත කාර්ය භාරය විශාල නම් ඔබට වේගවත් එකක් අවශ්ය බව ඔබ දැනටමත් දන්නවා නම්, කලින් ප්රශස්තිකරණය කිරීම හොඳ ඉංජිනේරු තීරණයක් වන අතර එය දිගු කාලීනව ඔබගේ මුළු වැඩ ප්රමාණය අඩු කරනු ඇත.
මේ අනුව, පොදුවේ ගත් කල, මම සිතන්නේ නිවැරදි ප්රවේශය නම් ඔබ කේතය ලිවීමට පෙර ඔබේ විකල්ප මොනවාදැයි සොයා බැලීම සහ ඔබේ තත්වය සඳහා හොඳම ඇල්ගොරිතම දැනුවත්ව තෝරා ගැනීමයි. වැදගත්ම දෙය නම්, “නොමේරූ ප්රශස්තකරණය සියලු නපුරේ මුලයි” යන යෙදුම නොදැනුවත්කමට නිදහසට කරුණක් නොවේ. පොදු මෙහෙයුම් සඳහා කොපමණ මුදලක් වැය වේද යන්න පිළිබඳ සාමාන්ය අදහසක් වෘත්තීය සංවර්ධකයින්ට තිබිය යුතුය; ඔවුන් දැනගත යුතුයි, උදාහරණයක් ලෙස
- එම නූල් සංඛ්යාවට වඩා වැඩිය
- සංඛ්යාත්මකව ටයිප් කළ භාෂාවන්ට වඩා ගතික භාෂා මන්දගාමී බව
- සම්බන්ධිත ලැයිස්තු වලට වඩා අරාව / දෛශික ලැයිස්තු වල වාසි, සහ අනෙක් අතට
- හැෂ් ටේබල් භාවිතා කරන්නේ කවදාද, වර්ග කළ සිතියමක් භාවිතා කරන්නේ කවදාද, සහ ගොඩවල් භාවිතා කරන්නේ කවදාද
- (ඔවුන් ජංගම උපාංග සමඟ වැඩ කරන්නේ නම්) ඩෙස්ක්ටොප් පරිගණකවල "ද්විත්ව" සහ "ඉන්ට" සමාන ක්රියාකාරිත්වයක් ඇත (එෆ්පී ඊටත් වඩා වේගවත් විය හැක) නමුත් එෆ්පීයූ නොමැතිව අඩු මට්ටමේ ජංගම උපාංගවල "ද්විත්ව" සිය ගුණයකින් මන්දගාමී විය හැකිය;
- අන්තර්ජාලය හරහා දත්ත මාරු කිරීම HDD ප්රවේශයට වඩා මන්දගාමී වන අතර, HDDs RAM වලට වඩා බෙහෙවින් මන්දගාමී වේ, RAM L1 හැඹිලි සහ රෙජිස්ටාර් වලට වඩා මන්දගාමී වේ, සහ අන්තර්ජාල මෙහෙයුම් දින නියමයක් නොමැතිව අවහිර විය හැකිය (සහ ඕනෑම වේලාවක අසාර්ථක වේ).
සංවර්ධකයින්ට දත්ත ව්යුහයන් සහ ඇල්ගොරිතම පිළිබඳ මෙවලම් පෙට්ටියක් හුරුපුරුදු විය යුතු අතර එමඟින් ඔවුන්ට කාර්යය සඳහා නිවැරදි මෙවලම් පහසුවෙන් භාවිතා කළ හැකිය.
ඕනෑ තරම් දැනුම සහ පුද්ගලික මෙවලම් පෙට්ටියක් තිබීම ඔබට පහසුවෙන් උත්සාහ කළ හැකිය. අනවශ්ය විය හැකි බව මතු කර දැක්වීම බවට විශාල වෙහෙසක් දමා ඇත (සහ මම වරක් වඩා වැඩි බව උගුළට වැටීමෙන් පිළිගන්න) නපුර. නමුත් ප්රශස්තිකරණය අරාව වෙනුවට කට්ටලයක් / හැෂ් ටේබල් එකක් තෝරා ගැනීම හෝ නූල් [] වෙනුවට ද්විත්ව [] සංඛ්යා ලැයිස්තුවක් ගබඩා කිරීම තරම් පහසු වන විට , එසේ නොවන්නේ මන්ද? මම මෙහි නුත් සමඟ එකඟ නොවිය හැකිය, මට විශ්වාස නැත, නමුත් මම හිතන්නේ ඔහු කතා කළේ පහත් මට්ටමේ ප්රශස්තිකරණය ගැන වන අතර මම කතා කරන්නේ ඉහළ මට්ටමේ ප්රශස්තිකරණය ගැන ය.
මතක තබා ගන්න, එම උපුටා ගැනීම මුලින් 1974 සිට ය. 1974 දී පරිගණක මන්දගාමී වූ අතර පරිගණක බලය මිල අධික විය. මම හිතන්නේ ඒක තමයි නුත්ට විරුද්ධ වුණේ. ඔහු "කාර්ය සාධනය ගැන කිසිසේත් කරදර නොවන්න" යැයි නොකියයි, මන්ද 1974 දී එය පිස්සු කතාවක් වනු ඇත. නුත් පැහැදිලි කළේ ප්රශස්තිකරණය කරන්නේ කෙසේද යන්නයි ; කෙටියෙන් කිවහොත්, යමෙකු අවධානය යොමු කළ යුත්තේ බාධක කෙරෙහි පමණක් වන අතර, එසේ කිරීමට පෙර ඔබ බාධක සොයා ගැනීම සඳහා මිනුම් සිදු කළ යුතුය.
ඔබ මැනීමට වැඩසටහනක් ලියන තුරු ඔබට බාධක සොයාගත නොහැකි බව සලකන්න, එයින් අදහස් කරන්නේ මැනීමට කිසිවක් පැවතීමට පෙර සමහර කාර්ය සාධන තීරණ ගත යුතු බවයි. සමහර විට මෙම තීරණ ඔබ වැරදියි නම් වෙනස් කිරීම අපහසු වේ. මේ හේතුව නිසා, දෘඩ දත්ත නොමැති විට සාධාරණ තීරණ ගැනීමට ඔබට හැකි වන දේ සඳහා පොදු අදහසක් තිබීම හොඳය.
ප්රශස්තිකරණය කිරීමට කොතරම් ඉක්මනින්ද, සහ කාර්ය සාධනය ගැන කොපමණ කරදර විය යුතුද යන්න රැකියාව මත රඳා පවතී. ඔබ කිහිප වතාවක් පමණක් ධාවනය වන ස්ක්රිප්ට් ලිවීමේදී, කාර්ය සාධනය ගැන කරදර වීම සාමාන්යයෙන් සම්පූර්ණ කාලය නාස්තියකි. නමුත් ඔබ මයික්රොසොෆ්ට් හෝ ඔරකල් සඳහා වැඩ කරන්නේ නම් සහ ඔබ වෙනත් සංවර්ධකයින් දහස් ගණනක් විවිධ ආකාරවලින් භාවිතා කිරීමට යන පුස්තකාලයක වැඩ කරන්නේ නම් , එයින් නිරය ප්රශස්ත කිරීම සඳහා ගෙවිය හැකිය, එවිට ඔබට විවිධත්වය ආවරණය කළ හැකිය නඩු කාර්යක්ෂමව භාවිතා කරන්න. එසේ වුවද, කාර්ය සාධනයේ අවශ්යතාවය සෑම විටම කියවීමේ හැකියාව, නඩත්තු කිරීමේ හැකියාව, අලංකාරය, විස්තීරණතාව සහ යනාදිය සමඟ සමතුලිත විය යුතුය.