Շելլի տեսակավորում
Շելլի տեսակավորումը (անգլ.՝ Shell sort) — տեսակավորման ալգորիթմ, հանդիսանում է ներդրմամբ տեսակավորման կատարելագործված տեսակը:Շելլի մեթոդի գաղափարն այն է, որ իրար հետ կարող են համեմատվել ոչ միայն կողք կողքի գտնվող տարրեը, այլ նաև նրանք, որոնք գտնվում են իրարից որոշակի հեռավորության վրա:Այլ կերպ ասած դա հենց ներդրմամբ տեսակավորումն է`նախնական «կոպիտ» անցումներով: Պղպջակային տեսակավորման անալոգային մեթոդը կոչվում է սանրային տեսակավորում:
Բովանդակություն |
Նկարագրություն [խմբագրել]
Շելլի տեսակավորման ժամանակ իրար հետ համեմատվում և տեսակավորվում են այն արժեքները , որոնք գտնվում են իրարից որոշակի
հեռավորության վրա (տես.ներքևում):Դրանից հետո այդ գործընթացը կրկնվում է
-ի ավելի փոքր արժեքների համար, իսկ տեսակավորումն ավարտվում է, երբ
(այսինքն սովորական ներդրմամբ տեսակավորում):Շելլի տեսակավորման էֆֆեկտիվությունը որոշ դեպքերում կայանում է նրանում, որ տարրերը ավելի արագ են դասավորվում իրենց տեղերում (տեսակավորման հասարակ մեթոդների ժամանակ, օրինակ պղպջակային, երկու էլեմենտի յուրաքանչյուր տեղաշարժը փոքրացնում է ինվերսիաների քանակը ցանկում առավելագույնը 1-ով, իսկ Շելլի տեսակավորման ժամանակ այդ թիվը կարող է ավելի շատ լինել):
Չնայած նրան, որ Շելլի տեսակավորումը շատ դեպքերում ավելի դանդաղ է, քան արագ տեսակավորումը, այն ունի որոշակի առավելություններ.
- Պահանջարկի բացակայությունը հիշողության գրապահոցում,
- դեգրադացիայի բացակայությունը տվյալների անհաջող հավաքածուի դեպքում — արագ տեսակավորումը հեշտ դեգրադացվում է մինչև O(n²), որն ավելի վատ է, քան Շելլի տեսակավորման համար ապահովագրած ամենավատ ժամանակը :
Պատմությունը [խմբագրել]
Շելլի տեսակավորումը անվանլելի է նրա հեղինակի — Դոնալդ Շելլի պատվին, որը հրապարակել է այս ալգորիթմը 1959թ-ին:Որոշ երկրներում այս ալգորիթմը անվանում են Շելլ-Մեցների ալգորիթմ Մառլեն Մենցեր-Նորտոնի պատվին: Սակայն հետագայում Մենցերը հերքել է դա` ասելով. «Ես ոչ մի առնչություն չունեմ այդ տեսակավորման հետ , և իմ անունը երբեք չպետք է կապվի դրա հետ»:
Օրինակ [խմբագրել]
Ենթադրենք տրված է
ցուցակ, և կատարվում է այս ցուցակի տեսակավորումը Շելլի մեթոդով , իսկ որպես
նշանակաություն տրված են
:
Առաջին քայլում տեսակավորվում են
- գրվածքները:
-ի մեջ ընդգրկված բոլոր էլեմենտները , բաժանվում են 5 մասի: Այսինքն
,
,
,
,
.
Երկրորդ քայլում նույնպես կատարվում է ստացված ցուցակի տեսակավորումը, սակայն մնացած գրվածքները արդեն բաժանվում են 3 մասի:
Ցանկի տեսակավրումը ավարտվում է սովորական ներդրման տեսակավորմամբ:
Ժամանակահատվածների ընտրությունը [խմբագրել]
Ալգորիթմի աշխատանքի միջին ժամանակը կախված է
ժամանակահատվածների երկարություններից , որոնց վրա հետագայում պետք է գտնվեն
կարողությամբ զանգվածի տեսակավորվող տարրերը :Գոյություն ունեն այդ արժեքների ընտրության մի քանի մոտեցումներ.
- իսկզբանե Շելլի կողմից օգտագործվող ժամամանակահատվածների երկարության հաջորդականությունը այսպիսին էր`
վատագույն դեպքում, ալգորիթմի դժվարությունը կայանում է`
-ում; - Հիբբարդի կողմից առաջարկած հաջորդականությունը հետևյալն է`
բոլոր արժեքները: Քայլերի մնան հաջորդականությունը բերում է
բարդության ալգորիթմի; - Սեդժիկի կողմից առաջարկած հաջորդականությունը հետևյալն է`
, եթե i-ն հաշվելի է և
, եթե i-ն անվերջ է:Քայլերի նման հաջորդականության դեպքում ալգորիթմի միջին դժվարությունը կայանում է`
-ում, դասավորվածության վատագույն դեպքում`
: Սեդժիկի բանաձևի օգտագործման ժամանակ պետք է կանգ առնել inc[s-1] արժեքի վրա, եթե 3*inc[s] > size.[1]; - Պրատտի կողմից առաջարկած հաջորդականությունը հետևյալն է`
բոլոր արժեքները: Այս դեպքում ալգորիթմի դյժարություն կայանում է
- ում; - Մարցին Ցիուրի առաջարկած էմպիրիկ հաջորդականությունը`(A102549-ի հաջորդականությունը OEIS-ում):
; հանդիսանում է լավագույններից մեկը, մոտավորապես մինչև 4000 էլեմենտների տեսակավորման կարողությամբ:.[2]; - Ֆիբոնատտիի թվերի վրա հիմնված էմպիրիկ հաջորդականությունը `
;
Կաղապար:Нет АИ բոլոր արժեքները,
: Քայլերի նման հաջորդականությունը բերում է`
բարդության ալգորիթմի:
Նշումներ [խմբագրել]
- ↑ J. Incerpi, R. Sedgewick, «Improved Upper Bounds for Shellsort», J. Computer and System Sciences 31, 2, 1985.
- ↑ Marcin Ciura Best Increments for the Average Case of Shellsort
Հղումներ [խմբագրել]
- * Д. Кнут. Искусство программирования. Том 3. Сортировка и поиск, 2-е изд. Гл. 5.2.1. ISBN 5-8459-0082-4
- Анимированное представление алгоритма сортировки Шелла
- Представление алгоритма сортировки Шелла в виде танца (видео)
վատագույն դեպքում, ալգորիթմի դժվարությունը կայանում է`
-ում;
բոլոր արժեքները: Քայլերի մնան հաջորդականությունը բերում է
բարդության ալգորիթմի;
, եթե i-ն հաշվելի է և
, եթե i-ն անվերջ է:Քայլերի նման հաջորդականության դեպքում ալգորիթմի միջին դժվարությունը կայանում է`
-ում, դասավորվածության վատագույն դեպքում`
: Սեդժիկի բանաձևի օգտագործման ժամանակ պետք է կանգ առնել inc[s-1] արժեքի վրա, եթե 3*inc[s] > size.
բոլոր արժեքները: Այս դեպքում ալգորիթմի դյժարություն կայանում է
- ում;
; հանդիսանում է լավագույններից մեկը, մոտավորապես մինչև 4000 էլեմենտների տեսակավորման կարողությամբ:.
;
: Քայլերի նման հաջորդականությունը բերում է`