Yhdistä lajittelu

Yhdistä lajittelu rinnastuu hyvin divide-ja conquer-menetelmän käytön vuoksi. Algoritmin useita rinnakkaisia variantteja on kehitetty vuosien varrella. Jotkin rinnakkaiset merge sort-algoritmit liittyvät vahvasti peräkkäiseen top-down-yhdistymisalgoritmiin, kun taas toisilla on erilainen yleinen rakenne ja käyttävät K-way-yhdistämistapaa.

Merge sort kanssa rinnakkain recursionEdit

peräkkäinen yhdistäminen lajitella menettely voidaan kuvata kahdessa vaiheessa, jakaa vaiheeseen ja yhdistää vaihe., Ensimmäinen koostuu monista rekursiokutsua, että toistuvasti suorittaa sama jako prosessi, kunnes subsequences ovat triviaalisti lajitellaan (jotka sisältävät yhtä tai ei-elementti). Intuitiivinen lähestymistapa on näiden rekursiivisten puhelujen rinnastaminen. Seuraava pseudokoodi kuvaa limityslajittelun kanssa rinnakkain rekursiota käyttäen haarukka ja liittyä avainsanat:

Tämä algoritmi on triviaali muutos juokseva versio ja ei yhdensuuntaistettua hyvin. Siksi sen speedup ei ole kovin vaikuttava., Se on span Θ ( n ) {\displaystyle \Theta (n)} , joka on vain parannus Θ ( log ⁡ n ) {\displaystyle \Theta (\log n)} verrattuna juokseva versio (ks. Johdanto-Algoritmit). Tämä johtuu pääasiassa sekventiaalisesta yhdistämismenetelmästä, koska se on rinnakkaisten teloitusten pullonkaula.

Merge sort kanssa rinnakkain mergingEdit

Main artikkeli: Merge-algoritmi § Parallel merge

Parempi yhdensuuntaisuus voidaan saavuttaa käyttämällä parallel merge-algoritmi. Cormen ym. esitä binäärimuunnos, joka yhdistää kaksi lajiteltua alijaksoa yhdeksi lajitelluksi lähtöjärjestykseksi.,

yhdessä sekvenssistä (pidempi jos epätasa-arvoinen pituus) valitaan keskitason indeksin alkuaine. Sen sijainti toisessa järjestyksessä määritetään siten, että tämä sekvenssi pysyy lajiteltuna, jos tämä elementti olisi asetettu tähän asentoon. Näin tiedetään, kuinka monta muuta alkuainetta molemmista sekvensseistä on pienempiä ja valitun alkuaineen asema lähtöjärjestyksessä voidaan laskea. Osittaista sekvenssit pienempiä ja suurempia elementtejä luotu tällä tavalla, merge-algoritmi on jälleen toteutettu rinnakkain, kunnes pohja tapauksessa rekursio on saavutettu.,

seuraava pseudokoodilla osoittaa muutettu parallel merge sort-menetelmää käyttäen parallel merge-algoritmi (hyväksytty Cormen et al.).

jotta voitaisiin analysoida toistuminen suhteessa pahimmassa tapauksessa span, rekursiivinen puhelut parallelMergesort on otettava vain kerran, koska niiden rinnakkainen suoritus, saada

lisätietoja monimutkaisuus samanaikaisesti yhdistää menettely, ks. Merge-algoritmi.,

ratkaisu tähän toistuminen on antanut

T ∞ oli sort = Θ ( log ⁡ ( n), 3 ) {\textstyle T_{\infty }^{\text{sort}}=\Theta \left(\log(n)^{3}\right)} .

Rinnakkain multiway yhdistää sortEdit

Se näyttää mielivaltaisesti rajoittaa yhdistää lajitella algoritmeja binary yhdistää menetelmä, koska siellä on yleensä p > 2-prosessorit saatavilla. Parempi lähestymistapa voidaan käyttää K-way-merge menetelmä, yleistys binary sulautua, joka k {\displaystyle k} lajitellut sekvenssit yhdistetään., Tämä yhdistämismuunnos soveltuu hyvin kuvaamaan lastenvaunujen lajittelualgoritmia.

