ගොඩවල් වලින් මේස් කාර්යක්ෂමව සම්බන්ධ කරන්නේ කෙසේද?


3914

ඊයේ මම පිරිසිදු රෙදි සෝදන යන්ත්‍රයෙන් මේස් යුගලනය කරමින් සිටි අතර එය කරන ආකාරය එතරම් කාර්යක්ෂම නොවේ. මම බොළඳ සෙවීමක් කරමින් සිටියෙමි - එක් මේස් එකක් තෝරාගෙන එහි යුගලය සොයා ගැනීම සඳහා ගොඩට “නැවත” යෙදීම. ඒ කට එල්ලාවල මහතා n / 2 * n / 4 අවශ්ය = n 2 සාමාන්යයෙන් මේස් / 8.

පරිගණක විද්‍යා ist යෙකු ලෙස මම සිතුවේ මට කුමක් කළ හැකිද? O (NlogN) විසඳුමක් ලබා ගැනීම සඳහා වර්ග කිරීම (ප්‍රමාණය / වර්ණය / ... අනුව) ඇත්ත වශයෙන්ම මතකයට පැමිණියේය.

මගේ මේස් අනුපිටපත් කිරීමට මට නොහැකි නිසා (මට හැකි නම් එය හොඳ විය හැකි නමුත්) සේදීම හෝ වෙනත් ස්ථානගත නොවන විසඳුම් විකල්පයක් නොවේ.

ඉතින්, ප්රශ්නය මූලික වශයෙන්:

මූලද්‍රව්‍ය nඅඩංගු මේස් යුගල ගොඩක් ලබා දී ඇති විට 2n(එක් එක් මේස් එකට හරියටම ගැලපෙන යුගලයක් ඇතැයි උපකල්පනය කරන්න), ල ar ු ගණක අමතර ඉඩ ප්‍රමාණයක් සමඟ ඒවා කාර්යක්ෂමව සම්බන්ධ කිරීමට හොඳම ක්‍රමය කුමක්ද? (අවශ්‍ය නම් එම තොරතුරු ප්‍රමාණය මට මතක ඇතැයි මම විශ්වාස කරමි.)

පහත සඳහන් කරුණු ආමන්ත්‍රණය කරන පිළිතුරක් මම අගය කරමි:

  • මේස් විශාල සංඛ්‍යාවක් සඳහා පොදු න්‍යායාත්මක විසඳුමක්.
  • ඇත්ත මේස් ගණන එතරම් විශාල නොවේ, මගේ සහකරු හෝ සහකාරිය විශ්වාස නොකරන අතර මට යුගල 30 කට වඩා තිබේ. (මගේ මේස් සහ ඇය අතර වෙනස හඳුනා ගැනීම තරමක් පහසු ය; මෙය ද භාවිතා කළ හැකිද?)
  • එය මූලද්‍රව්‍ය වෙනස ගැටලුවට සමානද ?

448
රෙදි සෝදන ගොඩෙන් හරියටම එකක් යුගලනය කිරීමට මම පරෙවි කුහර මූලධර්මය භාවිතා කරමි. මට විවිධ වර්ණ මේස් 3 ක් (රතු, නිල් සහ කොළ) සහ එක් එක් වර්ණ යුගල 2 ක් ඇත. මම සෑම විටම මේස් 4 ක් තෝරා ගන්නා අතර මම සෑම විටම යුගලයක් සාදා වැඩට යන්නෙමි.
ශ්‍රිනිවාස්

59
තවත් පරෙවි කුහර මූලධර්මය: ඔබ n / 2 +1 මේස් උප කුලකයක් ගන්නේ නම්, මෙම උප කුලකයේ අවම වශයෙන් එක් යුගලයක්වත් තිබිය යුතුය .
wildplasser

40
නියම ප්‍රශ්නය! අදාළ ගැටළුවක් පිළිබඳ මගේ ලිපිය ගැන ඔබ උනන්දු විය හැකිය, එය ගැලපෙන මේස් දෙකක් ගොඩින්
එරික් Lippert

337
waitpidදෙමව්පියන් ලෙස ඔබ මේස් වර්ග කිරීම පවා නොකිරීමට දරුවෙකු බිහි නොකරන්නේ මන්ද ?
Mxyk

138
මම මෙම ගැටළුව විසඳුවේ සුදු දණහිසට ඉහළ මේස් පමණක් තිබීමෙනි. ඒවා සියල්ලම ගැලපේ. මට ඕනෑම මේස් දෙකක් අහඹු ලෙස ගොඩේ සිට අල්ලා ගත හැකි අතර ඒවා ගැලපේ. මේස් යුගල නොකිරීමෙන් මම ගැටලුව තවදුරටත් සරල කරමි. මා සතුව මේස් ලාච්චුවක් ඇත. මම සෑම උදෑසනකම ලාච්චුවෙන් අහඹු ලෙස දෙකක් අල්ලා ගනිමි. මම එය O (0) දක්වා සරල කර ඇත. ඊට වඩා සරල දෙයක් ලබා ගත නොහැක. :)
ලී

Answers:


2453

වර්ග කිරීමේ විසඳුම් යෝජනා කර ඇත, නමුත් වර්ග කිරීම ටිකක් වැඩියි : අපට ඇණවුමක් අවශ්‍ය නැත; අපට අවශ්‍ය වන්නේ සමානාත්මතා කණ්ඩායම් පමණි .

එබැවින් හෑෂ් කිරීම ප්‍රමාණවත් වේ (හා වේගවත්).

  1. මේස් වල එක් එක් වර්ණය සඳහා, ගොඩවල් සාදන්න . ඔබේ ආදාන කූඩයේ ඇති සියලුම මේස් වලට වඩා වෙනස් කර ඒවා වර්ණ ගොඩවල් වලට බෙදා දෙන්න .
  2. සෑම ගොඩකටම වඩා වෙනස් කර වෙනත් මෙට්‍රික් (උදා. රටාව) මඟින් දෙවන ගොඩවල් වලට බෙදා දෙන්න
  3. ඔබට දෘශ්‍යමය වශයෙන් ක්ෂණිකව සැකසිය හැකි ඉතා කුඩා ගොඩවල් වලට සියලුම මේස් බෙදා හරින තෙක් මෙම යෝජනා ක්‍රමය පුනරාවර්තනය කරන්න

මේ ආකාරයේ පුනරාවර්තන හැෂ් කොටස් කිරීම ඇත්ත වශයෙන්ම සිදු කරනුයේ විශාල දත්ත කට්ටලවලට වඩා හැෂ් එක්වීමට හෝ හැෂ් එකතු කිරීමට අවශ්‍ය වූ විට SQL සේවාදායකය විසිනි. එය ස්වාධීනව බොහෝ කොටස් වලට එහි බිල්ඩ් ආදාන ප්‍රවාහය බෙදා හරිනු ලැබේ. මෙම යෝජනා ක්‍රමය අත්තනෝමතික දත්ත සහ බහු CPU වලට රේඛීයව පරිමාණය කරයි.

සෑම බාල්දියක්ම ඉතා ඉක්මණින් සැකසීමට තරම් කුඩා වන තරම් බාල්දි සපයන බෙදාහැරීමේ යතුරක් (හැෂ් යතුර) ඔබට සොයාගත හැකි නම් ඔබට පුනරාවර්තන කොටස් කිරීම අවශ්‍ය නොවේ . අවාසනාවට, මේස් වලට එවැනි දේපලක් ඇතැයි මම නොසිතමි.

සෑම මේස් එකකම “PairID” නම් පූර්ණ සංඛ්‍යාවක් තිබේ නම් PairID % 10(අන්තිම ඉලක්කම්) අනුව පහසුවෙන් ඒවා බාල්දි 10 කට බෙදා දිය හැකිය .

මට සිතිය හැකි හොඳම තාත්වික කොටස් කිරීම ගොඩවල් වල සෘජුකෝණාස්රයක් නිර්මාණය කිරීම : එක් මානයක් වර්ණය, අනෙක රටාවයි. ඇයි සෘජුකෝණාස්රයක්? අපට O (1) ගොඩවල් වලට අහඹු ලෙස ප්‍රවේශය අවශ්‍ය නිසා. (ත්රිමාණ කියුබොයිඩ් ද ක්රියා කරයි, නමුත් එය එතරම් ප්රායෝගික නොවේ.)


යාවත්කාලීන කිරීම:

සමාන්තරකරණය ගැන කුමක් කිව හැකිද? බහුවිධ මිනිසුන්ට මේස් වේගයෙන් ගැලපේද?

  1. සරලම සමාන්තරකරණ උපායමාර්ගය නම්, බහු කම්කරුවන් ආදාන කූඩයෙන් ගෙන මේස් ගොඩවල් මත තැබීමයි. මෙය මෙතරම් විශාලයි - මිනිසුන් 100 ක් ගොඩවල් 10 කට වඩා සටන් කරන බව සිතන්න. සමමුහුර්ත කිරීමේ පිරිවැය (අතින් isions ට්ටන සහ මානව සන්නිවේදනය ලෙස පෙනී යයි) කාර්යක්ෂමතාව සහ වේගය විනාශ කරයි ( විශ්ව පරිමාණතා නීතිය බලන්න!). මෙය අවහිරතා ඇතිවීමේ අවදානමක් තිබේද? නැත, මන්ද සෑම සේවකයෙකුටම වරකට එක් ගොඩකට ප්‍රවේශ විය යුතුය. එක් "අගුලක්" සමඟ අවහිරයක් තිබිය නොහැක. ගොඩවල් වලට මිනිසුන් සම්බන්ධීකරණය කරන්නේ කෙසේද යන්න මත පදනම්ව සජීවී අගුළු දැමිය හැකිය. ඔවුන් අහඹු පසුබෑමක් භාවිතා කරයිජාල කාඩ්පත් මෙන් භෞතික මට්ටමින් එය කරන්නේ ජාල කම්බියට පමණක් ප්‍රවේශ විය හැකි කාඩ් පත කුමක්ද යන්න තීරණය කිරීමයි. එය ජාතික හැඳුනුම්පත් සඳහා වැඩ කරන්නේ නම් , එය මිනිසුන්ට ද වැඩ කළ යුතුය.
  2. සෑම සේවකයෙකුටම තමන්ගේම ගොඩවල් තිබේ නම් එය දින නියමයක් නොමැතිව පරිමාණය කරයි. එවිට කම්කරුවන්ට ආදාන කූඩයෙන් විශාල මේස් කැබලි ලබා ගත හැකිය (ඔවුන් එය කරන්නේ කලාතුරකිනි) සහ මේස් බෙදා හැරීමේදී ඔවුන් සමමුහුර්ත කිරීම අවශ්‍ය නොවේ (ඔවුන්ට නූල්-දේශීය ගොඩවල් ඇති නිසා). අවසානයේදී, සියළුම කම්කරුවන්ට ඔවුන්ගේ ගොඩවල් එකතු කළ යුතුය. කම්කරුවන් සමූහ ගසක් සාදන්නේ නම් එය O (ලොග් (සේවක ගණන * එක් සේවකයෙකුට)) කළ හැකි යැයි මම විශ්වාස කරමි .

මූලද්රව්ය වෙනස පිළිබඳ ගැටළුව ගැන කුමක් කිව හැකිද? ලිපියේ සඳහන් වන පරිදි, මූලද්‍රව්‍යයේ වෙනස පිළිබඳ ගැටළුව විසඳා ගත හැකිය O(N). මේස් ගැටළුවට මෙය සමාන වේ (එසේම O(N), ඔබට අවශ්‍ය වන්නේ එක් බෙදාහැරීමේ පියවරක් පමණි (මම ගණනය කිරීම් වලදී මිනිසුන් නරක බැවින් පමණක් පියවර කිහිපයක් යෝජනා කළෙමි - ඔබ බෙදා md5(color, length, pattern, ...)හැරියහොත් එක් පියවරක් ප්‍රමාණවත්ය , එනම් සියලු ගුණාංගවල පරිපූර්ණ හැෂ් )).

පැහැදිලිවම, කෙනෙකුට වඩා වේගයෙන් යා නොහැක O(N), එබැවින් අපි ප්‍රශස්ත පහළ සීමාවට ළඟා වී සිටිමු .

ප්‍රතිදානයන් හරියටම සමාන නොවුනත් (එක් අවස්ථාවකදී බූලියන් එකක් පමණි. අනෙක් අවස්ථාවේදී මේස් යුගල), අසමමිතික සංකීර්ණතා සමාන වේ.


72
මම කරන දේ මෙයයි! මම ගොඩවල් සාදන්නේ මේස් විවෘත කිරීමේ ශෛලිය මත ය (මට ඇත්තේ සුදු පමණි), එමඟින් මට එක් එක් ඉහළට ඉක්මනින් ගැලපෙන තරම් "බාල්දි" ලබා දේ.
ස්කොට් චේම්බර්ලින්

30
මම මේස් සමඟ මෙය අත්හදා බැලුවෙමි (මට පහසුවෙන් යුගල 30+ ක් ඇත) මිනිසා එය වේගවත්ය. මට හමු වූ එක් ගැටළුවක් නම් මට ප්‍රමාණවත් තරම් හැෂ් ඇල්ගොරිතමයක් නොමැති විට (කිසිදු රටාවක් නොමැතිව මට සුදු මේස් ගොඩක් තිබේ) එබැවින් එය දුෂ්කර වේ. එවැනි අවස්ථාවක, එය කිරීමට ප්‍රශස්ත ක්‍රමය කුමක්ද?
NothingsImpossible

56
OthNothingsImpossible දුර්වල වෙබ් සේවාදායකයෙකුට හැෂ් ision ට්ටන ප්‍රහාර දැනෙන්නේ එලෙසයි! සුදු මේස් කිසියම් ගුණාංගයකින් වෙන්කර හඳුනාගත හැකිද? ඔබට ඒවා බෙදා හැරිය හැකි යමක් තිබිය යුතුය. එසේ නොමැතිනම් ඔබට අත්තනෝමතික ලෙස යුගල සෑදිය හැකිය.
usr

37
මෙය රැඩික්ස් වර්ග කිරීමකි, එය නිවැරදි පිළිතුර බව මම එකඟ වෙමි. Ark මාක්පීටර්ස් ඔබට බැලීමේ වගුවක් අවශ්‍ය යැයි මම නොසිතමි. මේස් හරහා තනි රේඛීය ගමන් කිරීමෙන් මේස් සංඛ්‍යා දෛශික බවට පරිවර්තනය කළ හැකි අතර, "මේස් කොටස" සිතියම්ගත කිරීම බාල්දිය සුළු වේ. මේස් ඔබට දෛශික සමඟ නූල් වලින් බැඳ තැබිය හැකි අතර එවිට ඔබට අවසානයේ තවත් රේඛීය අවසරයක් අවශ්‍ය නොවේ.
පොයින්ටි

49
මම විශ්ව විද්‍යාලයට ගිය කොල්ලෙක්ට ඇත්තටම PairIDs තිබුණා. එය එක් එක් මේස් යුගල මත නූල් වලින් මැසුවේය: 1, 2, 3, 4 ...
රයන් ලුන්ඩි

580

මිනිස් මොළයේ ගෘහ නිර්මාණ ශිල්පය නූතන CPU එකකට වඩා සම්පූර්ණයෙන්ම වෙනස් බැවින් මෙම ප්‍රශ්නය ප්‍රායෝගික අර්ථයක් නොදක්වයි.

"ගැලපෙන යුගලයක් සොයා ගැනීම" විශාල නොවන කට්ටලයක් සඳහා එක් මෙහෙයුමක් විය හැකිය යන කාරණය භාවිතා කරමින් මිනිසුන්ට CPU ඇල්ගොරිතම ජය ගත හැකිය.

මගේ ඇල්ගොරිතම:

spread_all_socks_on_flat_surface();
while (socks_left_on_a_surface()) {
     // Thanks to human visual SIMD, this is one, quick operation.
     pair = notice_any_matching_pair();
     remove_socks_pair_from_surface(pair);
}

