«Արագ տեսակավորում»–ի խմբագրումների տարբերություն
Content deleted Content added
No edit summary |
չ clean up, replaced: → (21), է: → է։ (2), բ: → բ։ (2), ը: → ը։ (4), ի: → ի։ (4), լ: → լ։, կ: → կ։, մ: → մ։ (4), ն: → ն։ (3), ջ: → ջ։, վ: → վ։, տ: → oգտվելով [[Վիքիպեդիա:ԱվտոՎ... |
||
Տող 2.
== Ալգորիթմի հակիրճ նկարագրություն ==
* ընտրել
* համեմատել մնացած էլեմենտները հենակետայինի հետ, համեմատման հիման վրա բաժանել քանակությունը 3 մասի
* կրկնել այն փոքրերի և մեծերի համար
==Ալգորիթմ ==
Արագ տեսակավորումը օգտագործում է «[[Բաժանիր և տիրիր]]» ստրատեգիան։
# Ընտրում ենք զանգվածից մի քանի էլեմենտ, որոնք պետք է անվանենք հենակետային էլեմենտ։ Ալգորիթմի կոռեկտության տեսանկյունից հենակետային էլեմենտի ընտրությունը անկարևոր է։
# Զանգվածից բաժանման օպերացիան՝
## 2 ինդեքսներ — l և r, հավասարվում են բաժանվող զանգվածի մաքսիմալ և մինիմալ ինդեքսին։
## Առանձնացվում է ինդեքսի m հենակետային էլեմենտը։
## Ինդեքս l-ին մեծանում է մինչև
## Ինդեքս r-ը փոքրանում է մինչև
## Եթե r = l — գտնվում է զանգվածի մեջտեղում — բաժանման օպերացիան ավարտված է, 2 ինդեքսներն էլ ցույց են տալիս հենակետային
## Եթե l < r — գտնված զույգ էլեմենտները հարկավոր է փոխել տեղերով և շարունակել բաժանման օպերացիան միչև l և r հասանելի լինեն։ Հարկավոր է հաշվել, որ եթե ինչ-որ սահման (l կամ r)հասել է մինչև հենակետային էլեմենտի, ապա
# [[Ռեկուրսիվ]] կարգավորում ենք զանգվածները հենակետային էլեմենտների աջ և ձախ
# Ռեկուրսիայի բազան համարվում է հավաքածու, որը բաղկացած է մեկ կամ երկու
Հետաքրքիր է, որ Խոարը մշակել է այս մեթոդը [[մեքենայական թարգմանության]]
==Էֆեկտիվության գնահատական==
QuickSort հանդիսանում է գոյություն ունեցող տեսակավորման ալգորիթմի կատարելագործված տարբերակ ուղիղ փոխանակության օգնությամբ (նրա տարբերակները հայտնի են ինչպես«[[Պղպջակային տեսակավորում]]», այդ թվում հայտնի է նաև իր ցածր
* '''Լավագույն դեպք''' Այդ ալգորիթմի համար լավագույն դեպքը, եթե յուրաքանչյուր կրկնապատկման ժամանակ յուրաքանչյուր զանգված բաժանվում է
* '''Միջին'''
* '''Վատթարագույն դեպք''' Վատթարագույն դեպքը կլինի այսպիսին, որի դեպքում յուրաքանչյուր էտապում զանգվածը հենակետային էլեմենտից կբաժանվի մի նոր
Վատ դեպք տալիս է O(''n''²) փոխանակումը։
== Բարելավում ==
* Տվյալ դիապազոնից հենակետային էլեմենտի ընտրության ժամանակ պատահական կերպով վատ դեպքը շատ քիչ հավանական է դառնում և ալգորիթմի տեսակավորման կատարման սպասված ժամանակը կլինի - O(''n'' lg ''n'').
* Ընտրել միջինը հենակետային 3 էլեմենտ (առաջին, միջին և վերջին)
* Բաժանել զանգվածը ոչ թե 2, այլ 3
== Առավելություններ և թերություններ ==
Տող 37.
===Առավելություններ===
* Ամենաարագագործ ալգորիթմներից մեկը ներքին տեսակավորման ընդհանուր (պրակտիկայում) նշանակության
* Պարզ է իրականացման
* Ընդամենը պահանջում է <math>O(\lg n)</math> լրացուցիչ հիշողություն իր աշխատանքի
* Հեշտ է համադրվում մեխանիզմների հետ [[քեշ հիշողություն]] և [[վերտուալ հիշողություն]].
* Գոյություն ունի տողերի տեսակավորման էֆեկտիվ վերափոխություն ([[Սեդժվիկի ալգորիթմ]]) — սկզբում համեմատել հենակետային էլեմենտը զրոյական սիմվոլի տողի հետ, այնուհետև կիրառել անալոգային տեսակավորման համար «մեծ» և «փոքր» զանգվածներ, որոնք նույնպես համեմատել զրոյականի հետ, իսկ «հավասար» զանգվածը արդեն առաջին սիմվոլի
===Թերություններ===
* Ուժեղ վատթարանում է արագությունը (մինչև <math>\Theta(n^2)</math>) հենակետային էլեմենտների անհաջող ընտրության ժամանակ, որը կարող է տեղի ունենալ անհաջող ելքային տվյալների մուտքագրման ժամանակ։ Դրանից կարելի է խուսափել՝ օգտագործելով այնպիսի վերափոխություն, ինչպիսին [[Introsort]] կամ հավանական է ընտրել պատահական հենակետային էլեմենտ, բայց ոչ ֆիքսված
* Ալգորիթմի իրականացումը կարող է բերել ստեկի գերհագեցման սխալի, այնպես ինչպես նրան կարող է անհրաժեշտ լինի կատարել <math>O(n)</math> ռեկուրսիվ ներդրման
* [[Կայուն]] — եթե պահանջվում է կայունություն` պետք է ընդլայնել
== Ծանոթագրություններ ==
|