КАТЕГОРИИ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) П Архитектура- (3434) Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Война- (14632) Високи технологии- (1363) География- (913) Геология- (1438) 1065) House- (47672) Журналистика и масови медии- (912) Изобретения- (14524) Чужди езици- (4268) Компютри- (17799) Изкуство- (1338) История- (13644) Компютри- (11121 ) Художествена литература (373) Култура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968 ) Медицина- (15423) Naukovedenie- (506) Образование- (11852) Защита на труда- ( 3308) Педагогика- (5571) P Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) Олимпиада- (1312) Политика- (7869) Право- (5454) Инструменти- ( 1369) Програмиране- (2801) Производство- (97182) Промишленост- (8706) Психология- (18388) Земеделие- (299) Социология- (6455) Спорт- (42831) Строителство- (4793) Търговия- (5050) Транспорт- (2929) Туризъм- (1568) Физика- (3942) ) Химия- (22929 ) Екология- (12095) Икономика- (9961) Електроника- (8441) Електротехника- (4623) Енергетика- (12629 )

Сортиране по дърво (Heapsort)




Вижте също:
  1. С микроскоп
  2. N С помощта на Корушския мост е възможно да се определи не само специфичната и моларна проводимост, степента на дисоциация, но и дисоциационната константа.
  3. Прегледайте програмата с команда D и въведете промените с команда E
  4. А.11 Въпроси, на които може да се отговори с помощта на ST
  5. Измервания на амплитуда и време с електронен осцилоскоп.
  6. Анализ на изпълнението на плана, използващ гъвкав бюджет
  7. Анализ на колебанията в икономическата активност, използвайки модела IS-LM.
  8. Анализ на прости категорични силогизми, използващи кръгови модели
  9. Анализ на прости категорични силогизми, използващи кръгови модели
  10. Анализ на психологическите данни чрез програмата SPSS
  11. Анестезията е премахването на болката и други видове чувствителност с помощта на външно влияние върху всички връзки на болковия рефлекс.
  12. Атака на времето

Нека да започнем с един прост метод за сортиране, използвайки дърво, с което изрично се създава дърво за сравняване на двоични ключове. Изграждането на дърво започва с листа, които съдържат всички елементи на масива. От всяка съседна двойка се избира най-малкият елемент и тези елементи формират следващия (по-близо до кореновото ниво на дървото). От всяка съседна двойка се избира най-малкия елемент и т.н., докато се създаде корен, който съдържа най-малкия елемент от масива. Двоичното сравнение дърво за масив, използвани в нашите примери, е показано на фигура 2.1. Така че вече имаме най-малката стойност на масивните елементи. За да получим следващия по големина елемент, слизаме от корена по пътеката, водеща до листа с най-малка стойност. В този лист е поставен фиктивен ключ с "безкрайно голяма" стойност, а най-малката стойност на възлите - директни потомци - се въвежда във всички междинни възли, които се занимават с най-малкия елемент (фигура 2.2). Процесът продължава, докато всички възли на дървото не се напълнят с манипулатори (фигури 2.3 - 2.8).


Фиг. 2.1.


Фиг. 2.2. Втора стъпка


Фиг. 2.3. Трета стъпка


Фиг. 2.4. четвърта стъпка


Фиг. 2.5. Пета стъпка


Фиг. 2.6. Шеста стъпка


Фиг. 2.7. Седма стъпка


Фиг. 2.8. Осмата стъпка

При всяка от стъпките n, необходими за сортиране на масива, трябва да се регистрирате n (двоично) сравнение. Следователно, всичко ще се нуждае от n log n сравнения, но за да представи дървото ще ви трябват 2n - 1 допълнителни памет.

Има по-усъвършенстван алгоритъм, който се нарича пирамидално сортиране (Heapsort). Неговата идея е, че вместо пълно дърво за сравняване, оригиналната матрица a, a, ..., a [n] се превръща в пирамида, имаща свойството, че за всяка една от условията [ i] <= a [2i] и [i] <= a [2i + 1]. Тогава пирамидата се използва за сортиране.

Най-илюстративният метод за конструиране на пирамида е с дървовиден изглед на масива, показан на Фигура 2.9. Масивът е представен като двоично дърво, чийто корен съответства на елемента на масива a [1]. На второто ниво са елементите a [2] и a [3]. На трето - [4], [5], [6], [7] и т.н. Както можете да видите, за масив с нечетен брой елементи, съответното дърво ще бъде балансирано, а за масив с равен брой елементи n елементът [n] ще бъде единственият (най-ляв) лист на "почти" балансираното дърво.


Фиг. 2.9.

Очевидно е, че при изграждането на пирамида ще се интересуваме от елементите a [n / 2], a [n / 2-1], ... a a за масиви с равен брой елементи и елементи a [(n-1) 2], [[n-1) / 2-1], ..., a [1] за масиви с нечетен брой елементи (тъй като само такива елементи са ограниченията на пирамидата). Нека аз да бъда най-големият индекс между индексите на елементите, за които ограниченията на пирамидата са значителни. Тогава елементът a [i] се взима в конструираното дърво и се извършва скринингова процедура за него, състояща се в това, че се избира клон на дърво, съответстващ на min (a [2 * i], a [2 * i + 1]) и стойността е [ i] суапове със стойността на съответния елемент. Ако този елемент не е лист на дървото, подобна процедура се извършва за него и т.н. Такива действия се извършват последователно за [i], a [i-1], ..., a [1]. Лесно е да видим, че в резултат на това получаваме дървоподобно представяне на пирамидата за оригиналния масив (последователността от стъпки за масива, използвана в нашите примери, е показана на фигури 2.10-2.13).




