Плавне сортування (англ. Smoothsort) — алгоритм сортування, різновид пірамідального сортування, розроблений Е. Дейкстрою 1981 року. Як і пірамідальне сортування, в найгіршому випадку має швидкодію О(n log n). Перевагою плавного сортування є те, що його швидкодія наближається до O(n), якщо вхідні дані частково відсортовано, в той час як швидкодія пірамідального сортування є незмінною та не залежить від стану вхідних даних.
Плавне сортування оперує на майже відсортованому масиві. Лінії зверху показують структуру дерева. | |
Клас | Алгоритм сортування |
---|---|
Структура даних | Масив |
Найгірша швидкодія | O(n log n) |
Найкраща швидкодія | O(n) |
Середня швидкодія | O(n log n) |
Огляд алгоритму
Як і в пірамідальному сортуванні, до масиву накопичується купа з даних, які потім сортуються шляхом безперервного видалення максимуму з купи. На відміну від пірамідального сортування, тут використовується не двійкова купа, а спеціальна, отримана за допомогою чисел Леонардо. Купа складається з послідовності куп, розміри яких дорівнюють одному з чисел Леонардо, а корені зберігаються в порядку зростання. Переваги таких спеціальних куп перед двійковими полягають у тім, що якщо послідовність відсортовано, то її створення й руйнування займе O(n) часу, що буде швидше. Розбити вхідні дані на купи просто: крайні ліворуч вузли масиву складуть найбільшу можливу купу, а решту буде розділено подібним чином.
Можливо довести, що:
- Масив будь-якої довжини може бути також розбито на частини розміру L(x).
- Не повинно бути двох куп однакового розміру, оскільки в цьому випадку послідовність перетвориться на строго спадну за розмірами.
- Не повинно бути двох куп, розміри яких дорівнюють двом послідовним числам Леонардо, за винятком масиву з довжиною 2.
Операції
Збільшення послідовності куп шляхом додавання елемента
- Якщо дві останні купи мають розміри L (x + 1) і L (x) (двох послідовних чисел Леонардо), новий елемент стає коренем купи більшого розміру, рівного L (x + 2). Для неї властивість купи необов'язкова.
- Якщо розміри двох останніх куп не дорівнюють двом послідовним числам Леонардо, новий елемент утворює нову купу розміром 1. Цей розмір вважається рівним L (1), крім випадку, коли крайня права купа вже має розмір L (1), тоді розмір нової одноелементної купи вважають рівним L (0).
Після цього має бути відновлено виконання властивостей купи і послідовності куп, яке, як правило, досягається за допомогою різновиду сортування вставками:
- Крайня права купа (сформована останньою) вважається «поточної» купою.
- Поки зліва від неї є купа і значення її кореня більше значення поточного кореня і обох коренів куп-нащадків:
- Міняються місцями новий корінь і корінь купи зліва (що не порушить властивість для поточної купи). Ця купа стає поточною.
- Виконується «просіювання», щоб виконувати властивість купи:
- Поки розмір поточної купи більше 1 і значення кореня будь-якого з куп-нащадків більше значення кореня поточної купи:
- Міняються місцями найбільший за значенням корінь купи-нащадка і поточний корінь. Купа-нащадок стає поточної купою.
- Поки розмір поточної купи більше 1 і значення кореня будь-якого з куп-нащадків більше значення кореня поточної купи:
Операція просіювання значно спрощена завдяки використанню цифр Леонардо, так як кожна купа або буде одноелементною, або буде мати двох нащадків. Нема потреби турбуватися про відсутність однієї з куп-нащадків.
Оптимізація
- Якщо очікується, що нова купа стане частиною поточної, до моменту закінчення, не потрібно перевіряти виконання властивості купи: це знадобиться тільки в разі, якщо купа досягне кінцевого стану.
- Для цього потрібно поглянути на кількість ,що залишилася після формування купи розміру L (x) елементів. Якщо вона більша, ніж L (x - 1) + 1, тоді ця нова купа буде поглинена.
- Необов'язково дотримуватися виконання властивості купи для крайньої правої купи. Якщо ця купа стане однією з кінцевих куп послідовності куп, то виконання властивості послідовності куп забезпечить виконання властивості купи. Звичайно, всякий раз коли формується нова купа, крайня права купа не стає крайньою правою, і виконання властивості купи повинно бути відновлено.
Зменшення послідовності куп шляхом видалення елемента праворуч
Якщо розмір крайньої правої купи дорівнює 1 - тобто це купа L (1) або L (0), - то ця купа просто видаляється. В іншому випадку корінь цієї купи видаляється, купи-нащадки вважаються елементами послідовності куп, після чого перевіряється виконання властивості купи, спочатку для лівої купи, потім - для правої.
Оптимізація
- Значення кореня купи зліва і значення вузлів куп, які тільки що утворилися з куп-нащадків,не порівнюються, так як відомо, що властивість для них виконується. Тому порівняння відбувається тільки зі значенням кореня.
Використовувана пам'ять
Алгоритм плавного сортування вимагає пам'яті для зберігання розмірів всіх куп в послідовності. Так як всі ці значення різні, як правило, для цієї мети застосовується бітова карта. Крім того, так як в послідовності не більш ніж O (log n) чисел, біти можуть бути закодовані О (1) машинними словами .
Джерела
- Дональд Кнут. Sorting and Searching // The Art of Computer Programming. — 3rd. — Massachusetts : Addison–Wesley, 1998. — Т. 3. — 780 с. — .(англ.)
- Оригінальна стаття (англ.)
- Оригінальна стаття з коментарями (англ.)
- Дослідження алгоритму (К. Schwarz) (англ.)
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
В іншому мовному розділі є повніша стаття Smoothsort(англ.). Ви можете допомогти, розширивши поточну статтю за допомогою з англійської. (грудень 2016)
|
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Plavne sortuvannya angl Smoothsort algoritm sortuvannya riznovid piramidalnogo sortuvannya rozroblenij E Dejkstroyu 1981 roku Yak i piramidalne sortuvannya v najgirshomu vipadku maye shvidkodiyu O n log n Perevagoyu plavnogo sortuvannya ye te sho jogo shvidkodiya nablizhayetsya do O n yaksho vhidni dani chastkovo vidsortovano v toj chas yak shvidkodiya piramidalnogo sortuvannya ye nezminnoyu ta ne zalezhit vid stanu vhidnih danih Plavne sortuvannyaPlavne sortuvannya operuye na majzhe vidsortovanomu masivi Liniyi zverhu pokazuyut strukturu dereva KlasAlgoritm sortuvannyaStruktura danihMasivNajgirsha shvidkodiyaO n log n Najkrasha shvidkodiyaO n Serednya shvidkodiyaO n log n Oglyad algoritmuYak i v piramidalnomu sortuvanni do masivu nakopichuyetsya kupa z danih yaki potim sortuyutsya shlyahom bezperervnogo vidalennya maksimumu z kupi Na vidminu vid piramidalnogo sortuvannya tut vikoristovuyetsya ne dvijkova kupa a specialna otrimana za dopomogoyu chisel Leonardo Kupa skladayetsya z poslidovnosti kup rozmiri yakih dorivnyuyut odnomu z chisel Leonardo a koreni zberigayutsya v poryadku zrostannya Perevagi takih specialnih kup pered dvijkovimi polyagayut u tim sho yaksho poslidovnist vidsortovano to yiyi stvorennya j rujnuvannya zajme O n chasu sho bude shvidshe Rozbiti vhidni dani na kupi prosto krajni livoruch vuzli masivu skladut najbilshu mozhlivu kupu a reshtu bude rozdileno podibnim chinom Mozhlivo dovesti sho Masiv bud yakoyi dovzhini mozhe buti takozh rozbito na chastini rozmiru L x Ne povinno buti dvoh kup odnakovogo rozmiru oskilki v comu vipadku poslidovnist peretvoritsya na strogo spadnu za rozmirami Ne povinno buti dvoh kup rozmiri yakih dorivnyuyut dvom poslidovnim chislam Leonardo za vinyatkom masivu z dovzhinoyu 2 OperaciyiZbilshennya poslidovnosti kup shlyahom dodavannya elementa Yaksho dvi ostanni kupi mayut rozmiri L x 1 i L x dvoh poslidovnih chisel Leonardo novij element staye korenem kupi bilshogo rozmiru rivnogo L x 2 Dlya neyi vlastivist kupi neobov yazkova Yaksho rozmiri dvoh ostannih kup ne dorivnyuyut dvom poslidovnim chislam Leonardo novij element utvoryuye novu kupu rozmirom 1 Cej rozmir vvazhayetsya rivnim L 1 krim vipadku koli krajnya prava kupa vzhe maye rozmir L 1 todi rozmir novoyi odnoelementnoyi kupi vvazhayut rivnim L 0 Pislya cogo maye buti vidnovleno vikonannya vlastivostej kupi i poslidovnosti kup yake yak pravilo dosyagayetsya za dopomogoyu riznovidu sortuvannya vstavkami Krajnya prava kupa sformovana ostannoyu vvazhayetsya potochnoyi kupoyu Poki zliva vid neyi ye kupa i znachennya yiyi korenya bilshe znachennya potochnogo korenya i oboh koreniv kup nashadkiv Minyayutsya miscyami novij korin i korin kupi zliva sho ne porushit vlastivist dlya potochnoyi kupi Cya kupa staye potochnoyu Vikonuyetsya prosiyuvannya shob vikonuvati vlastivist kupi Poki rozmir potochnoyi kupi bilshe 1 i znachennya korenya bud yakogo z kup nashadkiv bilshe znachennya korenya potochnoyi kupi Minyayutsya miscyami najbilshij za znachennyam korin kupi nashadka i potochnij korin Kupa nashadok staye potochnoyi kupoyu Operaciya prosiyuvannya znachno sproshena zavdyaki vikoristannyu cifr Leonardo tak yak kozhna kupa abo bude odnoelementnoyu abo bude mati dvoh nashadkiv Nema potrebi turbuvatisya pro vidsutnist odniyeyi z kup nashadkiv Optimizaciya Yaksho ochikuyetsya sho nova kupa stane chastinoyu potochnoyi do momentu zakinchennya ne potribno pereviryati vikonannya vlastivosti kupi ce znadobitsya tilki v razi yaksho kupa dosyagne kincevogo stanu Dlya cogo potribno poglyanuti na kilkist sho zalishilasya pislya formuvannya kupi rozmiru L x elementiv Yaksho vona bilsha nizh L x 1 1 todi cya nova kupa bude poglinena Neobov yazkovo dotrimuvatisya vikonannya vlastivosti kupi dlya krajnoyi pravoyi kupi Yaksho cya kupa stane odniyeyu z kincevih kup poslidovnosti kup to vikonannya vlastivosti poslidovnosti kup zabezpechit vikonannya vlastivosti kupi Zvichajno vsyakij raz koli formuyetsya nova kupa krajnya prava kupa ne staye krajnoyu pravoyu i vikonannya vlastivosti kupi povinno buti vidnovleno Zmenshennya poslidovnosti kup shlyahom vidalennya elementa pravoruch Yaksho rozmir krajnoyi pravoyi kupi dorivnyuye 1 tobto ce kupa L 1 abo L 0 to cya kupa prosto vidalyayetsya V inshomu vipadku korin ciyeyi kupi vidalyayetsya kupi nashadki vvazhayutsya elementami poslidovnosti kup pislya chogo pereviryayetsya vikonannya vlastivosti kupi spochatku dlya livoyi kupi potim dlya pravoyi Optimizaciya Znachennya korenya kupi zliva i znachennya vuzliv kup yaki tilki sho utvorilisya z kup nashadkiv ne porivnyuyutsya tak yak vidomo sho vlastivist dlya nih vikonuyetsya Tomu porivnyannya vidbuvayetsya tilki zi znachennyam korenya Vikoristovuvana pam yatAlgoritm plavnogo sortuvannya vimagaye pam yati dlya zberigannya rozmiriv vsih kup v poslidovnosti Tak yak vsi ci znachennya rizni yak pravilo dlya ciyeyi meti zastosovuyetsya bitova karta Krim togo tak yak v poslidovnosti ne bilsh nizh O log n chisel biti mozhut buti zakodovani O 1 mashinnimi slovami DzherelaDonald Knut Sorting and Searching The Art of Computer Programming 3rd Massachusetts Addison Wesley 1998 T 3 780 s ISBN 0 201 89685 0 angl Originalna stattya angl Originalna stattya z komentaryami angl Doslidzhennya algoritmu K Schwarz angl Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi V inshomu movnomu rozdili ye povnisha stattya Smoothsort angl Vi mozhete dopomogti rozshirivshi potochnu stattyu za dopomogoyu perekladu z anglijskoyi gruden 2016 Divitis avtoperekladenu versiyu statti z movi anglijska Perekladach povinen rozumiti sho vidpovidalnist za kincevij vmist statti u Vikipediyi nese same avtor redaguvan Onlajn pereklad nadayetsya lishe yak korisnij instrument pereglyadu vmistu zrozumiloyu movoyu Ne vikoristovujte nevichitanij i nevidkorigovanij mashinnij pereklad u stattyah ukrayinskoyi Vikipediyi Mashinnij pereklad Google ye korisnoyu vidpravnoyu tochkoyu dlya perekladu ale perekladacham neobhidno vipravlyati pomilki ta pidtverdzhuvati tochnist perekladu a ne prosto skopiyuvati mashinnij pereklad do ukrayinskoyi Vikipediyi Ne perekladajte tekst yakij vidayetsya nedostovirnim abo neyakisnim Yaksho mozhlivo perevirte tekst za posilannyami podanimi v inshomovnij statti Dokladni rekomendaciyi div Vikipediya Pereklad