අවම වශයෙන් මෙය මම සැබෑ ජීවිතයේ භාවිතා කරන අතර එය ඉතා කාර්යක්ෂම බව මට පෙනේ. අවාසිය නම් එයට පැතලි මතුපිටක් අවශ්‍ය නමුත් එය සාමාන්‍යයෙන් බහුල වීමයි.


229
මේස් ගණන වැඩි වන විට මිනිසාගේ සිම්ඩ් CPU එකකට වඩා හොඳ නොවේ.
බොරු රයන්

25
හොඳම පිළිතුර, IMO. පරිගණක ඇල්ගොරිතමයකට එදිනෙදා ගැටලුව අවම කිරීම විනෝදජනක හා දක්ෂ (සහ SO සඳහා සුදුසු) වන අතර, මිනිසාගේ ඇසේ / මොළයේ විභේදන බලය ඩොලර් 60 ක් තරම් කුඩා කට්ටලයක් සඳහා භාවිතා කිරීම වඩාත් අර්ථවත් කරයි.
drug_user841417

13
IeLieRyan මේස් ඒකාකාරව බෙදා හරිනු ලැබුවහොත්, උපන් දින විරුද්ධාභාෂය හේතුවෙන් ප්‍රමාණවත් තරම් කුඩා මේස් කට්ටලයක යුගලයක් ඔබ නොදැනෙනු ඇත (ඔබට අත්තනෝමතික නිරවද්‍යතාවයකින් වර්ණ වෙන්කර හඳුනාගත නොහැකි නම්, මම සැක කරමි) එබැවින් මෙහි ඇති බාධකය නොවනු ඇත. මිනිස් වර්ණ ගැලපෙන ඇල්ගොරිතම නමුත් පැතිරීමේ පියවර.
තෝමස්

13
p dpc.ucore.info නැත, ඔවුන් සතුව විවිධ වියන ලද කෆ් රටා, කෆ් දිග, සමස්ත දිග සහ කළු සෙවන ඇති නිසා (මගේ බිරිඳ අවසාන වරට මට ශාරීරිකව රිදවනු ඇත).
ක්රිස්තියානි

200
ඔබට ඊටත් වඩා මේස් සංඛ්‍යාවක් ඇති බවට ඔබට හොඳ බලාපොරොත්තුවක් තිබුනි, එසේ නොවුවහොත් ඔබ දිගු කලක් මේස්
නැමෙනු ඇත

258

1 වන අවස්ථාව : සියලුම මේස් එක සමාන වේ (සැබෑ ජීවිතයේ දී මම කරන්නේ මෙයයි).

යුගලයක් සෑදීමට ඔවුන්ගෙන් දෙදෙනෙකු තෝරන්න. ස්ථාවර කාලය.

2 වන අවස්ථාව : නියත සංයෝජන සංඛ්‍යාවක් ඇත (හිමිකාරිත්වය, වර්ණය, ප්‍රමාණය, වයනය ආදිය).

රේඩික්ස් වර්ග කිරීම භාවිතා කරන්න . සැසඳීම අවශ්‍ය නොවන බැවින් මෙය රේඛීය කාලය පමණි.

3 වන අවස්ථාව : සංයෝජන ගණන කල්තියා නොදනී (සාමාන්‍ය අවස්ථාව).

මේස් දෙකක් යුගල වශයෙන් එන්නේ දැයි පරීක්ෂා කිරීම සඳහා අප කළ යුතුය. O(n log n)සංසන්දනය මත පදනම් වූ වර්ග කිරීමේ ඇල්ගොරිතම වලින් එකක් තෝරන්න .

කෙසේ වෙතත් සැබෑ ජීවිතයේ දී මේස් ගණන සාපේක්ෂව කුඩා (නියත) වන විට, මෙම න්‍යායාත්මකව ප්‍රශස්ත ඇල්ගොරිතම හොඳින් ක්‍රියාත්මක නොවේ. න්‍යායාත්මකව චතුරස්රාකාර කාලයක් අවශ්‍ය වන අනුක්‍රමික සෙවුමට වඩා වැඩි කාලයක් ගතවනු ඇත.


9
> අනුක්‍රමික සෙවුමට වඩා වැඩි කාලයක් ගතවනු ඇත, එයට න්‍යායේ චතුරස්රාකාර කාලයක් අවශ්‍ය වේ. ඔව්, ඒ නිසයි මම මෙය කිරීමට අකමැති, සමහර විට මම මගේ මේස් සියල්ල ඉවත දමා 1 වන නඩුවෙන් ආරම්භ කළ යුතුයි.
නිල්ස්

57
සියලු සමාන මේස් තිබීමේ අවාසිය නම් ඒවා විවිධ අනුපාතයන්ට අනුව වයස්ගත වීමයි. එබැවින් ඔබ තවමත් ඒවා පැළඳ සිටින්නේ කෙසේද යන්න මත පදනම්ව ඒවා ගැලපීමට උත්සාහ කරයි. (එය රටාව අනුව ගැලපීමට වඩා අමාරුයි)
එස්ඩීසී

120
සමාන මේස් යුගල 60 ක් තිබීමේ ගැටළුව “එය යුගල කිරීම පහසු කරන නිසා” එය පරිගණක සමඟ ඔබ වැඩ කරන හැඟීම මිනිසුන්ට ලබා දෙයි.
ස්ටීව් ඉව්ස්

13
කේස් 1 යනු යුගලයක් එකට නැවීම වැනි මෙහෙයුමක් සිදුවන විට නියත කාලයක් නොවේ. මෙම අවස්ථාවෙහිදී, එය කුඩාම නියත සාධකය සමඟ රේඛීය වේලාවයි (ඒ සඳහා සාධනය පා er කයාට අභ්‍යාසයක් ලෙස ඉතිරිව ඇත). එක් යුගලයක් සහ මේස් පිරවූ බාල්දියක් එකම වේලාවක නැවීමට කිසිවෙකුට නොහැක. කෙසේ වෙතත්, එය රේඛීයව පරිමාණය කරයි. ඇම්ඩාල්ගේ නියමය අනුව, එය අසීමිත වේගවත් කිරීමක් ඇති අතර, ඉහළින් නොසලකා හරිනු ලැබේ. ගුස්ටැෆ්සන්ගේ නියමය අනුව, ඔබට ප්‍රමාණවත් තරම් කම්කරුවන් ලබා දී ඇති එක් යුගලයක් නැවීමට අවශ්‍ය තරම් යුගල ගණනක් නැමිය හැකිය (පා the කයාට අභ්‍යාසයක් ලෙස ඉතිරිව ඇති ප්‍රමාණය), ඉහළින් නොසලකා හරිමින්.
acelent

8
AuPauloMadeira වර්ග කිරීම නියත කාලයයි - ඔබ ගොඩ ගසා ඔබේ ලාච්චුවේ දමන්න. මෙම නඩුවේ ඇති එකම මෙහෙයුම ඇත්ත වශයෙන්ම මේස් ඔබේ පාද මත තැබීමයි. කාර්ය සාධනය ලබා ගත හැක්කේ මේස් ඇඳීම කල්දැමීමෙනි, සමහර විට අභ්‍යවකාශයේ යම් කැපකිරීමක් කළ හැකිය. මෙය වටිනවා යැයි මම තර්ක කරමි; මට සාමාන්‍යයෙන් මගේ බිරිඳ සමඟ මෙම තර්කය නැති වේ.
ට්‍රැවිස්

157

ඇල්ගොරිතම නොවන පිළිතුර, නමුත් මම එය කරන විට “කාර්යක්ෂම”:

  • පියවර 1) ඔබගේ දැනට පවතින සියලුම මේස් ඉවතලන්න

  • පියවර 2) වෝල්මාර්ට් වෙත ගොස් සුදු පැකට් 10 - n පැකට් සහ කළු පැකට් මගින් ඒවා මිලදී ගන්න. එදිනෙදා ජීවිතයේ වෙනත් වර්ණ අවශ්ය නොවේ.

වරින් වර, මට මෙය නැවත කළ යුතුව ඇත (නැතිවූ මේස්, හානියට පත් මේස් ආදිය), සහ හොඳ මේස් නිතර නිතර ඉවත දැමීමට මම අකමැතියි (තවද ඔවුන් එකම මේස් යොමු කිරීම දිගටම විකුණනු ඇතැයි මම ප්‍රාර්ථනා කළෙමි!), එබැවින් මම මෑතකදී ගත්තා. වෙනස් ප්‍රවේශයක්.

ඇල්ගොරිතම පිළිතුර:

දෙවන මේස් තොගය සඳහා ඔබ එක් මේස් එකක් පමණක් අඳින්නේ නම්, ඔබ කරන ආකාරයටම, බොළඳ සෙවුමක දී ගැලපෙන මේස් සොයා ගැනීමේ අවාසිය තරමක් අඩු ය.

  • එබැවින් ඒවායින් පහක් අහඹු ලෙස තෝරාගෙන ඒවායේ හැඩය හෝ දිග මතක තබා ගන්න.

පහක් ඇයි? සාමාන්‍යයෙන් මිනිසුන් හොඳයි, වැඩ කරන මතකයේ විවිධ මූලද්‍රව්‍ය පහක් හා හතක් අතර මතක තබා ගැනීම - ආර්පීඑන් තොගයකට සමාන මානව සමාන - පහක් ආරක්ෂිත පෙරනිමියකි.

  • 2n-5 තොගයෙන් එකක් ගන්න.

  • දැන් ඔබ ඇදගත් පස්දෙනා තුළ තරඟයක් (දෘශ්‍ය රටා ගැලපීම - මිනිසුන් කුඩා තොගයක් සමඟ හොඳයි), ඔබ එකක් සොයා නොගත්තොත්, එය ඔබේ පහට එකතු කරන්න.

  • අහඹු ලෙස මේස් තොගය තොගයෙන් තෝරාගෙන තරඟයක් සඳහා ඔබේ 5 + 1 මේස් සමඟ සසඳන්න. ඔබේ තොගය වර්ධනය වන විට, එය ඔබගේ ක්‍රියාකාරිත්වය අඩු කරන නමුත් ඔබේ අවාසි වැඩි කරයි. වඩා වේගවත්.

තරඟයක 50% ක පරතරයක් සඳහා ඔබට සාම්පල කීයක් ඇඳිය ​​යුතුද යන්න ගණනය කිරීම සඳහා සූත්‍රය ලිවීමට නිදහස් වන්න. IIRC එය අධි භූමිතික නීතියකි.

මම සෑම උදෑසනකම එය කරන අතර කලාතුරකින් දිනුම් ඇදීම් තුනකට වඩා අවශ්‍ය වේ - නමුත් මට nසමාන යුගල (10 ක් පමණ, නැතිවූ ඒවා දෙන්න හෝ ගන්න) mහැඩැති සුදු මේස් ඇත. දැන් ඔබට මගේ තොගයේ ප්‍රමාණය තක්සේරු කළ හැකිය :-)

BTW , මට යුගලයක් අවශ්‍ය සෑම අවස්ථාවකම සියලු මේස් වර්ග කිරීමේ ගනුදෙනු පිරිවැය එකවර සිදු කිරීම සහ මේස් බැඳ තැබීමට වඩා බෙහෙවින් අඩු බව මට පෙනී ගියේය. ඔබට මේස් බැඳීමට අවශ්‍ය නැති නිසාත්, අඩු වන ආන්තික ප්‍රතිලාභයක් ඇති නිසාත් (එනම්, ඔබ රෙදි සෝදන යන්ත්‍රයේ කොතැනක හෝ සිටින විට සහ ඔබට අවශ්‍ය මේස් දෙක තුන සොයමින් සිටී. ඔබේ මේස් ගැලපීම අවසන් කිරීමට සහ ඒ සඳහා ඔබට කාලය අහිමි වේ).


25
'ඇල්ගොරිතම නොවන' පිළිතුර සඳහා ඉහළට. මෙය හරියටම මම කරන අතර එය පුදුම සහගත ලෙස ක්‍රියා කරයි. සේදූ මේස් පිටුපසට තබා උදෑසන ලාච්චුවේ ඉදිරිපසින් ඇදගෙන ඔබේ මේස් තොගය 'කරකවන්න' නම් ආදේශන ගැටළුව ගැටළුවක් නොවේ. සියලුම මේස් ඒකාකාරව අඳිති. මම එක ඇඳුමක් ඇඳීම දැකීමට පටන් ගත් විට, මම සාප්පු ලැයිස්තුවේ තැබුවේ එම මුළු පන්තියේ මේස් සම්පූර්ණයෙන්ම ප්‍රතිස්ථාපනය කිරීමට ය. පැරණි මේස් සඳහා, මම හොඳම 20% ක් ගුඩ්විල් වෙත ලබා දෙමි (සිල්ලර බඩු කැබැල්ලක බැඳ ඇති බැවින් ඒවා නැවත මිශ්‍ර නොවනු ඇත). ඔබ මේස් නාස්ති නොකරයි, මේ අවස්ථාවේ දී, 80% ට ඉතිරිව ඇත්තේ මාස 6 ක් පමණි.
FastAl

2
BTW (1) ඔබේ මේස් බන්ධනය කිරීමෙන් ප්‍රත්‍යාස්ථතාව දිගු කර ඇති අතර එය ඉක්මණින් අසාර්ථක වනු ඇත. ඔබ සතුව ඇති අද්විතීය මේස් වර්ග සීමා කිරීම බන්ධනය අනවශ්‍ය ලෙස සිදු කරයි. (2) අද්විතීය මේස් සීමා කිරීමේ අවාසියක් නම්, ඇතැම් විලාසිතා අවශ්‍යතා ඇති පුද්ගලයින් සඳහා මෙම ක්‍රමය නුසුදුසු විය හැකිය.
FastAl

3
මම විශේෂයෙන් මෙහි පැමිණියේ ඔබේ “ඇල්ගොරිතම නොවන” පිළිතුර පළ කිරීමට ය. සැබෑ පරිගණක විද්‍යාවේ දී මෙන්, බොහෝ අය කිසි විටෙකත් දත්ත සහ එහි ව්‍යුහය කෙරෙහි ප්‍රමාණවත් අවධානයක් යොමු නොකරයි.
bkconrad

මම සෑම උදෑසනකම මෙම ඇල්ගොරිතම ප්‍රවේශය භාවිතා කරන අතර එය චමත්කාරයක් මෙන් ක්‍රියා කරයි! ඊට අමතරව, මම පසුව ඉවත ලන ලද මේස් වෙනත් ගොඩකට දැමුවෙමි (අවාසනාවකට මෙන් ඒවා කුණු කූඩයට දැමීමට කාලය සොයා ගැනීමට පෙර ඔවුන් නැවත මුල් ගොඩට පිවිසීමට සමත් වේ).
ඩොනාටාස් ඔල්සෙවියස්

3
White n සුදු සහ එම් පැකට් කළු. එදිනෙදා ජීවිතයේදී වෙනත් වර්ණ අවශ්‍ය නොවේ easy පහසු මේස් තෝරා ගැනීම සඳහා හොඳ සම්මත රීතියක් නම් ඇත්ත වශයෙන්ම ඒවා ඔබේ කලිසම් වල වර්ණයට හෝ ඔබේ පටියේ වර්ණයට අනුරූප විය යුතුය. මෙම හේතුව නිසා, බහුලව භාවිතා වන වර්ණ කළු, නිල්, අළු සහ දුඹුරු විය හැක. කෙනෙකුට සුදු මේස් බොහොමයක් අවශ්‍ය යැයි විශ්වාස කිරීම දුෂ්කර ය.
ඇන්ඩ්‍රියා ලාසරෝටෝ

106

මා කරන දෙය නම් මම පළමු මේස් එක ගෙන එය පහළට දැමීමයි (රෙදි සෝදන පාත්‍රයේ අද්දර). ඊට පස්සේ මම තවත් මේස් එකක් අරගෙන එය පළමු සොකට්ටුවට සමානදැයි බලන්න. එය එසේ නම්, මම ඔවුන් දෙදෙනාම ඉවත් කරමි. එය එසේ නොවේ නම්, මම එය පළමු මේස් එක අසල තැබුවෙමි. ඊටපස්සේ මම තුන්වෙනි මේස් එක අරගෙන එය පළමු දෙක සමඟ සසඳන්න (ඔවුන් තවමත් එහි සිටී නම්). ආදිය.