Perus IdeaEdit

rinnakkain multiway mergesort prosessin neljä prosessorit t 0 {\displaystyle t_{0}} t 3 {\displaystyle t_{3}} .

Multisequence selectionEdit

PseudocodeEdit

Alla, täydellinen pseudokoodina rinnakkain multiway yhdistää lajitella algoritmi on annettu., Oletamme, että siellä on este synkronointi ennen ja jälkeen multisequence valinta siten, että jokainen prosessori voidaan määrittää jakamalla elementit ja sekvenssi-osio kunnolla.

AnalysisEdit

Käytännön sopeutuminen ja applicationEdit

multiway yhdistää lajitella algoritmi on hyvin skaalautuva kautta sen korkea parallelization ominaisuus, joka mahdollistaa käytön monissa prosessorit. Tämä tekee algoritmista varteenotettavan ehdokkaan suurten tietomäärien, kuten tietokoneklustereissa käsiteltyjen tietojen lajitteluun., Myös, koska tällaisissa järjestelmissä muisti ei yleensä ole rajoittava resurssi, haitta avaruuden monimutkaisuus sulautuvat tavallaan on vähäinen. Tällaisissa järjestelmissä on kuitenkin tärkeitä muitakin tekijöitä, joita ei oteta huomioon lastenvaunujen mallintamisessa. Täällä, seuraavat seikat on otettava huomioon: Muisti hierarkia, kun tiedot eivät sovi prosessorit välimuistin, tai viestintä yläpuolella vaihtaa tietoja välillä prosessorit, joka voisi tulla pullonkaula, kun tietoja ei voi enää käyttää kautta jaettua muistia.

Sanders et al., on esitetty niiden paperin bulk-synkronoitu rinnakkainen algoritmi monitasoinen multiway mergesort, joka jakaa p {\displaystyle p} prosessorit osaksi r {\displaystyle r} ryhmien koko p ’{\displaystyle s’} . Kaikki suorittimet lajittelevat paikallisesti ensin. Toisin kuin yksitasoinen multiway sulautuu, nämä sekvenssit jaetaan sitten R {\displaystyle r} – osiin ja osoitetaan asianmukaisille prosessoriryhmille. Nämä vaiheet toistuvat rekursiivisesti näissä ryhmissä. Tämä vähentää viestintää ja erityisesti välttää ongelmia monien pienten viestien kanssa., Perustana olevan todellisen verkon hierarkkista rakennetta voidaan käyttää prosessoriryhmien (esim.telineet, klusterit,) määrittelyyn…).

Edelleen VariantsEdit

Yhdistää tavallaan oli yksi ensimmäisistä lajittelualgoritmeja, jossa optimaalinen nopeus oli saavutettu, Richard Cole käyttää ovela subsampling algoritmi varmistaa, O(1) yhdistäminen. Muut kehittyneet rinnakkaiset lajittelualgoritmit voivat saavuttaa samat tai paremmat aikarajat pienemmällä vakiolla., Esimerkiksi vuonna 1991 David Valtuudet on kuvattu parallelized quicksort (ja niihin liittyvät radix sort), jotka voivat toimia O(log n) aikaa CRCW rinnakkain random-access machine (PRAM) n prosessorit suorittamalla osiointi epäsuorasti. Voimia edelleen osoittaa, että liukuhihna-versio ei tullut silloin on Bitonic Mergesort O((log n)2) aikaa perhonen lajittelu-verkko on käytännössä itse asiassa nopeammin kuin O(log n) lajittelee VAUNUT, ja hän tarjoaa yksityiskohtaista keskustelua piilotettu yleiskustannukset verrattuna, radix ja rinnakkain lajittelu.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Siirry työkalupalkkiin