Ця стаття потребує уваги й турботи фахівця у своїй галузі. Причина — Many subtle problems. Quicksort not used. I/O speed issues. Number of drives issue. Better modeling of performance.. |
Зовнішнє сортування — це клас алгоритмів сортування, який може обробляти величезну кількість даних. Зовнішнє сортування потрібне, коли сортовані дані не входять у обчислювального пристрою (RAM), а замість цього вони повинні знаходитися в повільній , як правило, на . Зовнішнє сортування зазвичай використовує гібридну стратегію сортування-злиття. У фазі сортування, шматки даних, достатньо малих для розміщення в основній пам'яті, прочитуються, сортуються та виводяться до тимчасового файлу. У фазі злиття сортовані субфайли об'єднуються в один великий файл.
Зовнішнє сортування злиттям
Одним з прикладів зовнішньої сортування є зовнішній алгоритм сортування злиттям, який сортує частини, кожна з яких входить у оперативну пам'ять, а потім об'єднує відсортовані частини. Наприклад, для сортування 900 мегабайт даних, використовуючи лише 100 мегабайтів оперативної пам'яті:
- Прочитати 100 МБ даних у основній пам'яті та сортувати за допомогою деякого звичайного методу, наприклад quicksort.
- Зберегти відсортовані дані на диск.
- Повторити кроки 1 і 2 до тих пір, поки всі дані не будуть відсортовані по 100 MB (є 900 МБ / 100 МБ = 9 разів), Які тепер потрібно об'єднати в один вихідний файл.
- Прочитати перші 10 МБ (= 100 МБ / (9 шт. + 1)) кожного відсортованого шматка у вхідні буфери в основній пам'яті і виділіть залишкові 10 МБ для вихідного буфера. (На практиці це може забезпечити кращу продуктивність, щоб зробити вихідний буфер більшим, а вхідні буфери трохи меншими.)
- Виконати і зберегти результат у вихідному буфері. Кожного разу, коли заповнюється вихідний буфер, записувати його до останнього відсортованого файлу та очистити його. Кожного разу, коли будь-яка з 9 вхідних частин очищується, заповнити його наступними 10 МБ з с відповідних 100 МБ відсортованого фрагмента, доки не буде використано всі 10 фрагментів. Це ключовий крок, оскільки алгоритм злиття робить лише один прохід послідовно через кожну частину, кожний шматок даних не повинен бути повністю завантажений.
Особливості методу
Попередній приклад — це сортування в два кроки: спочатку сортування, а потім об'єднання. Сортування закінчується одиничним злиттям 9-ти частин, а не серією двосторонніх процесів злиття, як у типовому сортуванні злиття в пам'яті. Це відбувається тому, що кожене злиття передбачає читання та запис значення з диска і на нього.
Обмеження для одиничного злиття полягає в тому, що при збільшенні кількості фрагментів пам'ять буде розділена на більшу кількість частин, тому кожна з них буде меншою. Це спричиняє велику кількість процесів читання малих частин даних, ніж меншу кількість більших. Таким чином, для сортування, скажімо, 50 Гб у 100 МБ оперативної пам'яті, використовуючи одиничне злиття неефективно: пошук на диску необхідний для заповнення вхідних фрагментів даних кожного з 500 шт. займаює більшу частину часу. Використання двох злиттів дозволяє вирішити проблему. Тоді процес сортування може виглядати так:
- Запуск початкового протоколу сортування.
- Запуск першого злиття, яке об'єднує 25 шматків одночасно, в результаті чого виділяються 20 більших відсортованих фрагментів.
- Запуск другого злиття, щоб об'єднати 20 нових фрагментів.
Як і у звичайному сортуванні, ефективний метод зовнішнього сортування вимагає часу O ( n log n ): експоненціальне збільшення розміру даних зумовдює лінійного збільшення кількості проходів. Використовуючи велику кількість пам'яті, надану сучасними комп'ютерами, логарифмічний фактор росте дуже повільно. До 500 Гб даних можна сортувати за допомогою 1 Гб основної пам'яті, перш ніж третє злиття стане вигідним, і значно більші об'єми даних, перш ніж в пригоді стане четверте злиття. Припустимо, що маємо диск з 200 MB / s читання/запису, час пошуку 20 мс, 1 Гб пам'яті, 500 Гб для сортування. Фаза злиття буде складатися з 500 частин по 2 МB, кожна з них витрачає по 250 мс на пошук, а потім читання та запис 500 ГБ. Буде витрачено 5000 секунд на пошук та 5000 секунд на перезапис. Використання двох пропусків, як описано вище, майже усунуло б час пошуку, але додасть ще 5000 секунд читання та запису, тому це приблизно точка беззбитковості між дво- і трипропускними віріантами сортування. Такі засоби, як твердотірні накопичувачі (SSD) також збільшують об'єм даних, які можна сортувати до того, як додаткові злиття стають вигідними.
Об'єм основної пам'яті має важливе значення. Подвоєння пам'яті, призначеної для сортування, зменшує вдвічі кількість частин і кількість читань на шматочок, зменшуючи кількість шуканих необхідних приблизно на три чверті. Відношення обсягу оперативної пам'яті до накопичення дисків на серверах часто робить зручним виконувати сортування величезних об'ємів даних на кластері машин, а не на одній машині з декількома пропусками.
Інші алгоритми
Зовнішнє сортування злиттям не є єдиним зовнішнім алгоритмом сортування; існують також , які працюють шляхом розбиття несортованих значень на менші, які можуть бути відсортовані в основній пам'яті. Подібно сортування злиттям, зовнішній сортування розподілом також має розділ основної пам'яті.
Примітки
- Дональд Кнут, The Art of Computer Programming, Volume 3: Sorting and Searching, Second Edition. Addison-Wesley, 1998, , Section 5.4: External Sorting, pp.248–379.
- and , Fundamentals of Data Structures, H. Freeman & Co., .
- Chris Nyberg, Mehul Shah, Sort Benchmark Home Page [Архівовано 13 січня 2012 у Wayback Machine.] (links to examples of parallel sorts)
See also
Посилання
- STXXL, an algorithm toolkit including external mergesort [Архівовано 24 листопада 2011 у Wayback Machine.]
- An external mergesort example [Архівовано 1 листопада 2015 у Wayback Machine.]
- A K-Way Merge Implementation [Архівовано 8 жовтня 2015 у Wayback Machine.]
- External-Memory Sorting in Java [Архівовано 24 грудня 2014 у Wayback Machine.]
- A sample pennysort implementation using Judy Arrays [Архівовано 27 лютого 2017 у Wayback Machine.]
- Sort Benchmark [Архівовано 13 січня 2012 у Wayback Machine.]
На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до . |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Nemaye perevirenih versij ciyeyi storinki jmovirno yiyi she ne pereviryali na vidpovidnist pravilam proektu Cya stattya potrebuye uvagi j turboti fahivcya u svoyij galuzi Prichina Many subtle problems Quicksort not used I O speed issues Number of drives issue Better modeling of performance Bud laska povidomte pro ce znajomomu vam specialistu abo vipravte yiyi sami yaksho vi volodiyete vidpovidnimi znannyami Mozhlivo storinka obgovorennya mistit zauvazhennya shodo potribnih zmin Zovnishnye sortuvannya ce klas algoritmiv sortuvannya yakij mozhe obroblyati velicheznu kilkist danih Zovnishnye sortuvannya potribne koli sortovani dani ne vhodyat u osnovnu pam yat obchislyuvalnogo pristroyu RAM a zamist cogo voni povinni znahoditisya v povilnij zovnishnij pam yati yak pravilo na zhorstkomu disku Zovnishnye sortuvannya zazvichaj vikoristovuye gibridnu strategiyu sortuvannya zlittya U fazi sortuvannya shmatki danih dostatno malih dlya rozmishennya v osnovnij pam yati prochituyutsya sortuyutsya ta vivodyatsya do timchasovogo fajlu U fazi zlittya sortovani subfajli ob yednuyutsya v odin velikij fajl Zmist 1 Zovnishnye sortuvannya zlittyam 1 1 Osoblivosti metodu 2 Inshi algoritmi 3 Primitki 4 See also 5 PosilannyaZovnishnye sortuvannya zlittyamred Odnim z prikladiv zovnishnoyi sortuvannya ye zovnishnij algoritm sortuvannya zlittyam yakij sortuye chastini kozhna z yakih vhodit u operativnu pam yat a potim ob yednuye vidsortovani chastini 1 2 Napriklad dlya sortuvannya 900 megabajt danih vikoristovuyuchi lishe 100 megabajtiv operativnoyi pam yati Prochitati 100 MB danih u osnovnij pam yati ta sortuvati za dopomogoyu deyakogo zvichajnogo metodu napriklad quicksort Zberegti vidsortovani dani na disk Povtoriti kroki 1 i 2 do tih pir poki vsi dani ne budut vidsortovani po 100 MB ye 900 MB 100 MB 9 raziv Yaki teper potribno ob yednati v odin vihidnij fajl Prochitati pershi 10 MB 100 MB 9 sht 1 kozhnogo vidsortovanogo shmatka u vhidni buferi v osnovnij pam yati i vidilit zalishkovi 10 MB dlya vihidnogo bufera Na praktici ce mozhe zabezpechiti krashu produktivnist shob zrobiti vihidnij bufer bilshim a vhidni buferi trohi menshimi Vikonati sortuvannya zlittyam 9 ti vidsortovanih chastin i zberegti rezultat u vihidnomu buferi Kozhnogo razu koli zapovnyuyetsya vihidnij bufer zapisuvati jogo do ostannogo vidsortovanogo fajlu ta ochistiti jogo Kozhnogo razu koli bud yaka z 9 vhidnih chastin ochishuyetsya zapovniti jogo nastupnimi 10 MB z s vidpovidnih 100 MB vidsortovanogo fragmenta doki ne bude vikoristano vsi 10 fragmentiv Ce klyuchovij krok oskilki algoritm zlittya robit lishe odin prohid poslidovno cherez kozhnu chastinu kozhnij shmatok danih ne povinen buti povnistyu zavantazhenij Osoblivosti metodured Poperednij priklad ce sortuvannya v dva kroki spochatku sortuvannya a potim ob yednannya Sortuvannya zakinchuyetsya odinichnim zlittyam 9 ti chastin a ne seriyeyu dvostoronnih procesiv zlittya yak u tipovomu sortuvanni zlittya v pam yati Ce vidbuvayetsya tomu sho kozhene zlittya peredbachaye chitannya ta zapis znachennya z diska i na nogo Obmezhennya dlya odinichnogo zlittya polyagaye v tomu sho pri zbilshenni kilkosti fragmentiv pam yat bude rozdilena na bilshu kilkist chastin tomu kozhna z nih bude menshoyu Ce sprichinyaye veliku kilkist procesiv chitannya malih chastin danih nizh menshu kilkist bilshih Takim chinom dlya sortuvannya skazhimo 50 Gb u 100 MB operativnoyi pam yati vikoristovuyuchi odinichne zlittya neefektivno poshuk na disku neobhidnij dlya zapovnennya vhidnih fragmentiv danih kozhnogo z 500 sht zajmayuye bilshu chastinu chasu Vikoristannya dvoh zlittiv dozvolyaye virishiti problemu Todi proces sortuvannya mozhe viglyadati tak Zapusk pochatkovogo protokolu sortuvannya Zapusk pershogo zlittya yake ob yednuye 25 shmatkiv odnochasno v rezultati chogo vidilyayutsya 20 bilshih vidsortovanih fragmentiv Zapusk drugogo zlittya shob ob yednati 20 novih fragmentiv Yak i u zvichajnomu sortuvanni efektivnij metod zovnishnogo sortuvannya vimagaye chasu O n log n eksponencialne zbilshennya rozmiru danih zumovdyuye linijnogo zbilshennya kilkosti prohodiv Vikoristovuyuchi veliku kilkist pam yati nadanu suchasnimi komp yuterami logarifmichnij faktor roste duzhe povilno Do 500 Gb danih mozhna sortuvati za dopomogoyu 1 Gb osnovnoyi pam yati persh nizh tretye zlittya stane vigidnim i znachno bilshi ob yemi danih persh nizh v prigodi stane chetverte zlittya Pripustimo sho mayemo disk z 200 MB s chitannya zapisu chas poshuku 20 ms 1 Gb pam yati 500 Gb dlya sortuvannya Faza zlittya bude skladatisya z 500 chastin po 2 MB kozhna z nih vitrachaye po 250 ms na poshuk a potim chitannya ta zapis 500 GB Bude vitracheno 5000 sekund na poshuk ta 5000 sekund na perezapis Vikoristannya dvoh propuskiv yak opisano vishe majzhe usunulo b chas poshuku ale dodast she 5000 sekund chitannya ta zapisu tomu ce priblizno tochka bezzbitkovosti mizh dvo i tripropusknimi viriantami sortuvannya Taki zasobi yak tverdotirni nakopichuvachi SSD takozh zbilshuyut ob yem danih yaki mozhna sortuvati do togo yak dodatkovi zlittya stayut vigidnimi Ob yem osnovnoyi pam yati maye vazhlive znachennya Podvoyennya pam yati priznachenoyi dlya sortuvannya zmenshuye vdvichi kilkist chastin i kilkist chitan na shmatochok zmenshuyuchi kilkist shukanih neobhidnih priblizno na tri chverti Vidnoshennya obsyagu operativnoyi pam yati do nakopichennya diskiv na serverah chasto robit zruchnim vikonuvati sortuvannya velicheznih ob yemiv danih na klasteri mashin 3 a ne na odnij mashini z dekilkoma propuskami Inshi algoritmired Zovnishnye sortuvannya zlittyam ne ye yedinim zovnishnim algoritmom sortuvannya isnuyut takozh sortuvannya rozpodilom yaki pracyuyut shlyahom rozbittya nesortovanih znachen na menshi yaki mozhut buti vidsortovani v osnovnij pam yati Podibno sortuvannya zlittyam zovnishnij sortuvannya rozpodilom takozh maye rozdil osnovnoyi pam yati Primitkired Donald Knut The Art of Computer Programming Volume 3 Sorting and Searching Second Edition Addison Wesley 1998 ISBN 0 201 89685 0 Section 5 4 External Sorting pp 248 379 Ellis Horowitz and Sartaj Sahni Fundamentals of Data Structures H Freeman amp Co ISBN 0 7167 8042 9 Chris Nyberg Mehul Shah Sort Benchmark Home Page Arhivovano 13 sichnya 2012 u Wayback Machine links to examples of parallel sorts See alsored Mainframe sort mergePosilannyared STXXL an algorithm toolkit including external mergesort Arhivovano 24 listopada 2011 u Wayback Machine An external mergesort example Arhivovano 1 listopada 2015 u Wayback Machine A K Way Merge Implementation Arhivovano 8 zhovtnya 2015 u Wayback Machine External Memory Sorting in Java Arhivovano 24 grudnya 2014 u Wayback Machine A sample pennysort implementation using Judy Arrays Arhivovano 27 lyutogo 2017 u Wayback Machine Sort Benchmark Arhivovano 13 sichnya 2012 u Wayback Machine Na cyu stattyu ne posilayutsya inshi statti Vikipediyi Bud laska rozstavte posilannya vidpovidno do prijnyatih rekomendacij Otrimano z https uk wikipedia org wiki Zovnishnye sortuvannya