මේස් ඉවත් කිරීම විකල්පයක් යැයි උපකල්පනය කරමින් මෙම ප්‍රවේශය අරාව තුළ තරමක් පහසුවෙන් ක්‍රියාත්මක කළ හැකිය. ඇත්ත වශයෙන්ම, ඔබට මේස් "ඉවත් කිරීමට" පවා අවශ්ය නොවේ. ඔබට මේස් වර්ග කිරීම අවශ්‍ය නොවන්නේ නම් (පහත බලන්න), එවිට ඔබට ඒවා එහා මෙහා ගෙන යා හැකි අතර සියලු මේස් යුගල වශයෙන් යුගල වශයෙන් පෙළගස්වා ඇත.

මේස් සඳහා ඇති එකම මෙහෙයුම සමානාත්මතාවය සඳහා සංසන්දනය කිරීම යැයි උපකල්පනය කරමින්, මෙම ඇල්ගොරිතම මූලික වශයෙන් තවමත් n 2 ඇල්ගොරිතමයකි, නමුත් මම සාමාන්‍ය සිද්ධිය ගැන නොදනිමි (එය ගණනය කිරීමට කිසි විටෙකත් ඉගෙනගෙන නැත).

වර්ග කිරීම, ඇත්ත වශයෙන්ම කාර්යක්ෂමතාව වැඩි කරයි, විශේෂයෙන් සැබෑ ජීවිතයේ දී ඔබට වෙනත් මේස් දෙකක් අතර මේස් එකක් පහසුවෙන් "ඇතුළු කළ හැකිය". ගණනය කිරීමේදී ගසකට එය සාක්ෂාත් කරගත හැකි නමුත් එය අමතර ඉඩකි. ඇත්ත වශයෙන්ම, අපි නැවත NlogN වෙත පැමිණ සිටිමු (හෝ තව ටිකක්, නිර්ණායක වර්ග කිරීමෙන් සමාන මේස් කිහිපයක් තිබේ නම්, නමුත් එකම යුගලයකින් නොවේ).

ඒ හැර, මට කිසිවක් ගැන සිතිය නොහැකිය, නමුත් මෙම ක්‍රමය සැබෑ ජීවිතයේ ඉතා කාර්යක්ෂම බව පෙනේ. :)


7
මෙයද මා කරන දෙයකි, (ඔබ හුදෙක් අවකාශය අතහැර ගියහොත් ඇතුළු කිරීම් ද O (1) බව සලකන්න, නමුත් එය න්‍යායාත්මකව විශාල මේස් සංඛ්‍යාවක් සමඟ දුර්වල ලෙස පරිමාණය කරයි.
මූයිං තාරා

15
න්‍යායාත්මකව විශාල ප්‍රමාණයේ මේස් වර්ග සමඟ පරිමාණයන් දුර්වලයි
ස්ටීවන් ලූ

Te ස්ටීවන්ලු - මා කී පරිදි - එය n * n හෝ nLogn, ඔබ එය වර්ග කරන්නේද නැද්ද යන්න මත පදනම්ව. එබැවින් එය ඕනෑම වර්ග කිරීමේ ඇල්ගොරිතමයක් තරම් දුර්වල ලෙස පරිමාණය කරයි. ඔබට වේගවත් වීමට අවශ්‍ය නම්, ඒවා අංකනය කර රේඩික්ස් වර්ග කිරීම භාවිතා කරන්න.
විල්ක්ස්-

මෙය අත්‍යවශ්‍යයෙන්ම සොයාගත් නමුත් නොගැලපෙන මේස් හැෂ් මත පදනම් වූ සොයා බැලීමක ගබඩා කිරීමකි. පරිපූර්ණ හැෂ් එකක් සමඟ එය ඕ (එන්) වේ, නමුත් හැෂ් පරිහානියට පත්වීමට පටන් ගන්නා තරම් මේස් ඔබ සතුව තිබේ නම්, ඒ අනුව එය වඩාත් සංකීර්ණ වේ.
ජෝන් හැනා

3
මේස් යුගල කිරීමේ ඉලක්කයට තවත් මේස් 2 ක් අතර මේස් එකක් ඇතුළත් කිරීමෙන් ලැබෙන වටිනාකම කුමක්ද? මේස් වල කාර්දිනල් බවක් නොමැත. : -x
JoeBrockhaus

60

මෙය අසන්නේ වැරදි ප්‍රශ්නයකි. ඇසිය යුතු නිවැරදි ප්‍රශ්නය නම්, මම මේස් වර්ග කිරීමට කාලය ගත කරන්නේ ඇයි? ඔබ කැමති X මුදල් ඒකක සඳහා ඔබේ නිදහස් කාලය අගය කරන විට, වාර්ෂික පදනමින් කොපමණ මුදලක් වැය වේද?

බොහෝ විට, මෙය හුදෙක් කිසිදු නිදහස් වේලාවක් නොවේ, එය උදේ නිදහස් වේලාවයි, එය ඔබ ඇඳේ ගත කිරීම, හෝ කෝපි පානය කිරීම හෝ ටිකක් වේලාසනින් පිටත්ව යාම සහ ගමනාගමනයට හසු නොවීම.

පියවරක් පසුපසට ගැනීම බොහෝ විට හොඳයි, සහ ගැටලුව වටා මගක් සිතන්න.

ඒ වගේම ක්‍රමයක් තියෙනවා!

ඔබ කැමති මේස් එකක් සොයා ගන්න. අදාළ සියලු අංග සැලකිල්ලට ගන්න: විවිධ ආලෝකකරණ තත්වයන්හි වර්ණය, සමස්ත ගුණාත්මකභාවය සහ කල්පැවැත්ම, විවිධ දේශගුණික තත්ත්වයන් තුළ සුවපහසුව සහ ගන්ධය අවශෝෂණය කිරීම. එසේම වැදගත් වන්නේ, ඒවා ගබඩා කිරීමේදී ප්‍රත්‍යාස්ථතාව නැති නොවිය යුතුය, එබැවින් ස්වාභාවික රෙදි හොඳ වන අතර ඒවා ප්ලාස්ටික් එතුමකින් ලබා ගත යුතුය.

වම් සහ දකුණු පාද මේස් අතර වෙනසක් නොමැති නම් වඩා හොඳය, නමුත් එය විවේචනාත්මක නොවේ. මේස් වම්-දකුණ සමමිතික නම්, යුගලයක් සොයා ගැනීම O (1) මෙහෙයුමක් වන අතර, මේස් වර්ග කිරීම දළ වශයෙන් O (M) මෙහෙයුමකි, මෙහි M යනු ඔබ මේස් වලින් පිරී ඇති ඔබේ නිවසේ ස්ථාන ගණනයි. කුඩා නියත අංකය.

ඔබ විවිධ වම් සහ දකුණු මේස් සහිත විසිතුරු යුගලයක් තෝරා ගන්නේ නම්, වම් සහ දකුණු පාද බාල්දි සඳහා සම්පූර්ණ බාල්දි වර්ග කිරීම O (N + M) ගන්න, එහිදී N යනු මේස් ගණන වන අතර M ඉහත සඳහන් කළ ආකාරයටම වේ. පළමු යුගලය සොයා ගැනීමේ සාමාන්‍ය පුනරාවර්තනය සඳහා වෙනත් කෙනෙකුට සූත්‍රය ලබා දිය හැකි නමුත් අන්ධ සෙවුමක් සහිත යුගලයක් සොයා ගැනීම සඳහා නරකම අවස්ථාව වන්නේ N / 2 + 1, එය සාධාරණ N සඳහා තාරකා විද්‍යාත්මකව කළ නොහැකි අවස්ථාවක් බවට පත්වේ. උසස් රූප භාවිතා කිරීමෙන් මෙය වේගවත් කළ හැකිය. Mk1 Eyeball සමඟ වර්ග නොකළ මේස් ගොඩවල් පරිලෝකනය කිරීමේදී හඳුනාගැනීමේ ඇල්ගොරිතම සහ හියුරිස්ටික් .

ඉතින්, O (1) මේස් යුගල කිරීමේ කාර්යක්ෂමතාව (සමමිතික මේස් උපකල්පනය) ලබා ගැනීම සඳහා ඇල්ගොරිතමයක්:

  1. ඔබේ ජීවිත කාලය පුරාම ඔබට මේස් යුගල කීයක් අවශ්‍ය වේදැයි තක්සේරු කළ යුතුය, නැතහොත් ඔබ විශ්‍රාම ගොස් නැවත කිසි දිනෙක මේස් පැළඳීමට අවශ්‍ය නොවන උණුසුම් දේශගුණයට යන තෙක්. ඔබ තරුණ නම්, අපගේ නිවෙස්වල මේස් වර්ග කිරීමේ රොබෝවරු ඇතිවීමට කොපමණ කාලයක් ගතවේදැයි ඔබට තක්සේරු කළ හැකි අතර, සමස්ත ගැටළුවම අදාළ නොවේ.

  2. ඔබ තෝරාගත් මේස් තොග වශයෙන් ඇණවුම් කළ හැක්කේ කෙසේද සහ එහි පිරිවැය කොපමණ දැයි ඔබ සොයා ගත යුතුය.

  3. මේස් ඇණවුම් කරන්න!

  4. ඔබේ පැරණි මේස් ඉවත් කරන්න.

විකල්ප පියවර 3 ට ඇතුළත් වන්නේ වසරකට වරකට එකවර යුගල කිහිපයක් මිල අඩු මේස් මිලදී ගැනීම හා මේස් වර්ග කිරීමේ පිරිවැය එකතු කිරීම ය. එහෙත් ඒ සඳහා මගේ වචනය ගන්න: තොග වශයෙන් මිලදී ගැනීම ලාභදායී වේ! එසේම, කොටස් මිල උද්ධමන අනුපාතයට අනුව මේස්වල වටිනාකම වැඩි වන අතර එය බොහෝ ආයෝජන සඳහා ඔබට ලැබෙන ප්‍රමාණයට වඩා වැඩිය. නැවත ගබඩා කිරීමේ පිරිවැයක් ද ඇත, නමුත් මේස් ඇත්ත වශයෙන්ම වැසිකිලියේ ඉහළ රාක්කයේ වැඩි ඉඩක් නොගනී.

ගැටළුව විසඳා ඇත. ඉතින්, නව මේස් ලබා ගන්න, ඔබේ පැරණි ඒවා ඉවතට විසි කරන්න / පරිත්යාග කරන්න, සහ ඔබ ඔබේ ජීවිත කාලය පුරාම සෑම දිනකම මුදල් හා කාලය ඉතිරි කරන බව දැන ගැනීමෙන් පසු සතුටින් ජීවත් වන්න.


ජීවිත කාලය (අවුරුදු 75 ක් උපකල්පනය කරමින්) මේස් සැපයුම (ඔබ යුගල 4 ක් / මසකට පිටවන බව උපකල්පනය කරයි, එය යුගල 3600 ක් සාදයි) (නව මේස් යුගලයක් cub න අඟල් 20 ක් ගතවේ යැයි සිතමු) මුළු cub න යාර 1 1/2 කි. එය අති විශාල ඉඩකි. දළ වශයෙන් ube නකයක් සහිත පෙට්ටියක ඔවුන් එය ඔබට ලබා දෙයි යැයි උපකල්පනය කළහොත්, එම කූඩය පැත්තක අඩි 3 අඟල් 4 ක් පමණ වනු ඇත.
ඒ.ජේ මෑන්ස්ෆීල්ඩ්

2
JAJMansfield වලංගු සැලකිල්ල. කෙසේ වෙතත්, ඔබගේ අංක කිහිපයක් සමඟ මම එකඟ නොවෙමි. මම අවුරුදු 40 ක කාල පරාසයක් ගත කරමි (25 ... 65) (දෙමව්පියන් / නේවාසිකාගාර / වෙනත් අය සමඟ ජීවත් නොවීම සහ විශ්‍රාම ගැනීම අතර කාලය, ඉහත බලන්න). එසේම, මම සිතන්නේ එක් යුගලයක් මුල් ඇසුරුම්වල අඟල් 0,5x4x6 වැනි ප්‍රමාණයක් ගනී. මෙම සංඛ්‍යා ඔබගේ අවකාශය තරමක් දුරට ගෙන එයි!
හයිඩ්

4 වන පියවර අනවශ්‍ය ලෙස නාස්තියකි, -1.
ඩෑන් බෙචර්ඩ්

2
ඒ.ජේ. මෑන්ස්ෆීල්ඩ්ගේ මිනුම්වලින් ව්‍යාකූල විය හැකි වෙනත් අය සඳහා මාර්ගෝපදේශය, මෙට්‍රික් බවට පරිවර්තනය කිරීම: »ගනු ඇත (නව මේස් යුගලයක් සෙන්ටිමීටර 327 ක් ගනී යැයි උපකල්පනය කරයි) මුළු 1.14 m³. එය අති විශාල ඉඩකි. දළ වශයෙන් ube නකයක් සහිත පෙට්ටියක ඔවුන් එය ඔබට ලබා දෙයි යැයි උපකල්පනය කළහොත්, එම කූඩය පැත්තේ මීටර් 1.04 ක් පමණ වනු ඇත. «
ජෝයි

කුතුහලය පදනම් කරගත් ප්‍රශ්නයක් “වැරදි ප්‍රශ්නය” වන්නේ කෙසේද? ක්ලැසික් ස්ටැක් ඕවර්ෆ්ලෝ ...
ටිම්ම්ම්

52

න්‍යායාත්මක සීමාව O (n) වන්නේ ඔබට එක් එක් මේස් ස්පර්ශ කිරීමට අවශ්‍ය නිසාය (සමහර ඒවා දැනටමත් කෙසේ හෝ යුගල කර නොමැති නම්).

රේඩික්ස් වර්ග කිරීම මඟින් ඔබට O (n) ලබා ගත හැකිය . ඔබට අවශ්‍ය වන්නේ බාල්දි සඳහා ගුණාංග කිහිපයක් තෝරා ගැනීමයි.

  1. පළමුව ඔබට තෝරා ගත හැකිය (ඇය, මගේ) - ඒවා ගොඩවල් 2 කට බෙදන්න,
  2. ඉන්පසු වර්ණ භාවිතා කරන්න (වර්ණ සඳහා ඕනෑම අනුපිළිවෙලක් තිබිය හැකිය, උදා: අකාරාදී පිළිවෙලින් වර්ණ නාමයෙන්) - ඒවා වර්ණයෙන් ගොඩවල් වලට බෙදන්න (ආරම්භක ඇණවුම පළමු පියවරේ සිට සියලු මේස් සඳහා එකම ගොඩවල තබා ගැනීමට මතක තබා ගන්න),
  3. පසුව මේස් වල දිග,
  4. පසුව වයනය, ....

ඔබට සීමිත ගුණාංග සංඛ්‍යාවක් තෝරා ගත හැකි නමුත්, එක් එක් යුගලය අද්විතීය ලෙස හඳුනාගත හැකි තරම් ගුණාංග, ඔබ කළ යුත්තේ O (k * n), එය O (n) වේ, අපට k සීමිත යැයි සැලකිය හැකි නම්.


3
මේස් බොහෝ විට පැකට් 4 කින් සහ විශාල වශයෙන් පැමිණේ, මන්ද එය ලාභදායී වන නමුත් එමඟින් ඒවා වෙන් කොට හඳුනාගත නොහැකිය. මෙය වළක්වා ගැනීම සඳහා, මා මිලදී ගන්නා සෑම නව මේස් යුගලයකටම මගේ බිරිඳ ඉතා කුඩා සලකුණක් තබයි. ලකුණ සෑම යුගලයක් සඳහාම වෙනස් වර්ණයකින් හෝ වෙනස් හැඩයකින් යුක්ත වේ. මෙම ප්‍රවේශය සමඟ ඔබට සීමිත ගුණාංග සමූහයක් පවා අවශ්‍ය නොවේ. එක් එක් යුගලයට අද්විතීය අංකයක් මැසීමට. :) අමතර ලකුණු සඳහා ද්විමය භාවිතා කරන්න.
විල්ක්ස්-

