මෙම ගැටලුවට අලුත් යමක් දායක විය හැකි යැයි මම බලාපොරොත්තු වෙමි. ඔබේ සමස්ත රෙදි සෝදන කාර්ය සාධනය මන්දගාමී නොකර, ඔබට පෙර සැකසුම් කළ හැකි කරුණු දෙකක් ඇති බව සියලු පිළිතුරු නොසලකා හරින බව මම දුටුවෙමි .
එසේම, විශාල පවුල් සඳහා වුවද මේස් විශාල ප්රමාණයක් උපකල්පනය කිරීමට අපට අවශ්ය නැත. මේස් ලාච්චුවෙන් ඉවතට ගෙන ඒවා පැළඳ සිටින අතර, පසුව ඒවා සේදීමට පෙර නැවතී සිටින ස්ථානයක (සමහර විට බඳුනක්) විසි කරනු ලැබේ. බින් ලයිෆෝ-ස්ටැක් යැයි මා නොකියන අතර, එය උපකල්පනය කිරීම ආරක්ෂිත යැයි මම කියමි
- මිනිස්සු මේස් දෙකම දළ වශයෙන් බඳුනේ එකම ප්රදේශයට විසි කරති,
- බඳුන කිසිදු අවස්ථාවක අහඹු ලෙස සිදු නොවේ
- මෙම බඳුනේ ඉහළ සිට ගත් ඕනෑම උප කුලකයක සාමාන්යයෙන් යුගලයක මේස් දෙකම අඩංගු වේ.
මා දන්නා සියලුම රෙදි සෝදන යන්ත්ර ප්රමාණයෙන් සීමිත බැවින් (ඔබට සේදීම සඳහා මේස් කීයක් තිබුණද), සහ රෙදි සෝදන යන්ත්රයේ සත්ය සසම්භාවී වීම සිදුවන්නේ, අප සතුව මේස් කීයක් තිබුණත්, අපට සෑම විටම කුඩා අනු කොටස් තිබේ. සිංගල්ටන්.
අපගේ පෙර සැකසුම් අදියර දෙක වන්නේ පිරිසිදු ඇඳුම් පමණක් නොව වියලි වන මේස් ලබා ගැනීම සඳහා අප විසින් කළ යුතු "ඇඳුම් ආයිත්තම් කට්ටලයට මේස් දැමීම" සහ "ඇඳුම් ආයිත්තම් කට්ටලයෙන් මේස් ගැනීම" ය. රෙදි සෝදන යන්ත්ර මෙන්, ඇඳුම් ආයිත්තම් සීමිත වන අතර, අපි මේස් දෘශ්යමාන කරන රේඛාවේ මුළු කොටසම අප සතුව ඇතැයි මම සිතමි.
Put_socks_on_line () සඳහා ඇල්ගොරිතම මෙන්න:
while (socks left in basket) {
take_sock();
if (cluster of similar socks is present) {
Add sock to cluster (if possible, next to the matching pair)
} else {
Hang it somewhere on the line, this is now a new cluster of similar-looking socks.
Leave enough space around this sock to add other socks later on
}
}
මේස් එහා මෙහා ගෙනයාම හෝ හොඳම ගැලපීම සෙවීම සඳහා ඔබේ කාලය නාස්ති නොකරන්න, මේ සියල්ල O (n) වලින් කළ යුතු අතර, ඒවා පිළිවෙලට තැබීමට අවශ්ය නොවේ. මේස් තවමත් යුගලනය වී නැත, අපට ඇත්තේ රේඛාවේ සමානතා පොකුරු කිහිපයක් පමණි. අපට මෙහි සීමිත මේස් කට්ටලයක් තිබීම ප්රයෝජනවත් වේ, මෙය අපට “හොඳ” පොකුරු නිර්මාණය කිරීමට උපකාරී වේ (නිදසුනක් ලෙස, මේස් කට්ටලයේ කළු මේස් පමණක් තිබේ නම්, වර්ණ අනුව පොකුරු කිරීම යා යුතු මාර්ගය නොවේ)
Take_socks_from_line () සඳහා ඇල්ගොරිතම මෙන්න:
while(socks left on line) {
take_next_sock();
if (matching pair visible on line or in basket) {
Take it as well, pair 'em and put 'em away
} else {
put the sock in the basket
}
ඉතිරි පියවරවල වේගය වැඩි දියුණු කිරීම සඳහා, ඊළඟ මේස් අහඹු ලෙස තෝරා නොගැනීම wise ානවන්ත බව මම පෙන්වා දිය යුතුය, නමුත් සෑම පොකුරකින්ම මේස් පසු අනුපිළිවෙලින් මේස් ගැනීම. පෙර සැකසුම් පියවර දෙකම මේස් රේඛාව හෝ කූඩය මත තැබීමට වඩා වැඩි කාලයක් ගත නොකරයි, එය අප කුමක් කළ යුතු වුවත්, මෙය රෙදි සෝදන කාර්ය සාධනය බෙහෙවින් වැඩි කළ යුතුය.
මෙයින් පසු, හැෂ් කොටස් කිරීමේ ඇල්ගොරිතම කිරීම පහසුය. සාමාන්යයෙන්, මේස් වලින් 75% ක් පමණ දැනටමත් යුගලනය වී ඇති අතර, මේස් ඉතා කුඩා උප කුලකයක් මා අතහැර දමා ඇති අතර, මෙම උප කුලකය දැනටමත් (තරමක්) පොකුරු කර ඇත (පෙර සැකසුම් පියවරෙන් පසු මම මගේ කූඩයට එතරම් එන්ට්රොපිය හඳුන්වා නොදෙමි). තවත් දෙයක් නම්, ඉතිරි පොකුරු එකවර හැසිරවිය හැකි තරම් කුඩා වීම නිසා මුළු පොකුරක්ම කූඩයෙන් ඉවතට ගත හැකිය.
Sort_remaining_clusters () සඳහා ඇල්ගොරිතම මෙන්න:
while(clusters present in basket) {
Take out the cluster and spread it
Process it immediately
Leave remaining socks where they are
}
ඊට පසු, ඉතිරිව ඇත්තේ මේස් කිහිපයක් පමණි. මෙහිදී මා කලින් යුගලනය නොකළ මේස් පද්ධතියට හඳුන්වා දී විශේෂ ඇල්ගොරිතමයකින් තොරව ඉතිරි මේස් සැකසීම සිදු කරයි - ඉතිරි මේස් ඉතා ස්වල්පයක් වන අතර දෘශ්යමය වශයෙන් ඉතා වේගයෙන් සැකසිය හැක.
ඉතිරිව ඇති සියලුම මේස් සඳහා, ඔවුන්ගේ සගයන් තවමත් සෝදා නැති බව මම සිතමි. කාලයත් සමඟ ඔබ යුගල නොකළ මේස්වල වර්ධනයක් ලියාපදිංචි කරන්නේ නම් ("මේස් කාන්දුවක්"), ඔබ ඔබේ බඳුන පරීක්ෂා කළ යුතුය - එය අහඹු ලෙස ලැබෙනු ඇත (ඔබට එහි නිදා සිටින බළලුන් සිටීද?)
මෙම ඇල්ගොරිතමයන් බොහෝ උපකල්පන ගන්නා බව මම දනිමි: යම් ආකාරයක LIFO තොගයක්, සීමිත, සාමාන්ය රෙදි සෝදන යන්ත්රයක් සහ සීමිත සාමාන්ය ඇඳුම් ආයිත්තම් කට්ටලයක් ලෙස ක්රියා කරන බඳුනක් - නමුත් මෙය තවමත් විශාල මේස් සංඛ්යාවක් සමඟ ක්රියා කරයි.
සමාන්තරකරණය ගැන: ඔබ මේස් දෙකම එකම බඳුනකට විසි කරන තාක් කල්, ඔබට එම සියලු පියවර පහසුවෙන් සමාන්තරගත කළ හැකිය.