Фиг. 2.10.


Фиг. 2.11.


Фиг. 2.12.


Фиг. 2.13.

През 1964 г. Флойд предложи метод за изграждане на пирамида без изрично да се конструира дърво (въпреки че методът се основава на едни и същи идеи). Изграждането на пирамидата по метода Floyd за нашия стандартен масив е показано в таблица 2.7.

Таблица 2.7 Пример за изграждане на пирамида

Началното състояние на масива 8 23 5 | 65 | 44 33 1 6
Стъпка 1 8 23 | 5 | 6 44 33 1 65
Стъпка 2 8 | 23 | 1 6 44 33 5 65
Стъпка 3 8 | 6 1 23 44 33 5 65
Стъпка 4 1 6 8 23 44 33 5 651 6 5 23 44 33 8 65

Таблица 2.8 показва как да се подреди, като се използва конструираната пирамида. Същността на алгоритъма е следната. Нека да бъда най-големият матричен индекс, за който условията на пирамидата са значителни. След това, започвайки от [1] до [i], се извършват следните действия. На всеки етап се избира последният елемент на пирамидата (в нашия случай първо ще бъде избран елемент a [8]). Стойността му се променя със стойността a [1], след което се показва [1]. Освен това на всеки етап броят на елементите в пирамидата намалява с 1 (след първата стъпка, [1], a [2], ..., a [n-1] се считат за пирамидни елементи; a [2], ..., a [n-2] и т.н., докато единият елемент не остане в пирамидата). Лесно е да се види (това е илюстрирано в таблица 2.8), че в резултат получаваме масив, нареден в низходящ ред. Можете да промените метода за конструиране и сортиране на пирамидата, за да получите поръчката във възходящ ред, ако промените състоянието на пирамидата на [i]> = a [2 * i] и [1]> = a [2 * i + 1] индексни стойности i.

Таблица 2.8 Сортирайте с помощта на пирамидата

Източна пирамида 1 6 5 23 44 33 8 65
Стъпка 1 65 6 5 23 44 33 8 15 6 65 23 44 33 8 15 6 8 23 44 33 65 1
Стъпка 2 65 6 8 23 44 33 5 16 65 8 23 44 33 5 16 23 8 65 44 33 5 1
Стъпка 3 33 23 8 65 44 6 5 18 23 33 65 44 6 5 1
Стъпка 4 44 23 33 65 8 6 5 123 44 33 65 8 6 5 1
Стъпка 5 65 44 33 23 8 6 5 133 44 65 23 8 6 5 1
Стъпка 6 65 44 33 23 8 6 5 144 65 33 23 8 6 5 1
Стъпка 7 65 44 33 23 8 6 5 1

Процедурата за сортиране на пирамидите изисква изпълнение на реда на n * log n стъпки (логаритъмът е двоичен) в най-лошия случай, което го прави особено привлекателен за сортиране на големи масиви.

{Floyd просяване процедура in situ}

ПРОЦЕДУРА sito (l, r: байт);

VAR

i, j: BYTE;

х: INTEGER;

ЗАПОЧНЕТЕ

i: = 1; j: = 2 * i; х: = а [i];

IF (j <r) И (a [j + 1] <a [j]) THEN j: = j + 1;

Докато (j <= r) AND (a [j] <x) започваме

a [i]: = a [j]; i: = j; j: = 2 * j;

IF (j <r) И (a [j + 1] <a [j]) THEN j: = j + 1;

END;

а [i]: = х

END;

....

ЗАПОЧНЕТЕ

....

{изграждане на пирамида}

l: = (nDIV2) +1;

Докато започва> 1 започва

l: = 1-1; sito (1, п);

END;

....

{full sort}

r: = п;

Докато r> 1 започва

х: = а [1]; а [1]: = a [r]; а [г]: = х;

r: = r-1; sito (1, r);

END;

Хепсорт анализ. На пръв поглед не е очевидно, че този метод за сортиране дава добри резултати. В крайна сметка, в крайна сметка, големи елементи, преди да попаднат на мястото от дясната страна, първо се преместете наляво. Всъщност, процедурата не се препоръчва за малък, като нашия пример, броят на елементите. За големи n Heapsort е много ефективен; колкото повече n, толкова по-добре работи. Той дори се сравни с сортирането на Shell.

В най-лошия случай се нуждаете от n / 2 стъпки за преместване, те преместват елементи по log (n / 2), log (n / 2 - 1), ..., log (n - ) "Нарязан" на следващото по-малко цяло число). Следователно, фазата на сортиране изисква n - 1 смени с най - големите логаритми (n - l), log (n -), ..., 1 измествания. Освен това, вие също имате нужда от n - 1 премествания, за да изтекате изместения елемент на известно разстояние отдясно. Тези съображения показват, че дори и в най-лошия възможен случай, Heapsort ще изисква n * log n стъпки. Отличното представяне в такива лоши случаи е една от привлекателните характеристики на Heapsort.

В никакъв случай не е ясно кога да очаквате най-лошото (или най-доброто) представяне. Но като цяло изглежда, че Хейспорт "обича" първоначалните последователности, при които елементите са сортирани по-скоро в обратен ред. Следователно поведението й е донякъде неестествено. Ако се занимаваме с обратен ред, тогава фазата на поколението на пирамидите не изисква никакви движения. Средният брой измествания е приблизително n / 2 * log (n), като отклоненията от тази стойност са относително малки.