29
Il විල්ක්ස්- ඇයි?!? ඔවුන් වෙන් කොට හඳුනාගත නොහැකි සමස්ත කාරණයම නොවේද?
flup

2
lflup - මම හිතන්නේ මුළු කාරණයම විශාල මිටි වලින් විකිණීමයි. :) මට නම් මෙය යුගල වශයෙන් ඇඳීමට උපකාරී වේ. එසේ නොමැතිනම් මට ඉතා පළඳින ලද මේස් තුනක් සහ අලුත්ම එකක් සමඟ අවසන් විය හැකිය. කරුණාවන්ත මෝඩයා.
විල්ක්ස්-

13
O (n) ගණනය කිරීම සමඟ මම එකඟ නොවෙමි. $ K $ යනු කුමක්ද? $ k $ යනු ගුණාංග ගණනකි. මම තර්ක කරන්නේ $ k $ යනු $ O (log n) $ නිසා එය එක් එක් යුගල අද්විතීයව හඳුනා ගැනීමට ප්‍රමාණවත් විය යුතු බැවිනි. ඔබට යුගල 2 ක් (කළු සහ සුදු) තිබේ නම්, වර්ණය ($ k = 1, n = 2 $) ප්‍රමාණවත් වේ. ඔබට එක් කළු යුගලයක් තිබේ නම්, කෙටි; කළු යුගලයක්, දිගු; සුදු යුගලයක්, කෙටි; සුදු යුගලක් දිගු, දිගු - පසුව $ k = 2, n = 4 $. එවිට අපි $ k limit සීමා කරන්නේ නම්, අපි ඒ සමඟම limit n limit සීමා කරමු. අපි limit n limit සීමා කිරීමට යන්නේ නම් ඇණවුම් ගණනය කිරීම තවදුරටත් අර්ථවත් නොවේ.
emory

3
@emory, මම හිතන්නේ ඔබ සොයන්නේ $ඔබේ දේවල් කේත-වයි ලෙස පෙනීම සඳහා චරිතය නොව පසුබිමයි .
Xymostech

33

ප්‍රායෝගික විසඳුමක් ලෙස:

  1. පහසුවෙන් හඳුනාගත හැකි මේස් ගොඩවල් ඉක්මනින් සාදන්න. (වර්ණයෙන් කියන්න)
  2. සෑම ගොඩකටම ක්වික්සෝර්ට් කර සංසන්දනය සඳහා මේස් වල දිග භාවිතා කරන්න. මිනිසෙකු ලෙස ඔබට තරමක් ඉක්මන් තීරණයක් ගත හැකිය. (ඔබට සමාන්තරව මේස් කිහිපයක් දැකිය හැකිය, එය ඔබේ වාසියට යොදා ගන්න!)
  3. ස්ථාන යුගල සහ නොගැලපෙන මේස් ක්ෂණිකව සොයා ගැනීමට ඔබට පහසු වන එළිපත්තට ගොඩ වූ විට ගොඩවල් වර්ග කිරීම නවත්වන්න

ඔබට මේස් 1000 ක් තිබේ නම්, වර්ණ 8 ක් සහ සාමාන්‍ය බෙදාහැරීමක් තිබේ නම්, ඔබට සී * n කාලය තුළ එක් එක් මේස් 125 න් ගොඩවල් 4 ක් සෑදිය හැකිය. මේස් 5 ක එළිපත්තකින් ඔබට සෑම ගොඩකටම ලකුණු 6 කින් වර්ග කළ හැකිය. (දකුණු ගොඩට මේස් එකක් විසි කිරීමට තත්පර 2 ක් ගණන් කිරීමෙන් ඔබට පැය 4 ට අඩු කාලයක් ගතවනු ඇත.)

ඔබට මේස් 60 ක්, වර්ණ 3 ක් සහ මේස් වර්ග 2 ක් තිබේ නම් (ඔබේ / ඔබේ බිරිඳගේ) ඔබට මේස් 10 ක සෑම ගොඩක්ම ලකුණු 1 කින් වර්ග කළ හැකිය (නැවතත් එළිපත්ත = 5). (තත්පර 2 ක් ගණන් කිරීමෙන් ඔබට මිනිත්තු 2 ක් ගතවනු ඇත).

ආරම්භක බාල්දි වර්ග කිරීම ඔබේ ක්‍රියාවලිය වේගවත් කරනු ඇත, මන්ද එය ඔබගේ මේස් නියමිත c*nවේලාවට k බාල්දි වලට බෙදන නිසා ඔබට වැඩ කිරීමට සිදුවනු ඇත c*n*log(k). (එළිපත්ත සැලකිල්ලට නොගැනීම). එබැවින් ඔබ කරන සෑම දෙයක්මn*c*(1 + log(k)) , මෙහි c යනු මේස් ගොඩකට විසි කිරීමට කාලයයි.

c*x*n + O(1)දළ වශයෙන් තාක් කල් ඕනෑම ක්‍රමයකට සාපේක්ෂව මෙම ප්‍රවේශය වාසිදායක වනු ඇත log(k) < x - 1.


පරිගණක විද්‍යාවේදී මෙය ප්‍රයෝජනවත් විය හැකිය: අපට දේවල් n එකතුවක් ඇත , ඒවා මත ඇණවුමක් (දිග) සහ සමාන සම්බන්ධතාවයක් (අමතර තොරතුරු, උදාහරණයක් ලෙස මේස් වල වර්ණය). සමානාත්මතා සම්බන්ධතාවය මුල් එකතුවෙන් කොටසක් සෑදීමට අපට ඉඩ සලසයි, සෑම සමානතා පන්තියකම අපගේ ඇණවුම තවමත් පවත්වා ගෙන යයි. යම් දෙයක් එහි සමානතා පන්තියට සිතියම්ගත කිරීම O (1) හි කළ හැකිය, එබැවින් එක් අයිතමයක් පන්තියකට පැවරීමට අවශ්‍ය වන්නේ O (n) පමණි. දැන් අපි අපගේ අමතර තොරතුරු භාවිතා කර ඇති අතර සෑම පන්තියක්ම වර්ග කිරීම සඳහා ඕනෑම ආකාරයකින් ඉදිරියට යා හැකිය. වාසිය නම් දත්ත කට්ටල දැනටමත් සැලකිය යුතු ලෙස කුඩා වීමයි.

අපට බහුවිධ සමානාත්මතා සම්බන්ධතා තිබේ නම් මෙම ක්‍රමය කූඩු කළ හැකිය -> වයනයෙහි සෑම ගොඩවල් කොටසකටම වඩා දිග වර්ග කිරීමට වඩා වර්ණ ගොඩවල් සාදන්න. ඊටත් වඩා විශාල ප්‍රමාණයක් ඇති මූලද්‍රව්‍ය 2 කට වඩා වැඩි ප්‍රමාණයක් ඇති ඕනෑම සමානතා සම්බන්ධතාවයක් වර්ග කිරීම ඉක්මවා වේගවත් කිරීමක් ගෙන එනු ඇත (අපට සෘජුවම මේස් එකක් එහි ගොඩට පැවරිය හැකි නම්), සහ කුඩා දත්ත කට්ටල මත වර්ග කිරීම ඉතා ඉක්මණින් සිදුවිය හැකිය.


3
මානව ප්‍රශස්තිකරණය: මිනිසෙකු ලෙස, 2 වන පියවර සඳහා, ඔබ මේස් දළ වශයෙන් නඟින්නාවූ පිළිවෙලට ඇද දැමිය යුතු යැයි මම තර්ක කරමි. මෙය සංසන්දනය-හුවමාරු පදනම් කරගත් ප්‍රවේශයකට වඩා මිනිසෙකුට (දෘශ්‍ය තක්සේරු කිරීම) වඩා වේගවත් වනු ඇත.
ඇන්ඩ rew සී

28

ඔබ උත්සාහ කරන්නේ වැරදි ගැටළුව විසඳීමටයි.

විසඳුම 1: ඔබේ රෙදි සෝදන කූඩයට අපිරිසිදු මේස් දැමූ සෑම අවස්ථාවකම ඒවා කුඩා ගැටයකින් බැඳ තබන්න. එමඟින් සේදීමෙන් පසු ඔබට කිසිදු වර්ග කිරීමක් කිරීමට සිදු නොවේ. මොන්ගෝ දත්ත ගබඩාවක දර්ශකයක් ලියාපදිංචි කිරීම වැනි එය සිතන්න. අනාගතයේදී සමහර CPU ඉතිරිකිරීම් සඳහා ටිකක් වැඩ කරන්න.

විසඳුම 2: එය ශීත කාලය නම්, ඔබට ගැලපෙන මේස් පැළඳිය යුතු නැත. අපි ක්‍රමලේඛකයින්. එය ක්‍රියාත්මක වන තාක් කල් කිසිවෙකු දැනගත යුතු නැත.

විසඳුම 3: කාර්යය පැතිරෙන්න. UI අවහිර නොකර එවැනි සංකීර්ණ CPU ක්‍රියාවලියක් අසමමුහුර්තව සිදු කිරීමට ඔබට අවශ්‍යය. ඒ මේස් ගොඩවල් අරගෙන බෑගයක පුරවන්න. ඔබට අවශ්‍ය විටෙක යුගලයක් සොයන්න. ඒ ආකාරයෙන් එය ගන්නා වැඩ ප්‍රමාණය සැලකිය යුතු ලෙස අඩු ය.

මෙය උපකාරී වේ යැයි සිතමු!


5
ගැටයක් තුළ මේස් (හෝ ඕනෑම ඇඳුම්) ගැටගැසීමෙන් රෙදි සෝදන යන්ත්‍රයට රෙදි සෝදන හැකියාව අඩු වන අතර ඒවා පැළඳීම වඩාත් අපහසු වේ. විසඳුම 2 නඩත්තු කිරීම වඩා දුෂ්කර කරයි. මාස 6 කට පසු, කොට කලිසම් සහ ස්නැකර් යුගලයක් සමඟ ඇඳීමට ඔබට කළු වළලුකර මේස් දෙකක් අවශ්‍ය වූ විට, මාස 6 ක් ඕනෑම වැඩක් කිරීමෙන් එම යුගලය එකම තත්වයේ (අපිරිසිදු / පිරිසිදු, සමාන ඇඳුම්) සොයා ගැනීමට බොහෝ දුරට ඉඩ ඇත. විසඳුම 3 අඩු "අසමමුහුර්ත" සහ වඩා කෙළින් "කම්මැලි"; ඔබට අවශ්‍ය විටදී ඔබට අවශ්‍ය අවම කාර්යය කරන්න.
කීත්

Re: විසඳුම 2: මම ගැලපෙන මේස් අඳින්නේ නැති බව ජනතාව දැනගනීවි, මන්ද ඔවුන් මගේ බර්ක්ස් වල දකිනු ඇත :)
බොබ් ප්‍රොබ්ස්ට්

@BobProbst ඔව්, නමුත් ඔබේ සෙසු ක්‍රමලේඛකයින් ද බර්ක්ස් සමඟ අසමසම මේස් පැළඳ සිටින අතර එම නිසා ඔවුන් පමණක් නොවන බව දැක සතුටු වනු ඇත.
ෆ්‍රැන්චෙස්කෝ පාසා

27

මෙම ප්‍රශ්නය ඇත්ත වශයෙන්ම ගැඹුරු දාර්ශනික ය. හදවතින්ම එය ගැටළු විසඳීමට මිනිසුන්ගේ බලය (අපගේ මොළයේ "තෙත් මෘදුකාංග") ඇල්ගොරිතම මගින් ඉටු කළ හැකි දේට සමානද යන්න ගැන ය.

මේස් වර්ග කිරීම සඳහා පැහැදිලි ඇල්ගොරිතමයක්:

Let N be the set of socks that are still unpaired, initially empty
for each sock s taken from the dryer
  if s matches a sock t in N
    remove t from N, bundle s and t together, and throw them in the basket
  else
    add s to N

දැන් මෙම ගැටලුවේ ඇති පරිගණක විද්‍යාව පියවරයන් සියල්ලම වේ

  1. "N හි මේස් ටී සමඟ යුගල නම්". අප මෙතෙක් දැක ඇති දේ අපට කොතරම් ඉක්මනින් "මතක" ගත හැකිද?
  2. "N වෙතින් t ඉවත් කරන්න" සහ "N ට s එකතු කරන්න". අප මෙතෙක් දුටු දේ පිළිබඳව සොයා බැලීම කොතරම් මිල අධිකද?

මේවා ක්‍රියාත්මක කිරීම සඳහා මිනිසුන් විවිධ උපක්‍රම භාවිතා කරනු ඇත. මානව මතකය වේ associative , ගබඩා කර වටිනාකම් ලක්ෂණය කට්ටල අනුරූප වටිනාකම් සමග තමන් යුගලනය එහිදී හැෂ් වගුව වගේ දෙයක්. නිදසුනක් වශයෙන්, "රතු කාර්" සංකල්පය පුද්ගලයෙකුට මතක තබා ගත හැකි සියලුම රතු කාර් වලට සිතියම් ගත කරයි. පරිපූර්ණ මතකයක් ඇති කෙනෙකුට පරිපූර්ණ සිතියම්කරණයක් ඇත. බොහෝ අය මේ සම්බන්ධයෙන් අසම්පූර්ණයි (සහ තවත් බොහෝ අය). සහායක සිතියමට සීමිත ධාරිතාවක් ඇත. සිතියම් ගත කිරීම නිදාගත හැකිය විවිධ තත්වයන් යටතේ (එක් බියර් වැඩිය), වැරදීමකින් පටිගත කරන්න ("මම ඇගේ නම බෙටි, නෙට්ටි නොවේ"), හෝ සත්‍යය වෙනස් වී ඇති බව අප නිරීක්ෂණය කළද කිසි විටෙකත් නැවත ලියන්න එපා ("තාත්තාගේ මෝටර් රථය" "තැඹිලි ෆයර්බර්ඩ්" ඔහු රතු කැමරෝ සඳහා වෙළඳාම් කරන බව අප දැන සිටි විට).

මේස් සම්බන්ධයෙන් ගත් කල, පරිපූර්ණ නැවත කැඳවීම යන්නෙන් අදහස් කරන්නේ මේස් එකක් දෙස බැලීම sසැමවිටම එහි සහෝදරයාගේ මතකය නිපදවන අතර නිරන්තර තොරතුරු tසොයා ගැනීමට ප්‍රමාණවත් තොරතුරු (යකඩ පුවරුවේ ඇති තැන) ද ඇතුළුව ය t. ඡායාරූප මතකය ඇති පුද්ගලයෙකු 1 සහ 2 යන දෙකම නියත වේලාවක නොවරදවාම ඉටු කරයි.

පරිපූර්ණ මතකයට වඩා අඩු අයෙකුට ඔහුගේ ලුහුබැඳීමේ හැකියාව තුළ ඇති ලක්ෂණ මත පදනම්ව පොදු සමානාත්මතා පන්ති කිහිපයක් භාවිතා කළ හැකිය: ප්‍රමාණය (තාත්තා, මාමා, බබා), වර්ණය (කොළ පැහැයට හුරු, රතු පැහැය, ආදිය), රටාව (ආර්ගයිල්, සරල, ආදිය) , ශෛලිය (පාද, දණහිසට ඉහළ, ආදිය). එබැවින් යකඩ පුවරුව කාණ්ඩ සඳහා කොටස් වලට බෙදා ඇත. මෙය සාමාන්‍යයෙන් මතකය අනුව කාණ්ඩය නියත වේලාවක ස්ථානගත කිරීමට ඉඩ සලසයි, නමුත් "බාල්දිය" කාණ්ඩය හරහා රේඛීය සෙවීමක් අවශ්‍ය වේ.

කිසිසේත්ම මතකයක් හෝ පරිකල්පනයක් නොමැති අයෙක් (සමාවෙන්න) මේස් එක ගොඩක තබා මුළු ගොඩේම රේඛීය සෙවීමක් කරයි.

