Patience Sort + ping pong біріктіруді енгізу

Microsoft Research-тің жаңа басылымы соңғы қағаз » жаңа, жылдам іске асыруды сипаттайды. шыдамды сұрыптау алгоритмі. Іске асырудың негізгі бөлігі - «пинг-понг» бірігуін біріктіру стратегиясын жақсарту. Мен осы біріктіру стратегиясында біріктіруді орындау үшін екі бірдей массивтерді пайдаланады деп ойлаймын, себебі бір ғана массивді қолданып, әрдайым қағазда сипатталғандай «соқыр біріктіруді» орындады. Әрқашан соқыр біріктірулерді орындау және осылайша біріктіруді орындау үшін бір ғана массивді қолдану арқылы, жұмыс уақытында өзгеріссіз жадты пайдалануды азайтады.

5
Айтпақшы, мен авторларды дұрыс түсінбедім бе, немесе нақты (дерлік сұрыпталған) деректер даналарының «плеторы» бар синтетикалық (дерлік сұрыпталған) деректердің жасалуын ынталандырды ма?
қосылды автор Ramesh Soni, көзі

1 жауаптар

Пинг-понг біріктірудің қалай жұмыс істегенін дұрыс түсіндім деп үміттенемін. Егер солай болса, онда ол екі массивтерді пайдаланады:

  • Типтік біріктіру әрекеттері массивте екі іске қосылады және оларды басқа торға біріктіреді; онда нәтижелерді бастапқы массаға қайта көшіреді. Біріктіруге арналған 2-ден көп іске қосылған кезде, оларды жұптастырып, массивке қосып, содан кейін барлық деректерді бастапқы массаға көшіріп, ешқандай жүгіріс болмағанша қайталаңыз.

  • Ping-pong біріктіру біріктіргіштері жұптың ішінде массивке өтеді, содан кейін оларды түпнұсқа жиымында ғана көшірудің орнына, ол нәтижені уақытша жиымнан басқа массивке жұптастырады, содан кейін бірінші уақытша массивге , сосын екіншісіне және т.б. ... Мақсаты жұптың бірігуінің әрбір сериясынан кейін барлық деректерді бастапқы массаға көшірмеу болдырмау.

Енді сіздің сұрағыңыз шынымен деп ойлаймын «біріктірудің орнына пинг-понга біріктіру бұрынғыдан екі уақытша массивтер арасында жұмыс істейді, бір уақытша массивте жұппен жүгіреді, содан кейін түпнұсқалық массивге оралады, содан кейін уақытша массивге оралады, т.б. ...? «

Шынымды айтсам, мен бір ғана алдын-ала түсініктеме алдым және шынымен қанағаттандырмайды: C ++ -де алгоритмдерді іске асыруға бейім, ал егер ping_pong_merge алгоритмін жазсам, онда кез-келген кездейсоқ қол жетімді иераторлар бұл std :: deque (тұрақты өлшемді массивтердің тізімі), сондай-ақ тұрақты жиымдарды өңдеуі мүмкін дегенді білдіреді. std :: deque элементінде $ O (1) $ элементінің қатынасы бар болса, іс жүзінде std :: vector қарағанда шын мәнінде баяу болады, сондықтан екі уақытша массивтерді пайдалану Пинг-понг біріктіруі кездейсоқ қатынау ең жылдам болып табылатын коллекциялар арасында ғана жүреді. Бұл проблеманың өнімділігімен салыстырғанда жады болуы мүмкін.

2
қосылды