Дастаи шумо вазифадор аст, ки як пойгоҳи додаҳои ҳуҷҷатҳои хотираи муштаракро таҳия кунад. Сарбории маъмулӣ ин интихоби N ҳуҷҷати болоии аз рӯи майдони рақамии худсарона (индексиянашуда) аз маҷмӯаи андозаи M (одатан N < 100 << M) мураттабшуда мебошад. Сарбории кори каме камтар маъмул ин интихоби N боло пас аз гузаштани ҳуҷҷатҳои S боло (S ~ N) хоҳад буд.
Барои самаранок иҷро кардани чунин дархостҳо алгоритмеро пешниҳод кунед. Мушкилии ҳисобкунии онро бо истифода аз аломати бузурги O дар ҳолати миёна ва бадтарин сенарияҳо ҳисоб кунед.
Таҳлили ҳалли (видео)
Оғоз соати 34:50, ҳамагӣ 6 дақиқа:
Таҳлили ҳалли (матн)
Ҳалли рӯизаминӣ: ҳама ҳуҷҷатҳоро ҷудо кунед (масалан бо киксорт), пас ҳуҷҷатҳои N+S гиред. Дар ин маврид мураккабии људокунї ба њисоби миёна О(M lg M), дар бадтаринаш О(М2) аст.
Маълум аст, ки ба тартиб андохтани хамаи М хуччатхо ва баъд гирифтани як кисми ками онхо бесамар аст. Барои он ки ҳама ҳуҷҷатҳоро ҷудо накунед, алгоритм мувофиқ аст зуд интихоб кунед, ки N + S -и ҳуҷҷатҳои дилхоҳро интихоб мекунад (онҳоро аз рӯи ҳама алгоритм мураттаб кардан мумкин аст). Дар ин ҳолат, мураккабӣ ба ҳисоби миёна ба O(M) кам мешавад, дар ҳоле ки бадтарин ҳолат бетағйир мемонад.
Бо вуҷуди ин, шумо метавонед онро боз ҳам самараноктар иҷро кунед - алгоритмро истифода баред ҷараёни бинарӣ. Дар ин ҳолат, ҳуҷҷатҳои аввалини N+S ба min- ё max-heap (вобаста ба самти навъ) илова карда мешаванд ва сипас ҳар як ҳуҷҷати навбатӣ бо решаи дарахт муқоиса карда мешавад, ки ҳуҷҷати ҳадди ақал ё ҳадди аксарро дар бар мегирад, ва агар лозим бошад, ба дарахт илова карда мешавад. . Дар ин ҳолат, мураккабӣ дар ҳолати бадтарин, вақте ки шумо бояд пайваста дарахтро аз нав созед, O(M lg M) аст, мураккабӣ ба ҳисоби миёна O(M), мисли интихоби quickselect.
Бо вуҷуди ин, ҷараёни теппа самараноктар мешавад, зеро дар амал аксари ҳуҷҷатҳоро бе барқарор кардани тӯда пас аз як муқоиса бо унсури решаи он партофтан мумкин аст. Чунин навъбандӣ дар базаи ҳуҷҷати дар хотираи Zebra дар Контур таҳия ва истифода мешавад.
Ҳалли рӯизаминӣ: иваз кардани ҳолати элементҳои якум ва дуюм, баъд якум ва сеюм, баъд якум ва чорум ва ғайра. Пас аз ҳар мубодила, ҳолати як элемент дар ҳолати дилхоҳ хоҳад буд. Шумо бояд тағиротҳои O(N) кунед ва вақти O(NM)-ро сарф кунед.
Вақти хатӣ дароз аст, бинобар ин шумо метавонед ҳолати элементҳоро ҷуфт-ҷуфт иваз кунед: якум бо дуюм, сеюм бо чорум ва ғайра. Пас аз ҳар як мубодилаи давлатӣ, ҳар як унсури дуюм дар мавқеи дуруст хоҳад буд. Шумо бояд ивазкунии O(lg N) кунед ва вақти O(M lg N)-ро сарф кунед.
Вале сменаро боз хам самарабахштар — на дар хат, балки дар вакти доимй кардан мумкин аст. Барои ин, дар қадами аввал ба шумо лозим аст, ки ҳолати элементи якумро бо элементи охирин, дуюмро бо элементи охирин ва ғайра иваз кунед. Ҳолати элементи охирин дар ҳолати дуруст хоҳад буд. Ва ҳоло ба мо лозим аст, ки ҳолати элементи дуюмро бо элементи охирин, сеюмро бо элементи пеш аз охирин ва ғайра иваз кунем. Пас аз ин даври мубодила, давлатҳои ҳама унсурҳо дар мавқеи дуруст хоҳанд буд. Дар маҷмӯъ тағиротҳои O(2M) ~ O(1) хоҳанд буд.
Чунин ҳалл математикеро, ки то ҳол дар хотир дорад, ки гардиш таркиб аз ду симметрияи меҳвар аст, ба ҳайрат намеорад. Зимнан, он барои смена на аз руи як, балки аз руи мавкеъхои К<N ба таври ночиз умум карда мешавад. (Дар шарҳҳо нависед, ки чӣ тавр дақиқ.)