යමෙකු යෝජනා කළ පරිදි යුගලයක් සඳහා සංඛ්‍යාත්මක ලේබල භාවිතා කළ හැකිය. මෙය සම්පූර්ණ ඇණවුමකට දොර විවර කරයි, එමඟින් CPU සමඟ අපට කළ හැකි එකම ඇල්ගොරිතම භාවිතා කිරීමට මිනිසාට ඉඩ සලසයි: ද්විමය සෙවීම, ගස්, හැෂ් යනාදිය.

එබැවින් "හොඳම" ඇල්ගොරිතම රඳා පවතින්නේ එය ක්‍රියාත්මක වන තෙත් මෘදුකාංග / දෘඩාංග / මෘදුකාංගවල ගුණාංග සහ යුගල මත සම්පූර්ණ ඇණවුමක් පැනවීමෙන් "වංචා කිරීමට" අපගේ කැමැත්ත මත ය. නිසැකවම "හොඳම" මෙටා- ඇල්ගොරිතම යනු ලෝකයේ හොඳම සොකට්-සොර්ටර් බඳවා ගැනීමයි: නියත කාල විමසුම, ඇතුළු කිරීම, සහ මකන්න. මේ වගේ පුද්ගලයින් සහ යන්ත්‍ර දෙකම මිලදී ගත හැකිය. ඔබට එකක් තිබේ නම්, ඔබට N යුගල සඳහා O (N) වේලාවේ සියලුම මේස් යුගලනය කළ හැකිය, එය ප්‍රශස්ත ය. සම්පූර්ණ ඇණවුම් ටැග් මඟින් මිනිස් හෝ දෘඩාංග පරිගණකයක් සමඟ එකම ප්‍රති result ලය ලබා ගැනීම සඳහා සම්මත හැෂිං භාවිතා කිරීමට ඉඩ ලබා දේ.


හරි, එය වඩා හොඳයි, එය තවමත් තරමක් වැරදි වුවත් ... මෙම ප්‍රශ්නය ඒ ගැන නොවේ. පල්ලියේ ටියුරින් නිබන්ධනය නිවැරදි වුවත් නැතත්, මිනිසුන්ට සහ අපේ පරිගණකවලට මේස් වර්ග කළ හැකිය. (යථාර්ථය නම්, මිනිසුන්ට ඉතා සීමිත ආයතන වන අතර, ටියුරින් මැෂින් වලට වඩා පරිගණකමය බලයක් අඩුය ... අපගේ පරිගණක සම්බන්ධයෙන් ද එය එසේම ය, නමුත් සීමාවන් වෙනස් ය.)
ජිම් බෝල්ටර්

මම එකඟවෙන්නේ නැහැ. ඇත්ත වශයෙන්ම අපගේ වර්තමාන ඕනෑම පරිගණකයක් ටීඑම් එකකට වඩා අත්‍යවශ්‍යයෙන්ම හා අති විශාල ඩීඑෆ්ඒ (මොඩියුලෝ අයි / ඕ වෙනස්කම්) වේ. කෙසේ වෙතත්, අපගේ ශරීර වැනි ඕනෑම ඇනලොග් උපාංගයකට අසීමිත ටේප් එකක් අනුකරණය කළ හැකිය. අපගේ මනස ගණනය කරන ආකාරය පිළිබඳ ප්‍රයෝජනවත් ලක්ෂණයක් තවමත් අප සතුව නොමැත.
ජීන්

මිනිසුන්ගේ හෝ වෙනත් භෞතික උපාංග සඳහා අසීමිත ටේප් නැත, මන්ද මිනිස් මොළයේ කිසිවක් අසීමිත විභේදනයක් නොමැති නිසා හෝ එයට නොහැකි විය. යම් ස්නායු විද්‍යාවක් ඉගෙන ගැනීමට ද එය උපකාරී වේ. කෙසේ වෙතත්, එන්නත් කිරීමට ඔබ තුළ ඇති ආශාව කුමක් වුවත් මෙහි ගැඹුරු දාර්ශනික ප්‍රශ්නයක් නොතිබුණි. නමුත් ඔබ කැමති දේ විශ්වාස කරන්න ... මෙය මේ ආකාරයේ විවාදයකට සුදුසු ස්ථානයක් නොවන අතර මම මීට පෙර කිහිප වතාවක්ම එය කර ඇත්තෙමි. නමුත් මම සෑම විටම විනෝදජනක වන්නේ සරලම ගැටලු (අප සියල්ලන්ම) යන්තම් විසඳිය හැකි අය, ඔවුන් ටී.එම්.
ජිම් බෝල්ටර්

22

පිරිවැය: චලනය වන මේස් -> ඉහළ, පේළියේ මේස් සොයා ගැනීම / සෙවීම -> කුඩා

අපට කිරීමට අවශ්‍ය වන්නේ චලනයන් අඩු කිරීම සහ සෙවුම් ගණන සමඟ වන්දි ගෙවීමයි. එසේම, හෝමෝ සේපියන්ස් හි බහුකාර්ය පරිසරය ඩෙසිෂන් හැඹිලියේ තවත් බොහෝ දේ රඳවා ගැනීමට අපට භාවිතා කළ හැකිය.

X = ඔබේ, Y = ඔබේ කලත්‍රයා

සියලුම මේස් වලින් A ගොඩේ සිට:

මේස් දෙකක් තෝරන්න, අනුරූපී X මේස් X පේළියේ ද, Y සොකට් Y රේඛාවේ ඊළඟ ස්ථානයේ ද තබන්න.

A හිස් වන තුරු කරන්න.

එක් එක් පේළිය සඳහා X සහ Y.

  1. පේළියේ පළමු සොකට්ටුව තෝරන්න, අනුරූප මේස් සොයා ගන්නා තෙක් රේඛාව දිගේ සොයන්න.

  2. අනුරූප නිමි මේස් පේළියට දමන්න.

  3. වෛකල්පිත ඔබ රේඛාව සොයන අතර වර්තමාන සොකට්ටුව පෙරට සමාන වේ, මෙම මේස් සඳහා පියවර 2 කරන්න.

විකල්පයක් ලෙස පළමු පියවර සඳහා, ඔබ එම පේළියේ දෙකක් වෙනුවට මේස් දෙකක් ගන්නවා, හැඹිලි මතකය ප්‍රමාණවත් බැවින් ඔබ නිරීක්ෂණය කරන රේඛාවේ වර්තමාන එකට ගැලපේද යන්න අපට ඉක්මනින් හඳුනාගත හැකිය. ඔබට ආයුධ තුනක් තිබීමට තරම් වාසනාවන්ත නම්, ඔබට මේස් තුනක් එකවර විග්‍රහ කළ හැකිය, එම විෂය පිළිබඳ මතකය ප්‍රමාණවත් තරම් විශාල බැවින්.

X සහ Y යන දෙකම හිස් වන තුරු කරන්න.

සිදු විය

කෙසේ වෙතත්, මෙය තෝරා ගැනීමේ වර්ගීකරණයට සමාන සංකීර්ණතාවයක් ඇති බැවින්, I / O (චලනය වන මේස්) සහ සෙවීම් (සොකට්ටුවක් සඳහා රේඛාව සෙවීම) නිසා ගතවන කාලය බෙහෙවින් අඩු ය.


22

මෙන්න ඔමේගා (n ලොග් එන්) සංසන්දනය පදනම් කරගත් ආකෘතියකට පහළින් බැඳී ඇත. (එකම වලංගු මෙහෙයුම මේස් දෙකක් සංසන්දනය කිරීමයි.)

ඔබේ මේස් 2n මේ ආකාරයට සකසා ඇති බව ඔබ දන්නවා යැයි සිතමු :

p 1 p 2 p 3 ... p n p f (1) p f (2) ... p f (n)

f යනු {1,2, ..., n set කුලකයේ නොදන්නා ප්‍රේරණයකි. මෙය දැන ගැනීමෙන් ගැටලුව වඩාත් අපහසු විය නොහැක. එන් තියෙනවා! හැකි ප්‍රතිදානයන් (පළමු හා දෙවන භාගය අතර ගැලපීම්), එයින් අදහස් කරන්නේ ඔබට ලොග් (n!) = ඔමේගා (n ලොග් n) සැසඳීම් අවශ්‍ය බවයි. මෙය වර්ග කිරීම මගින් ලබා ගත හැකිය.

මූලද්‍රව්‍ය විචල්‍යතා ගැටලුවට සම්බන්ධ වීමට ඔබ උනන්දු වන හෙයින්: මූලද්‍රව්‍යයේ වෙනස සඳහා බැඳී ඇති ඔමේගා (n ලොග් එන්) ඔප්පු කිරීම දුෂ්කර ය, මන්ද ප්‍රතිදානය ද්විමය ඔව් / නැත. මෙන්න, ප්‍රතිදානය ගැලපීමක් විය යුතු අතර යහපත් සීමාවක් ලබා ගැනීම සඳහා හැකි ප්‍රතිදානයන් ගණන ප්‍රමාණවත් වේ. කෙසේ වෙතත්, මූලද්‍රව්‍ය වෙනසට සම්බන්ධ ප්‍රභේදයක් ඇත. ඔබට මේස් 2n ලබා දී ඇති අතර ඒවා අද්විතීය ලෙස යුගල කළ හැකිදැයි සිතන්න. (A 1 , a 2 , ..., a n ) වෙත (a 1 , a 1 , a 2 , 2 , ..., a n , a n ) යැවීමෙන් ඔබට ED වෙතින් අඩු කිරීමක් ලබා ගත හැකිය . (දෙමාපිය වශයෙන්, ED හි දෘ ness තාව පිළිබඳ සාක්ෂි ඉතා සිත්ගන්නා සුළුය විද්‍යාව හරහා.)

සමානාත්මතා පරීක්ෂණ සඳහා පමණක් ඔබ ඉඩ දෙන්නේ නම් මුල් ගැටළුව සඳහා ඔමේගා (n 2 ) බැඳී තිබිය යුතු යැයි මම සිතමි . මගේ ප්‍රතිභානය නම්: පරීක්ෂණයකින් පසු ඔබ දාරයක් එක් කරන ප්‍රස්ථාරයක් සලකා බලා ප්‍රස්ථාරය ense න නොවන්නේ නම් ප්‍රතිදානය අද්විතීය ලෙස තීරණය නොවන බව තර්ක කරන්න.


19

මේ සඳහා, ඇත්තෙන්ම මම ඒක කරන්න ආකාරය වේ පි මේස් යුගල ( n = 2p තනි මේස්):

  • ගොඩේ සිට අහඹු ලෙස මේස් එකක් ගන්න.
  • පළමු මේස් සඳහා, හෝ කලින් තෝරාගත් මේස් සියල්ල යුගලනය කර ඇත්නම්, මේසය ඔබ ඉදිරිපිට යුගලනය නොකළ මේස් "අරාව" පළමු "තව්" තුළට දමන්න.
  • ඔබ සතුව තෝරා නොගත් යුගල මේස් එකක් හෝ කිහිපයක් තිබේ නම්, අරාවෙහි ඇති සියලුම යුගල නොකළ මේස් වලට එරෙහිව ඔබේ වර්තමාන මේස් පරීක්ෂා කරන්න.
    • ඔබේ අරාව ගොඩනඟන විට මේස් සාමාන්‍ය පංති හෝ වර්ග (සුදු / කළු, වළලුකර / කාර්ය මණ්ඩලය, මලල ක්‍රීඩා / ඇඳුම) ලෙස වෙන් කළ හැකි අතර, “සරඹ-පහළට” සමාන-සමාන-සමානකම් පමණක් සැසඳිය හැකිය.
    • ඔබ පිළිගත හැකි ගැලපීමක් සොයා ගන්නේ නම්, මේස් දෙකම එකට දමා ඒවා අරාවෙන් ඉවත් කරන්න.
    • ඔබ එසේ නොකරන්නේ නම්, වත්මන් සොකට්ටුව අරාවෙහි පළමු විවෘත තලයට දමන්න.
  • සෑම මේස් එකක් සමඟම නැවත නැවත කරන්න.

මෙම යෝජනා ක්‍රමයේ නරකම අවස්ථාව නම් සෑම මේස් යුගලයක්ම හරියටම ගැලපෙන තරමට වෙනස් වන අතර ඔබ තෝරා ගන්නා පළමු n / 2 මේස් සියල්ලම වෙනස් වේ. මේ ඔබේ O (n 2 ) දර්ශනය වන අතර එය අතිශයින්ම අපහසු ය. අද්විතීය සොකට් ටී ගණන p = n / 2 යුගල සංඛ්‍යාවට වඩා අඩු නම් , සහ එක් එක් වර්ගයේ මේස් එක හා සමාන නම් (සාමාන්‍යයෙන් ඇඳුම් ආශ්‍රිත වචන වලින්) එම වර්ගයේ ඕනෑම මේස් එකක් ඕනෑම කෙනෙකුට යුගලනය කළ හැකිය. වෙනත්, මම ඉහත අනුමාන කරන ලෙස පසුව, කිරීමට සංසන්දනය කිරීමට ඔබ කවදා හෝ ඇත මේස් උපරිම සංඛ්යාව වන ටී , ඊළඟ එක ඔබ අදින්න පසුව කැමැත්තයුගල නොකළ මේස් වලින් එකක් ගලපන්න. මෙම තත්වය සාමාන්‍ය සොකට් ලාච්චුවේ නරකම තත්වයට වඩා බොහෝ සෙයින් වැඩි වන අතර නරකම අවස්ථාව සංකීර්ණතාව O (n * t) දක්වා අඩු කරයි, එහිදී සාමාන්‍යයෙන් t << n .


1
මෙය මගේ මානසික ක්‍රියාවලියට බෙහෙවින් සමීප ය. පෙර වර්ග කිරීමේ ප්‍රශස්තිකරණයේ අතිරේක තට්ටුවක් මා සතුව ඇත. මගේ මලල ක්‍රීඩා මේස් සුදු ජාතිකයින් සමඟ සෝදා, මගේ ඇඳුම් මේස් වර්ණවලින් සෝදා හරිනු ලැබේ. මෙයින් අදහස් කරන්නේ මම රෙදි සෝදන යන්ත්‍ර දෙකක් එකට නොගන්නා තාක් කල්, මගේ මේස් දැනටමත් වර්ගය අනුව කාණ්ඩ කර ඇති බවයි. සුදු බර ඉතා වේගයෙන් ගමන් කරයි (බොහෝ සමාන මේස්) නමුත් ඇඳුම් මේස් සඳහා වැඩි කාලයක් ගතවේ. වෙනත් ප්‍රධාන ඉඟිය - වර්ග කිරීම සඳහා වැඩි මතකයක් ලබා දෙන්න (පළමුවෙන්ම මේස් නොවන සියල්ල
නැවී

17

තථ්‍ය-ලෝක ප්‍රවේශය:

හැකිතාක් වේගයෙන්, වර්ගීකරණය නොකළ ගොඩවල මේස් එකවර ඉවත් කර ඔබ ඉදිරිපිට ගොඩවල් වල තබන්න. සියලුම මේස් එකම දිශාවකට යොමු කර ඇති පරිදි ගොඩවල් තරමක් අවකාශය-කාර්යක්ෂමව සකස් කළ යුතුය; ඔබට පහසුවෙන් ළඟා විය හැකි දුර ප්‍රමාණය අනුව ගොඩවල් ගණන සීමා වේ. මේස් දැමිය යුතු ගොඩවල් තෝරා ගැනීම විය යුත්තේ - හැකි ඉක්මනින් - මේස් වැනි පෙනෙන ගොඩකට මේස් දැමීමෙන්; ඉඳහිට වර්ගය I (එය අයත් නොවන ගොඩකට මේස් එකක් දැමීම) හෝ II වර්ගය (දැනට පවතින මේස් ගොඩවල් ඇති විට මේස් එකක් තමන්ගේම ගොඩට දැමීම) දෝෂය ඉවසිය හැකිය - වැදගත්ම කරුණ වන්නේ වේගය .

සියලුම මේස් ගොඩවල් බවට පත් වූ පසු, වේගයෙන් බහු-මේස් ගොඩවල් හරහා යුගල නිර්මාණය කර ඒවා ඉවත් කරන්න (මේවා ලාච්චුව දෙසට ගමන් කරයි). ගොඩේ නොගැලපෙන මේස් තිබේ නම්, ඒවා නැවත ඔවුන්ගේ උපරිමයට (හැකි තරම් වේගයෙන් අවහිරතා තුළ) ගොඩ ගසන්න. සියලුම බහු-මේස් ගොඩවල් සැකසූ විට, දෙවන වර්ගයේ දෝෂ හේතුවෙන් යුගලනය නොවූ ඉතිරි මේස් මේස් ගැලපෙන්න. හූෂ්, ඔබ ඉවරයි - මට මේස් ගොඩක් ඇති අතර විශාල කොටසක් අපිරිසිදු වන තුරු ඒවා සෝදන්න එපා. තවත් ප්‍රායෝගික සටහනක්: මම මේස් යුගලයක මුදුන අනෙකට උඩින් පෙරළා, ඒවායේ ප්‍රත්‍යාස්ථ ගුණාංගවලින් ප්‍රයෝජන ගනිමින්, ලාච්චුවට ප්‍රවාහනය කරන අතරතුර සහ ලාච්චුවේ සිටියදී ඒවා එකට රැඳී සිටියි.


15

ඔබේ ප්‍රශ්නයෙන් පැහැදිලි වන්නේ ඔබට රෙදි සේදීම පිළිබඳ සැබෑ අත්දැකීම් නොමැති බවයි :). ඔබට නොගැලපෙන මේස් කුඩා සංඛ්‍යාවක් සමඟ හොඳින් ක්‍රියා කරන ඇල්ගොරිතමයක් අවශ්‍ය වේ.

මේ දක්වා පිළිතුරු අපගේ මානව රටා හඳුනාගැනීමේ හැකියාවන් හොඳින් ප්‍රයෝජනයට නොගනී. සෙට් ගේම් එක මෙය හොඳින් කරන්නේ කෙසේද යන්න පිළිබඳ ඉඟියක් සපයයි: සියලු මේස් ද්විමාන අවකාශයක තබන්න එවිට ඔබට දෙදෙනාම හොඳින් හඳුනාගෙන ඔබේ දෑතින් පහසුවෙන් ඒවා වෙත ළඟා විය හැකිය. මෙය ඔබව 120 * 80 සෙ.මී. හෝ ඊට වැඩි ප්‍රදේශයකට සීමා කරයි. එතැන් සිට ඔබ හඳුනාගත් යුගල තෝරා ඒවා ඉවත් කරන්න. අමතර මේස් නිදහස් අවකාශයේ තබා නැවත නැවත කරන්න. පහසුවෙන් හඳුනාගත හැකි මේස් ඇති පුද්ගලයින් සඳහා ඔබ සේදුවහොත් (කුඩා ළමයින්ට මතකයට එයි), පළමුව එම මේස් තෝරා ගැනීමෙන් ඔබට රේඩික්ස් වර්ග කිරීමක් කළ හැකිය. මෙම ඇල්ගොරිතම හොඳින් ක්‍රියාත්මක වන්නේ තනි මේස් ගණන අඩු වූ විට පමණි


සාමාන්‍යයෙන් මම එය කරන්නේ එයයි. එක් එක් වර ඉතිරිව ඇති මේස් හරහා නැවත ක්‍රියා කිරීමට වඩා හොඳට ක්‍රියා කරයි.
yu_ominae

හොඳ ප්‍රවේශයක් සහ මම සිතන්නේ එය සමහර සැබෑ CS ගැටළු වලටද යොදා ගත හැකි බවයි. කරුණාකර ඔබට එවැනි උදාහරණයක් එකතු කළ හැකිද (CS ගැටලුවක් විසඳීමට අපට සමාන ප්‍රවේශයක් භාවිතා කළ හැකි CS ගැටලුවක්). එසේම, මෙම විසඳුම මේස් මිලියන ගණනක් සඳහා පරිමාණය කරන්නේ කෙසේද?
අමිත්

මම හිතන්නේ මෙය මූලිකවම මෙහි ඇති අනෙක් පිළිතුර වන stackoverflow.com/a/14423956 , ජනවාරි 20 සිට සමාන වේ. දෙකම +1. මානව දර්ශන පද්ධතිය විශාල වශයෙන් සමාන්තර වේ.
විල් නෙස්

15

පළමු මේස් එකක් ගෙන මේසයක් මත තබන්න. දැන් තවත් මේස් එකක් ගන්න; එය පළමු වරට තෝරාගත් දේට ගැලපෙන්නේ නම්, එය පළමුවැන්නා මත තබන්න. එසේ නොවේ නම්, පළමු සිට මඳක් distance තින් මේසය මත තබන්න. තුන්වන මේස් එකක් ගන්න; එය පෙර දෙකටම ගැලපෙන්නේ නම්, ඒවා උඩින් තබන්න, නැතහොත් තුන්වන ස්ථානයෙන් කුඩා දුරක් තබන්න. ඔබ සියලු මේස් ලබා ගන්නා තෙක් නැවත නැවත කරන්න.


1
එකම වලංගු පිළිතුර මෙයයි. අනෙක් සියල්ලන්ම නොසලකා හරිනුයේ වැඩි කාලයක් ගත කරන්නේ සමාන මේස් අතර වෙනස හඳුනා ගැනීම සඳහාය (එබැවින් ඒවා සියල්ලම භෞතික පෙනුමෙන් එකට එකතු කිරීම වඩාත් නරක අතට හැරේ).
එන්ටෝනියෝ

විනෝදය සඳහා මම මේස් කුඩා පයිතන් වැඩසටහනකට ගොඩ ගසමි. Gist.github.com/justinfay/53b574cf0a492f6795ef
ජස්ටින් ෆේ

12

ගොඩවල සිට මේස් යුගලනය කිරීම කෙතරම් කාර්යක්ෂමදැයි කීමට, අපි මුලින්ම යන්ත්‍රය නිර්වචනය කළ යුතුය, මන්ද යුගලනය සිදු කරනු ලබන්නේ ටියුරින් කිරීමකින් හෝ අහඹු ප්‍රවේශ යන්ත්‍රයකින් නොවේ, සාමාන්‍යයෙන් එය පදනමක් ලෙස භාවිතා කරයි ඇල්ගොරිතම විශ්ලේෂණය.

යන්ත්රය

යන්ත්රය යනු මිනිසා නම් වූ සැබෑ ලෝක මූලද්රව්යයේ සාරාංශයකි. එය ඇස් යුගලයක් හරහා පරිසරයෙන් කියවිය හැකිය. අපගේ යන්ත්‍ර ආකෘතියට ආයුධ 2 ක් භාවිතා කරමින් පරිසරය හැසිරවීමට හැකි වේ. තාර්කික හා අංක ගණිතමය මෙහෙයුම් ගණනය කරනු ලබන්නේ අපගේ මොළය භාවිතා කරමිනි (බලාපොරොත්තු සහගතව ;-)).

මෙම උපකරණ සමඟ සිදු කළ හැකි පරමාණුක මෙහෙයුම්වල අභ්‍යන්තර ධාවන කාලය ද අප සලකා බැලිය යුතුය. භෞතික අවහිරතා හේතුවෙන්, අතක් හෝ ඇසක් මගින් සිදු කරනු ලබන මෙහෙයුම් වලට නිරන්තර කාල සංකීර්ණත්වයක් නොමැත. මෙයට හේතුව අපට නිමක් නැතිව විශාල මේස් ගොඩක් අතක් සමඟ ගෙන යා නොහැකි අතර නිමක් නැති විශාල මේස් ගොඩක ඇසට ඉහළ මේස් නොපෙනේ.

කෙසේ වෙතත් යාන්ත්‍රික භෞතික විද්‍යාව අපට හොඳ දේවල් ද ලබා දෙයි. අතක් සහිත එක් මේස් එකකටවත් ගමන් කිරීමට අපට සීමා නොවේ. අපට එකවරම යුවළක් ගමන් කළ හැකිය.

එබැවින් පෙර විශ්ලේෂණය මත පදනම්ව පහත දැක්වෙන මෙහෙයුම් අවරෝහණ පිළිවෙලට භාවිතා කළ යුතුය:

  • තාර්කික සහ අංක ගණිත මෙහෙයුම්
  • පාරිසරික කියවීම්
  • පාරිසරික වෙනස් කිරීම්

මිනිසුන්ට ඇත්තේ ඉතා සීමිත මේස් ප්‍රමාණයක් පමණක් යන කාරණය ද අපට ප්‍රයෝජනයට ගත හැකිය. එබැවින් පාරිසරික වෙනස් කිරීමකට ගොඩේ ඇති සියලුම මේස් සම්බන්ධ විය හැකිය.

ඇල්ගොරිතම

ඉතින් මෙන්න මගේ යෝජනාව:

  1. ගොඩවල ඇති සියලුම මේස් බිම පුරා විහිදුවන්න.
  2. බිම ඇති මේස් දෙස බැලීමෙන් යුගලයක් සොයා ගන්න.
  3. යුගලයක් සෑදිය නොහැකි වන තෙක් 2 සිට නැවත කරන්න.
  4. බිම මේස් නොමැති තෙක් 1 සිට නැවත නැවත කරන්න.

4 වන මෙහෙයුම අත්‍යවශ්‍ය වේ, මන්ද මේස් බිම පුරා පැතිරෙන විට සමහර මේස් අනෙක් ඒවා සැඟවිය හැක. ඇල්ගොරිතමයේ විශ්ලේෂණය මෙන්න:

විශ්ලේෂණය

ඇල්ගොරිතම ඉහළ සම්භාවිතාවයකින් අවසන් වේ. මෙයට හේතුව අංක 2 හි මේස් යුගල සොයා ගැනීමට කෙනෙකුට නොහැකි වීමයි.

nමේස් යුගල යුගල පිළිබඳ පහත දැක්වෙන ධාවන කාල විශ්ලේෂණය සඳහා , 2nපියවර 1 න් පසු අවම වශයෙන් මේස් අඩක්වත් සඟවා නැතැයි අපි සිතමු . එබැවින් සාමාන්‍ය අවස්ථාවේ දී අපට n/2යුගල සොයාගත හැකිය . මෙයින් අදහස් කරන්නේ ලූපය පියවර 4 ක් ක්‍රියාත්මක වන O(log n)බවයි. පියවර 2 ක්‍රියාත්මක වන O(n^2)වේලාවන්. එබැවින් අපට නිගමනය කළ හැකිය:

  • ඇල්ගොරිතමයට O(ln n + n)පාරිසරික වෙනස් කිරීම් ඇතුළත් වේ (පියවර 1)O(ln n) ප්ලස් සෑම මේස් යුගලයක්ම බිමෙන් තෝරා ගැනීම)
  • ඇල්ගොරිතම සම්බන්ධ වේ O(n^2) 2 වන පියවර සිට පාරිසරික කියවීම්
  • ඇල්ගොරිතමයට O(n^2)2 වන පියවරේදී සොකට්ටුවක් තවත් එකක් සමඟ සංසන්දනය කිරීම සඳහා තාර්කික හා ගණිතමය මෙහෙයුම් ඇතුළත් වේ

ඒ නිසා අපි මුළු ධාවන සංකීර්ණත්වය ඇති O(r*n^2 + w*(ln n + n))තැන rසහ wමේස් සාධාරණ මුදල සඳහා පිළිවෙළින් පාරිසරික කියවීමේ හා පාරිසරික ලිවීම් මෙහෙයුම් සඳහා සාධක වේ. තාර්කික හා ගණිතමය මෙහෙයුම් වල පිරිවැය මඟ හැරී ඇත, මන්ද මේස් 2 එකම යුගලයට අයත් දැයි තීරණය කිරීම සඳහා නිරන්තර තාර්කික හා ගණිතමය මෙහෙයුම් ප්‍රමාණයක් අවශ්‍ය යැයි අපි සිතමු. සෑම අවස්ථාවකම මෙය කළ නොහැකි විය හැකිය.



Ill විල්නෙස් යෙප්, තව ටිකක් පැහැදිලි කිරීමක් සමඟ
ස්පේස් ට්‍රකර්

12
List<Sock> UnSearchedSocks = getAllSocks();
List<Sock> UnMatchedSocks = new list<Sock>();
List<PairOfSocks> PairedSocks = new list<PairOfSocks>();

foreach (Sock newSock in UnsearchedSocks)
{
  Sock MatchedSock = null;
  foreach(Sock UnmatchedSock in UnmatchedSocks)
  {
    if (UnmatchedSock.isPairOf(newSock))
    {
      MatchedSock = UnmatchedSock;
      break;
    }
  }
  if (MatchedSock != null)
  {
    UnmatchedSocks.remove(MatchedSock);
    PairedSocks.Add(new PairOfSocks(MatchedSock, NewSock));
  }
  else
  {
    UnmatchedSocks.Add(NewSock);
  }
}

12

මම තවත් විසඳුමක් ඉදිරිපත් කළෙමි, එය අඩු මෙහෙයුම්, අඩු කාල පරිභෝජනයක් හෝ පොරොන්දු නොවනු ඇත, නමුත් විශාල මේස් යුගල මාලාවක අඩු කාලයක් පරිභෝජනය සැපයීම සඳහා එය ප්‍රමාණවත් තරම් ur ෂධයක් විය හැකිදැයි බැලීමට උත්සාහ කළ යුතුය.

පූර්ව කොන්දේසි: එකම මේස් ඇති බවට සහතිකයක් නොමැත. ඒවා එකම වර්ණයෙන් යුක්ත නම් එයින් අදහස් කරන්නේ ඒවාට එකම ප්‍රමාණයක් හෝ රටාවක් ඇති බවයි. මේස් අහඹු ලෙස මාරු වේ. අමුතු මේස් සංඛ්‍යාවක් තිබිය හැකිය (සමහර ඒවා අතුරුදහන්, කොපමණ සංඛ්‍යාවක් දැයි අපි නොදනිමු). විචල්ය "දර්ශකයක්" මතක තබා එය 0 ලෙස සකසන්න.

ප්‍රති result ලය ගොඩවල් එකක් හෝ දෙකක් ඇත: 1. “ගැලපෙන” සහ 2. “අතුරුදහන්”

හියුරිස්ටික්:

  1. වඩාත් සුවිශේෂී මේස් සොයා ගන්න.
  2. එහි තරගය සොයා ගන්න.
  3. ගැලපීමක් නොමැති නම්, එය "අතුරුදහන්" ගොඩට දමන්න.
  4. වඩාත් සුවිශේෂී මේස් නොමැති තෙක් 1 සිට නැවත කරන්න.
  5. අඩු මේස් 6 ක් තිබේ නම්, 11 වෙත යන්න.
  6. සියළුම මේස් අසල්වැසියාට අන්ධ ලෙස යුගල කරන්න (එය ඇසුරුම් නොකරන්න)
  7. ගැලපෙන සියලුම යුගල සොයාගෙන, එය ඇසුරුම් කර ඇසුරුම් කළ යුගල "ගැලපෙන" ගොඩට ගෙනයන්න; නව තරඟ නොමැති නම් - "දර්ශකය" 1 කින් වැඩි කරන්න
  8. "දර්ශකය" වැඩි නම් 2 (මෙය මේස් අංකය මත රඳා පවතින අගය විය හැකි බැවින් මේස් විශාල සංඛ්‍යාවක් ඇති බැවින් ඒවා අන්ධ ලෙස සම්බන්ධ කිරීමට ඇති ඉඩකඩ අඩුය) 11 වෙත යන්න
  9. ඉතිරි කොටස මාරු කරන්න
  10. 1 ට යන්න
  11. "දර්ශකය" අමතක කරන්න
  12. මේස් එකක් ගන්න
  13. එහි යුගලය සොයා ගන්න
  14. මේස් සඳහා යුගලයක් නොමැති නම්, එය "නැතිවූ" ගොඩට ගෙන යන්න
  15. ගැලපීම සොයාගතහොත් එය යුගල කරන්න, යුගල ඇසුරුම් කර එය "ගැලපෙන" ගොඩට ගෙන යන්න
  16. තව තවත් තිබේ නම් එක් මේස් 12 ක් යයි
  17. එක් වම්පස පමණක් තිබේ නම් 14 වෙත යන්න
  18. සිනහව තෘප්තිමත් :)

හානියට පත් මේස් ඉවත් කිරීම මෙන් චෙක්පත් ද එකතු කළ හැකිය. එය 2 ත් 3 ත් අතර සහ 13 ත් 14 ත් අතර ඇතුළත් කළ හැකිය.

ඕනෑම අත්දැකීම් හෝ නිවැරදි කිරීම් ගැන දැන ගැනීමට මම බලාපොරොත්තු වෙමි.


මම මෙය ලිවීමෙන් පසුව, මම එය සෑම විටම භාවිතා කරමි. එය මට තව ටිකක් කාර්යක්ෂම වීමට උපකාරී වූ අතර දැන් රැකියාව අඩු කම්මැලි ය.
සාසා

11

මම මේස් වර්ග කරන විට, මම ආසන්න වශයෙන් රේඩික්ස් වර්ග කිරීමක් කරමි, එකම වර්ණ / රටා වර්ගයේ වෙනත් මේස් අසල මේස් දමමි . මම මේ අවස්ථාවේදී යුගලය නිස්සාරණය කිරීමට යන මේස් එක අතහරින්න යන ස්ථානයට / ආසන්නයේ නිශ්චිත ගැලපීමක් දැකිය හැකි අවස්ථාව හැර.

අනෙක් සියලුම ඇල්ගොරිතම පාහේ ( usr විසින් ලබා ගත් ඉහළම ලකුණු පිළිතුර ඇතුළුව ) වර්ග කර, පසුව යුගල ඉවත් කරන්න. මිනිසෙකු ලෙස, වරකට සලකා බලනු ලබන මේස් ගණන අවම කිරීම වඩා හොඳ බව මට පෙනී ගියේය.

මම මෙය කරන්නේ:

  1. සුවිශේෂී මේස් එකක් තෝරා ගැනීම (ගොඩට මගේ ඇසට හසු වන ඕනෑම දෙයක්).
  2. එම සංකල්පීය ස්ථානයෙන් රේඩික්ස් වර්ග කිරීම ආරම්භ කිරීම, එම ස්ථානයට සමානකම් මත පදනම්ව ගොඩවල සිට මේස් අදින්න.
  3. නව සොකට්ටුව වත්මන් ගොඩට ආසන්නව තබන්න, එය කොතරම් වෙනස්ද යන්න මත පදනම්ව දුරක් තබන්න. මේස් එක සමාන නිසා තවත් එකක් උඩ තබා ඇති බව ඔබ දුටුවහොත්, එහි යුගලය සාදා ඒවා ඉවත් කරන්න. මෙයින් අදහස් කරන්නේ අනාගත සංසන්දනයන් නිවැරදි ස්ථානය සොයා ගැනීමට අඩු උත්සාහයක් ගන්නා බවයි.

මෙය O (1) කාලය තුළ නොපැහැදිලි-ගැලපීමේ මිනිස් හැකියාවෙන් ප්‍රයෝජන ගන්නා අතර එය පරිගණක උපාංගයක හැෂ්-සිතියමක් පිහිටුවීමට තරමක් සමාන වේ.

පළමුවෙන්ම සුවිශේෂී මේස් ඇදගෙන යාමෙන්, ආරම්භයෙන් අඩු විශේෂත්වයක් ඇති විශේෂාංග "විශාලනය" කිරීමට ඔබ ඉඩ තබයි.

ෆ්ලෝරෝ වර්ණය, ඉරි සහිත මේස් සහ දිගු මේස් යුගල තුන ඉවත් කිරීමෙන් පසු, ඔබ බොහෝ දුරට සුදු මේස් දළ වශයෙන් වර්ග කර ඇති ආකාරය අනුව වර්ග කළ හැකිය.

යම් අවස්ථාවක දී, මේස් අතර ඇති වෙනස කුඩා වන අතර අනෙක් පුද්ගලයින්ට වෙනස නොපෙනෙන අතර තවත් ගැලපෙන උත්සාහයක් අවශ්‍ය නොවේ.


10

ඔබ මේස් එකක් ගත් සෑම විටම එක තැනක තබන්න. ඊළඟ සොකට්ටුව ඔබ ගන්නවා, එය පළමු මේස් එකට නොගැලපේ නම්, පළමු එක අසල එය සකසන්න. එය එසේ නම්, යුගලයක් තිබේ. මේ ආකාරයෙන් කොපමණ සංයෝජන තිබේද යන්න ගැටළුවක් නොවන අතර, ඔබ තෝරා ගන්නා සෑම මේස් එකක් සඳහාම ඇත්තේ අවස්ථා දෙකක් පමණි - එක්කෝ එයට දැනටමත් ඔබේ මේස් පෙළේ ගැලපීමක් තිබේ, නැතහොත් එය එසේ නොවේ, එයින් අදහස් වන්නේ ඔබයි එය අරාවෙහි ස්ථානයකට එක් කරන්න.

මෙයින් අදහස් කරන්නේ ඔබ කිසි විටෙකත් ඔබේ මේස් අරාවෙහි නොතිබෙනු ඇති බවයි, මන්ද මේස් ගැලපෙන විට ඒවා ඉවත් වනු ඇත.


මේක තමයි මම කරන්නේ ... ඕ (එන්)
පයික්ලර්

2
Y පයික්ලර් - එය හොඳම අවස්ථාවෙහිදී ඕ (එන්) සහ නරකම අවස්ථාවෙහි ඕ (එන් * එන්) ය.
විල්ක්ස්-

2
ඔබ දැනටමත් දැක ඇති සියලුම මේස් පිළිබඳ ඔබේ මනසෙහි පූර්ණ අද්විතීය හැෂ් එකක් සෑදිය නොහැකි යැයි උපකල්පනය කරයි, එය මා දුටු සහ මීට පෙර දැක ඇති මේස් එකකට ගැලපෙන O (1) හා ගැලපෙන හැෂ්
පයික්ලර්

10

'N' ප්‍රමාණයේ හැෂ් වගුවක් සලකා බලන්න.

අපි සාමාන්‍ය බෙදාහැරීමක් යැයි උපකල්පනය කරන්නේ නම්, අවම වශයෙන් එක් මේස් එකක් එක් බාල්දියකට සිතියම් ගත කිරීම සඳහා ඇස්තමේන්තුගත 'ඇතුළත් කිරීම්' සංඛ්‍යාව NlogN වේ (එනම්, සියලු බාල්දි පිරී ඇත)

මම මෙය වෙනත් ප්‍රහේලිකාවක කොටසක් ලෙස ව්‍යුත්පන්න කර ඇති නමුත් වැරදි බව ඔප්පු කිරීම ගැන මම සතුටු වෙමි. මෙන්න මගේ බ්ලොග් ලිපිය ඒ පිළිබඳ ය

ඔබ සතුව ඇති අද්විතීය වර්ණ ගණන / මේස් රටාව මත දළ වශයෙන් ඉහළ සීමාවකට අනුරූප වීමට 'N' ඉඩ දෙන්න.

ඔබට ision ට්ටනයක් ඇති වූ පසු (අකා: ගැලපීමක්) එම මේස් යුගලය ඉවත් කරන්න. NlogN මේස් ඊළඟ කණ්ඩායම සමඟ එකම අත්හදා බැලීම නැවත කරන්න. එහි ඇති සුන්දරත්වය නම් මිනිස් මනස ක්‍රියා කරන ආකාරය නිසා ඔබ NlogN සමාන්තර සැසඳීම් (ision ට්ටන-විභේදනය) කළ හැකි වීමයි. :-)


10

මේස්, සැබෑ ඒවා හෝ සමාන දත්ත ව්‍යුහයක් යුගල වශයෙන් සපයනු ලැබේ.

සරලම පිළිතුර වන්නේ යුගලය වෙන් කිරීමට ඉඩ දීමට පෙර, යුගල සඳහා තනි දත්ත ව්‍යුහයක් ආරම්භ කළ යුතුව තිබූ අතර එය වම් සහ දකුණු මේස් වෙත දර්ශකයක් අඩංගු වන අතර එමඟින් මේස් සෘජුව හෝ ඔවුන්ගේ යුගල හරහා යොමු කිරීමට හැකි වේ. සොකට්ටුවක් එහි සහකරුට දර්ශකයක් අඩංගු වන පරිදි දිගු කළ හැකිය.

මෙය ඕනෑම ගණිතමය යුගල ගැටළුවක් වියුක්ත තට්ටුවකින් ඉවත් කිරීමෙන් විසඳයි.

මේස් යුගල කිරීමේ ප්‍රායෝගික ගැටළුවට එකම අදහස යෙදීම, පෙනෙන පිළිතුර නම්: ඔබේ මේස් කිසි විටෙකත් යුගල කිරීමට ඉඩ නොදෙන්න. මේස් යුගලයක් ලෙස සපයනු ලබන අතර, ලාච්චුවේ යුගලයක් ලෙස තබා ඇත (සමහර විට ඒවා එකට බෝල කිරීමෙන්), යුගලයක් ලෙස පැළඳ සිටී. නමුත් යුගලනය කළ නොහැකි ස්ථානය රෙදි සෝදන යන්ත්රය තුළ ඇත, එබැවින් අවශ්‍ය වන්නේ මේස් එකට රැඳී සිටීමට හා කාර්යක්ෂමව සේදීමට ඉඩ සලසන භෞතික යාන්ත්‍රණයකි.

භෞතික හැකියාවන් දෙකක් තිබේ:

සෑම මේස් එකකටම දර්ශකයක් තබා ගන්නා 'යුගල' වස්තුවක් සඳහා, මේස් එකට තබා ගැනීමට අප භාවිතා කරන රෙදි බෑගයක් තිබිය හැකිය. මෙය දැවැන්ත පොදු කාර්යයක් සේ පෙනේ.

නමුත් සෑම මේස් එකක්ම අනෙකාට යොමු කිරීම සඳහා පිළිවෙලට විසඳුමක් ඇත: පොපර් (හෝ ඔබ ඇමරිකානුවෙක් නම් 'ස්නැප් බොත්තමක්'),

http://www.aliexpress.com/compare/compare-invisible-snap-buttons.html

එවිට ඔබ කළ යුත්තේ ඔබ මේස් ගලවා ඔබේ රෙදි සෝදන කූඩයට දැමූ වහාම ඔබේ මේස් එකට ගසා ගැනීමයි. නැවතත් ඔබ මේස් යුගල සංකල්පයේ භෞතික වියුක්තයක් සමඟ ඔබේ මේස් යුගලනය කිරීමේ අවශ්‍යතාවය ඉවත් කර ඇත.


එය ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත, මන්දයත් දැනටමත් යුගලනය කර ඇති දත්ත සමඟ කටයුතු කිරීම පහසුය, ප්‍රශ්නය UNPAIRED වන විට කුමක් කළ යුතුද යන්න සහ ඔබට එය යුගල කිරීමට අවශ්‍යය.
අමිත්

8

"චලනය" මෙහෙයුම තරමක් මිල අධික නම් සහ "සංසන්දනය" මෙහෙයුම ලාභදායී නම්, ඔබ කෙසේ හෝ සම්පූර්ණ කට්ටලයම මුල් ගබඩාවට වඩා සෙවීම වේගවත් වන බෆරයකට ගෙන යා යුතුය ... අනිවාර්යයෙන්ම වර්ග කිරීම ඒකාබද්ධ කරන්න චලනය.

වියළීම සඳහා එල්ලා තැබීමේ ක්‍රියාවලිය ඒකාබද්ධ කිරීමෙන් එය සුළඟක් බව මට පෙනී ගියේය. මට කෙසේ හෝ සෑම මේස් එකක්ම ගෙන එය එල්ලා තැබිය යුතුය (ගෙනයන්න) එය නූල් මත නිශ්චිත ස්ථානයක එල්ලා තැබීමට කිසිවක් වියදම් නොකරයි. දැන් මම වර්ණ / සෙවන අනුව මේස් තැබීමට තෝරා ගන්නා මුළු බෆරය (නූල්) සෙවීමට බල කිරීම නොවේ. අඳුරු වම්පස, දීප්තිමත් දකුණ, වඩා වර්ණවත් ඉදිරිපස ආදිය. දැන් මම සෑම මේස් එකක්ම එල්ලා තැබීමට පෙර, ගැලපෙන එකක් දැනටමත් තිබේ නම් මම එහි “දකුණු අවට” දෙස බලමි - මෙය "ස්කෑන්" කිරීම තවත් මේස් 2-3 කට සීමා කරයි - සහ එසේ නම් , මම අනෙක් එක ඒ අසලම එල්ලා තබමි. වියළන විට නූල් වලින් ඉවත් කරන අතරතුර මම ඒවා යුගල වශයෙන් රෝල් කරමි.

දැන් මෙය ඉහළ පිළිතුරු මගින් යෝජනා කරන ලද “වර්ණයෙන් ගොඩවල් සෑදීමට” වඩා වෙනස් යැයි පෙනෙන්නට නොතිබුණද, පළමුව, විවික්ත ගොඩවල් නොව පරාසයන් තෝරා ගැනීමෙන්, “දම් පාට” “රතු” හෝ “නිල්” ගොඩට යනවාද යන්න වර්ගීකරණය කිරීමට මට කිසිදු ගැටළුවක් නොමැත; එය අතරට යයි. ඉන්පසු මෙහෙයුම් දෙකක් ඒකාබද්ධ කිරීමෙන් (වියළීමට හා වර්ග කිරීමට එල්ලා තබන්න) එල්ලෙන අතරතුර වර්ග කිරීමේ පොදු කාර්යය වෙනම වර්ග කිරීමකින් 10% ක් වැනි ය.


මෙම ප්‍රවේශයට තවත් වාසි දෙකක් ඇත: රේඛීය වියළීම මඟින් වියළන වියළන යන්ත්‍රයට වඩා අඩු මේස් ප්‍රමාණයක් අහිමි වන අතර, වර්ග කිරීමේ ක්‍රියාවලිය සෙසු රෙදි සේදීමටද ව්‍යාප්ත කළ හැකිය. රේඛාව සහ බඳුන් කර කෙලින්ම ඒවායේ ගබඩාවට ගෙන යනු ලැබේ. එය අඩු උත්සාහයන් දෙකකින් ක්‍රියාත්මක වන අතර, ඇඳුම් ඉහළට ඔසවා නැවත පහළට ගෙන යයි.
cphlewis

8

මම මේ මොහොතේ මගේ මේස් යුගලනය අවසන් කර ඇති අතර, එය කිරීමට හොඳම ක්‍රමය පහත දැක්වෙන බව මට පෙනී ගියේය:

  • මේස් වලින් එකක් තෝරා එය ඉවතට දමන්න (එම යුගල සඳහා 'බාල්දියක්' සාදන්න)
  • ඊළඟ එක කලින් යුගලය නම්, එය දැනට පවතින බාල්දියට දමන්න, එසේ නොමැතිනම් නව එකක් සාදන්න.

නරකම අවස්ථාවෙහිදී එයින් අදහස් වන්නේ ඔබ සතුව විවිධ බාල්දි n / 2 ඇති අතර වත්මන් මේස් යුගලය අඩංගු බාල්දිය කුමක්ද යන්න පිළිබඳව ඔබට n-2 නිර්ණායක ඇත. නිසැකවම, ඔබට යුගල කිහිපයක් තිබේ නම් මෙම ඇල්ගොරිතම හොඳින් ක්‍රියාත්මක වේ; මම එය යුගල 12 කින් කළා.

එය එතරම් විද්‍යාත්මක නොවේ, නමුත් එය හොඳින් ක්‍රියාත්මක වේ :)


මෙය තවමත් O (n ^ 2) ඇල්ගොරිතමයකි, මන්ද ඔබ නව සොකට්ටුවක් අදින සෑම අවස්ථාවකම එක් එක් බාල්දියට ඉහළින් නැවත යෙදිය යුතුය. එහෙත්, එකම කණ්ඩායම තුළ මිලදී ගත් මේස්වල පවා සුළු වෙනස්කම් ඇති බැවින් ඒවා යුගල වශයෙන් අද්විතීය (හෝ තනි-අද්විතීය) බවට පත් කරයි, කෙසේ වෙතත් වඩා හොඳ ක්‍රමයක් නැත
Semisonic

එකඟ වන්න, නමුත් මගේ ඇල්ගොරිතම උපකල්පනය කරන්නේ මිනිසා යුගලනය කරන බවයි. එමනිසා, ඔබ ගැලපෙන බාල්දිය සොයන විට ඔබේ මනසෙහි යම් ආකාරයක හැඹිලියක් ඇති වනු ඇත, එබැවින් ඔබට කෙසේ හෝ බාල්දි හරහා නැවත යෙදීමට අවශ්‍ය නොවේ. යුගලනය කිරීමේදී මගේ හිසෙහි මෙම හැඹිලි යාන්ත්‍රණය සඳහා කුමන ආකාරයේ දත්ත ව්‍යුහයක් සාදා ඇත්දැයි විශ්වාස නැත.
මාස්ට්‍රෝ

8

මගේ විසඳුම විධිමත් ලෙස අවශ්‍ය වන පරිදි ඔබේ අවශ්‍යතාවන්ට හරියටම අනුරූප නොවේ O(n) “අමතර” ඉඩක් . කෙසේ වෙතත්, මගේ කොන්දේසි සලකා බැලීමේදී එය මගේ ප්‍රායෝගික භාවිතයේදී ඉතා කාර්යක්ෂම වේ. මේ අනුව එය රසවත් විය යුතු යැයි මම සිතමි.

වෙනත් කාර්යයන් සමඟ ඒකාබද්ධ කරන්න

මගේ නඩුවේ විශේෂ කොන්දේසිය නම්, මම වියළන යන්ත්‍රයක් භාවිතා නොකිරීම, මගේ රෙදි සාමාන්‍ය රෙදි වියළනයක එල්ලා තබන්න. රෙදි එල්ලීම සඳහා O(n)මෙහෙයුම් අවශ්‍ය වේ (මාර්ගය වන විට, මම සෑම විටම බින් ඇසුරුම් සලකා බලමි මෙහි ගැටලුව ) සහ එහි ස්වභාවය අනුව ගැටළුවට රේඛීය “අමතර” අවකාශය අවශ්‍ය වේ. මම බාල්දියෙන් නව මේස් එකක් ගත් විට, යුගලය දැනටමත් එල්ලා තිබේ නම් එය එහි යුගලය අසල එල්ලා තැබීමට උත්සාහ කරමි. එය නව යුගලයකින් මේස් එකක් නම් මම ඒ අසල යම් ඉඩක් තබමි.

ඔරකල් මැෂින් වඩා හොඳයි ;-)

ගැලපෙන මේස් දැනටමත් කොතැනක හෝ එල්ලී තිබේද යන්න පරීක්ෂා කිරීම සඳහා අමතර වැඩක් අවශ්‍ය වන අතර එය පරිගණකයක් සඳහා O(n^2)සංගුණකය සමඟ විසඳුමක් 1/2ලබා දෙනු ඇත. නමුත් මේ අවස්ථාවේ දී “මානව සාධකය” ඇත්ත වශයෙන්ම වාසියකි - O(1)ගැලපෙන මේස් දැනටමත් එල්ලා තිබේ නම් මට සාමාන්‍යයෙන් ඉතා ඉක්මණින් (පාහේ ) හඳුනාගත හැකිය (බොහෝ විට මොළයේ හැඹිලිය සම්බන්ධ වී තිබේ) - එය එක්තරා ආකාරයක් ලෙස සලකන්න ඔරකල් මැෂින් හි මෙන් සීමිත “ ඔරකල් ” ;-) සමහර අවස්ථාවල ඩිජිටල් යන්ත්‍රවලට වඩා මිනිසුන්ට මෙම වාසි ඇත ;-)

එය පාහේ ලබා ගන්න O(n)!

මේ අනුව මේස් යුගලනය කිරීමේ ගැටළුව සම්බන්ධ කිරීම සඳහා මට O(n)“අමතර ඉඩක්” නොමිලේ ලැබෙන අතර, O(n)නියමිත වේලාවට විසඳුමක් ඇත, සරල එල්ලෙන රෙදි වලට වඩා ටිකක් වැඩක් අවශ්‍ය වන අතර සම්පූර්ණ යුගලයට වහාම ප්‍රවේශ වීමට ඉඩ ලබා දේ. මේස් ඉතා නරක සඳුදා උදෑසනක පවා ... ;-)


8

මෙම ගැටලුවට අලුත් යමක් දායක විය හැකි යැයි මම බලාපොරොත්තු වෙමි. ඔබේ සමස්ත රෙදි සෝදන කාර්ය සාධනය මන්දගාමී නොකර, ඔබට පෙර සැකසුම් කළ හැකි කරුණු දෙකක් ඇති බව සියලු පිළිතුරු නොසලකා හරින බව මම දුටුවෙමි .

එසේම, විශාල පවුල් සඳහා වුවද මේස් විශාල ප්‍රමාණයක් උපකල්පනය කිරීමට අපට අවශ්‍ය නැත. මේස් ලාච්චුවෙන් ඉවතට ගෙන ඒවා පැළඳ සිටින අතර, පසුව ඒවා සේදීමට පෙර නැවතී සිටින ස්ථානයක (සමහර විට බඳුනක්) විසි කරනු ලැබේ. බින් ලයිෆෝ-ස්ටැක් යැයි මා නොකියන අතර, එය උපකල්පනය කිරීම ආරක්ෂිත යැයි මම කියමි

  1. මිනිස්සු මේස් දෙකම දළ වශයෙන් බඳුනේ එකම ප්‍රදේශයට විසි කරති,
  2. බඳුන කිසිදු අවස්ථාවක අහඹු ලෙස සිදු නොවේ
  3. මෙම බඳුනේ ඉහළ සිට ගත් ඕනෑම උප කුලකයක සාමාන්‍යයෙන් යුගලයක මේස් දෙකම අඩංගු වේ.

මා දන්නා සියලුම රෙදි සෝදන යන්ත්‍ර ප්‍රමාණයෙන් සීමිත බැවින් (ඔබට සේදීම සඳහා මේස් කීයක් තිබුණද), සහ රෙදි සෝදන යන්ත්‍රයේ සත්‍ය සසම්භාවී වීම සිදුවන්නේ, අප සතුව මේස් කීයක් තිබුණත්, අපට සෑම විටම කුඩා අනු කොටස් තිබේ. සිංගල්ටන්.

අපගේ පෙර සැකසුම් අදියර දෙක වන්නේ පිරිසිදු ඇඳුම් පමණක් නොව වියලි වන මේස් ලබා ගැනීම සඳහා අප විසින් කළ යුතු "ඇඳුම් ආයිත්තම් කට්ටලයට මේස් දැමීම" සහ "ඇඳුම් ආයිත්තම් කට්ටලයෙන් මේස් ගැනීම" ය. රෙදි සෝදන යන්ත්‍ර මෙන්, ඇඳුම් ආයිත්තම් සීමිත වන අතර, අපි මේස් දෘශ්‍යමාන කරන රේඛාවේ මුළු කොටසම අප සතුව ඇතැයි මම සිතමි.

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 තොගයක්, සීමිත, සාමාන්‍ය රෙදි සෝදන යන්ත්‍රයක් සහ සීමිත සාමාන්‍ය ඇඳුම් ආයිත්තම් කට්ටලයක් ලෙස ක්‍රියා කරන බඳුනක් - නමුත් මෙය තවමත් විශාල මේස් සංඛ්‍යාවක් සමඟ ක්‍රියා කරයි.

සමාන්තරකරණය ගැන: ඔබ මේස් දෙකම එකම බඳුනකට විසි කරන තාක් කල්, ඔබට එම සියලු පියවර පහසුවෙන් සමාන්තරගත කළ හැකිය.


මේස් යනු සමහර දත්ත සමුදායන්හි අත්තනෝමතික වස්තු යුගල කිරීම සඳහා රූපකයක් පමණි.
අමිත්

1
තේරුණා, ඔබ කතෘ බව දුටුවේ නැහැ. ඔබට සාමාන්‍ය විසඳුමක් අවශ්‍ය නම්, ඔබ එසේ පැවසිය යුතුය. කෙසේ වෙතත්, ඔබ සතුව ඇති ඕනෑම තොරතුරක් සැලකිල්ලට ගැනීමේ කිසිදු වරදක් නැත, ඔබට සාමාන්‍ය විසඳුමක් ඉදිරිපත් කළ යුතු නම් මිස - විසඳුම නැවත භාවිතා කිරීම අත්හැර දැමීමෙන් සැලකිය යුතු තරම් හොඳ කාර්ය සාධනයක් ලැබිය හැකිය. මෙම අවස්ථාවේ දී, භාවිත නඩුව සහ සමස්තයක් ලෙස පවතින දත්ත පදනම සලකා බැලීම ප්‍රයෝජනවත් වේ. කෙසේ වෙතත්, ඔබේ විශේෂ ප්‍රශ්නයට මෙම විශේෂ පිළිතුරට සමාන පෙනුමක් ඇති මේස් සමඟ ගැටළු ඇත, උදා: විවිධ ප්‍රමාණවලින් කළු මේස්, එබැවින් සමහර අවස්ථාවල එය අදාළ නොවේ.
පිලිප් ෆ්ලෙන්කර්

1
එසේම, දත්ත සමුදායේ අත්තනෝමතික වස්තු යුගල කිරීම පිළිබඳව ඔබ ප්‍රශ්නයක් ඇසූ නිසා ඔබට> 2k ඉහළ නැංවීම් නොලැබුණි. මේස් වල ස්වභාවය නිසා (දත්ත වලට සාපේක්ෂව ඔබට අනුපිටපත් කළ නොහැකි) ඔබ විශේෂයෙන් ප්‍රශ්නය සීමා කර ඇති අතර, ඔබේ සහකරු හෝ සහකාරියගේ මේස් වලින් පහසුවෙන් ඔබේ මේස් වෙන්කර හඳුනාගත හැකිය යන කාරණය භාවිතා කිරීමට ඔබ දිරිමත් කළේය. ඔබ මේස් ගැන ප්‍රශ්නයක් ඇසුවොත්, පිළිතුරු දත්ත සමුදායන් ගැන බලාපොරොත්තු නොවන්න ;-)
පිලිප් ෆ්ලෙන්කර්

1
උපකල්පන කිහිපයක් තිබේ: සාමාන්‍ය රෙදි සෝදන මැෂින්, අ, සාමාන්‍ය ඇඳුම් ආයිත්තම් කට්ටලයක්, සහ ඔබ මේස් දෙකම එකවර බඳුනට විසි කරන කාරණය, එයින් අදහස් වන්නේ බොහෝ අවස්ථාවන්හි මේස් දෙකම එකම යන්ත්‍රයක ඇති බවත්, සහ ගණන එබැවින් වර්ග කළ යුතු ඉතිරි මේස් කුඩා වේ. නමුත් දත්ත ගබඩාවේ අත්තනෝමතික වස්තු ගබඩා කිරීම පිළිබඳ පිළිතුරක් ඔබට සැබවින්ම අවශ්‍ය වූ හෙයින්, මගේ විසඳුම ගැන තව දුරටත් සාකච්ඡා කිරීම ඇත්තෙන්ම ප්‍රයෝජනවත්ද?
පිලිප් ෆ්ලෙන්කර්

1
මා පැවසූ පරිදි, මූලද්‍රව්‍ය වෙනස පිළිබඳ ගැටලුව හැර, ඔබ ඉල්ලූ සෑම දෙයක්ම මා විසින් ආමන්ත්‍රණය කළ බව මම සිතමි. මම මෙහි දෙවරක් වීමට උත්සාහ නොකරමි, නමුත් මම මීට ටික කලකට පෙර මෙම පිළිතුර සඳහා විශාල උත්සාහයක් ගෙන ඇති අතර, ඔබ දැන් සමහර පිළිතුරු කියවා මුල් ප්‍රශ්නයට පිළිතුරු නොදුන් බව ප්‍රකාශ කිරීම ගැන මම තරමක් කලකිරී සිටිමි. . ඇයි ඔබ සම්පූර්ණ නූල් තනිවම තබන්නේ නැත්තේ - ඔබ එය ඇසීමෙන් වසර 2 කට වඩා වැඩි කාලයක් ගත වී ඇත.
පිලිප් ෆ්ලෙන්කර්

8

O (1) කාලය ගතවන ක්‍රියාවලියක් සඳහා මගේ උත්සාහය අඩු කිරීමට මම සරල පියවර ගෙන ඇත්තෙමි.

මගේ යෙදවුම් මේස් වර්ග දෙකෙන් එකකට අඩු කිරීමෙන් (විනෝදය සඳහා සුදු මේස්, වැඩ සඳහා කළු මේස්), මට තීරණය කිරීමට අවශ්‍ය වන්නේ මා සතුව ඇති මේස් දෙකෙන් එකක් පමණි. (තාක්ෂණික වශයෙන්, ඒවා කිසි විටෙකත් එකට සෝදා නැති නිසා, මම ක්‍රියාවලිය O (0) කාලය දක්වා අඩු කර ඇත්තෙමි.)

ප්‍රිය මේස් සොයා ගැනීමටත්, දැනට පවතින මේස් සඳහා ඇති අවශ්‍යතාවය තුරන් කිරීම සඳහා ප්‍රමාණවත් ප්‍රමාණයකින් මිලදී ගැනීමටත් යම් යම් පෙර උත්සාහයන් අවශ්‍ය වේ. කළු මේස් අවශ්‍යතාවයට පෙර මම මෙය කළ නිසා, මගේ උත්සාහය අවම විය, නමුත් සැතපුම් ගණන වෙනස් විය හැකිය.

එවැනි පෙරටුගාමී උත්සාහයක් බොහෝ ජනප්‍රිය හා effective ලදායී කේතයන්හි බොහෝ වාරයක් දැක තිබේ. නිදසුන් අතර # දශම කිහිපයකට # නිර්වචනය කිරීම (වෙනත් උදාහරණ පවතී, නමුත් එය දැන් මතකයට එන්නේ).


7

රටාව හැෂ් ලෙස භාවිතා කරමින් අසමසම මේස් සඳහා භාවිතා කරන හැෂ් වගුවක් සාදන්න. මේස් එකින් එක ඉරා දමන්න. මේස් එකට හැෂ් වගුවේ රටා ගැළපීමක් තිබේ නම්, මේසය මේසයෙන් ඉවතට ගෙන යුගලයක් සාදන්න. මේස් එකට ගැලපීමක් නොමැති නම්, එය මේසය තුළට දමන්න.


ප්‍රශ්නයේ නිශ්චිතව සඳහන් කර ඇති පරිදි එය නිසි පරිදි සිදු නොකරන්නේ කෙසේද?
අමිත්

7

ඔබේ මේස් යුගල වර්ග කිරීමේ ගැටළුව O (n) වේ. ඔබ ඒවා රෙදි සෝදන කූඩයට විසි කිරීමට පෙර , ඔබ වම් පසින් දකුණට නූල් දමන්න . ඒවා පිටතට ගත් පසු, ඔබ නූල් කපා එක් එක් යුගලය ඔබේ ලාච්චුවට දමන්න - යුගල n මත මෙහෙයුම් 2 ක්, එබැවින් O (n).

දැන් ඊළඟ ප්‍රශ්නය වන්නේ ඔබ ඔබේම රෙදි සේදීම සහ ඔබේ බිරිඳ ඇය කරනවාද යන්නයි. එය සම්පූර්ණයෙන්ම වෙනස් ගැටළු වල වසමකි . :)


මේස් යනු රූපකයක් පමණක් වන ප්‍රශ්නයට මෙය පිළිතුරු සපයන්නේ නැත.
අමිත්

ප්‍රශ්නය වූයේ යුගල නොකළ ගොඩකින් මේස් යුගල කරන්නේ කෙසේද යන්න මිස යුගල කිරීම අවශ්‍ය නොවන්නේ කෙසේද යන්නයි.
අමිත්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.