ПредишенСледващото

след това T (N) = N LN N. за всички N = 2 к. к> 1.

2. Търсене даден метод линеен търсене елемент (2 Представяне сортиране алгоритъм вложки) се сравняват с елементите от началото на масива. В сортирани масива може да се използва за сравнение на желаната опция с помощта средата на масива, и след това изберете частта, в която се намира и да се повтаря тази част на рекурсивни разделение и така нататък - двоичен

търсене Ню Йорк. Напишете програма, която изпълнява алгоритъм, и да докаже, че работи там са Θ (LN N).

3. докато процедура цикъл Insertion_Sort сканира всички елементи на сортиран ред част. Вместо това, можете да използвате двоичен метод

Търсене (Упражнение 2 сливане вид алгоритъм), за да се намери точката на вмъкване на време Θ (LN N). Напиши съответните процедури за изпълнение

Insertion_Sort и ще определи дали такъв начин да бъде в състояние да направи общо време равно на Θ (N LN N).

слеят алгоритъм за сортиране

4. Нека вложки сортиране и сливащите се извършват на същата машина и изискват 8 N 2 и N LN N 64 операции, съответно. За какви стойности на N вмъкване вид е по-ефективно? Как мога да подобря слеят сортиране алгоритъм?

5. При най-малката стойност N което алгоритъм 100 изисква N 2 операции, по-ефективен алгоритъм изисква N 2 операции.

1. сливане на сортиране асимпотично бързо сортиране вложки, но обратната връзка на N на малки стойности. Поради това, че има смисъл сравнително къси парчета не се делят по-далеч и сортират вложки.

1.1. Нека масив с размер N разделен на части, к к N размер. Покажете, че

всички части могат да бъдат сортирани отделно (с помощта вложки сортиране) през Θ (кН).

1.2. Покажете, че може да се източи след сортиране всички парчета в един сортиран масив във времето Θ (N LN (N к)).

1.3. Средното време на този смесен алгоритъм е Θ (NK + N LN (N к)). Каква е максималната скорост на растеж на к, като функция на

Н., в която този път все още е равна на Θ (N LN N)?

1.4. Как да се определи оптималната стойност на к в практиката.

2. Да бъде даден масив [1. N]. Инверсия в масива е двойка от цели числа и на [й].

2.1. Е максималният брой на инверсиите в масив с дължина N.

2.2. Как да се свържете с времето на сортиране вложки работи, а броят на инверсиите? Обяснете отговора си.

2.3. Построява алгоритъм, който отброява броя на инверсии в масив с дължина N по време Θ (N LN N).

Алгоритмизация и програмиране на приложения (г negodin

Фигура 3 - пример на двоичен купчина

Алгоритъмът за сортиране, използвайки купчина (Heap)

Алгоритъмът за сортиране, използвайки купчина (Heap)

Сортиране използване купчина изисква за експлоатацията му време T (N) = Θ (N LN N). но за разлика от сливането алгоритъм не изисква такава голяма

допълнителна памет за съхранение на променливи. Това означава, че алгоритъмът съчетава предимствата на сортиране алгоритми, вмъкване (използва малко количество допълнителна памет), и метод синтез (кратко време работи).

Структурата на данните, която използва алгоритъм наречен двоичен купчина, е удобно при използване на приоритетните опашки.

Binary купчина се нарича масив с определени свойства на поръчка. За да се формулират свойствата, които считаме масив като двоично дърво. Всеки възел на дървото съответства на елемент - Фигура 3.

Ако възелът е на индекс. че неговата майка има индекс междинно съединение (I / 2). и неговата зало-

Tomka 2 и 2 и I + 1. връх с индекс I = 1 е корен. Съхранявани в масив памет. дължина N и специален параметър Купчина _ Размер - размера на купчина, и

Купчина _ Размер ≤ Н. А купчина се състои от елементи на [1] ... на [Купчина _ Size]. За да се придвижвате през купчината използва от три функции:

Елементите, съхранявани в купчината, купчината трябва да притежават основни имота: за всички елементи, с изключение на корена, трябва да отговаря на условието родител (I) ≥ на [I],

т.е. стойността на наследник трябва да бъде не повече от предшественик, което означава, че в основата на дървото е максималният елемент.

Височина на върха на дървото се нарича височина на поддървото корени на този връх (броят на ръбове в най-дългия път започва в началото на тази дървото). височина Tree съвпада с височината на своя корен.

В дървото представлява купчина, всички нива, с изключение на може би най-сетне се запълват изцяло, така че височината на дървото е Θ (LN N). където N - брой

елементи в купчината.

Помислете за основните процедури за работа с един куп:

1. Heapify - поддържа основния купчина имущество, изпълнението на едни и същи

Алгоритъмът за сортиране, използвайки купчина (Heap)

2. Build_Heap - изгражда куп оригиналната сортиран масив, изпълнението е равна на Θ (N).

3. Heap_Sort - сортиране без използване на допълнителна памет, Θ на времето за изпълнение (N LN N).

4. Extract_Max (премахване на най-голямата) и Insert (вложка), използвани за създаване на приоритетна опашка, въз основа на куп. Работно време на двете процедури е Θ (LN N).

Опазване свойства основната наколни

параметри процедура Heapify (а, I) е масив и индекс на аз. Предполага се, че поддървото корени Left (и) и десния (и) вече имат основни свойства. Процедура пренарежда поддърво с връх аз. след което тя ще има основни свойства. Идеята е проста: ако основната имота не е възможно за върха, а след това трябва да се промени, с много деца си, и така нататък, докато опцията не е "мивка" на правилното място.

Помислете процедура Heapify (А, и)

3, ако (L≤Heap_Size) и (а [L]> на [Ь])

4 след това най-големият: = L

5 друго най-големите: = R

6, ако (R≤Heap_Size) и (а [R]> на [-голямата])

7 след това най-големият: = R

9 след размени (а [Ь], а [-голямата])

Променливата индекса големите поставя повечето от елементите на [I],

ляв (и) и десния (и). Ако в края най-големите = аз цикъл. А [Ь] елемент има

"Потъна" на правилното място и работата е завършена процедурата. В противен случай, процедурата сменя за [в] и [Най-голям]. но това може да е налице нарушение на

Основните имоти в поддървото с горната част на най-големия и периодично поискала процедура Heapify за премахване на евентуално нарушение.

Водещият време в най-лошия случай за тази процедура, T (N) = Θ (LN N).

Да предположим, че са дадени масив на [1. N]. който трябва да се превърне в купчина. За да направите това, можете да приложите процедура Heapify. прилагането й от своя страна на всички височини, като се започне от дъното. Върховете номерирани [N 2] + 1 ... N са листата, тогава

поддървета с тези отпуски вече отговарят на основната собственост на купчината. За всеки от останалите върхове в низходящ ред на индексите трябва да се прилага про

2 Защото: = междинно съединение (N / 2) Downto 1 направи

Максималното време на процедурата е T (N) = Θ (N).

Сортиране използване купчина

сортиране алгоритъм се състои от две части, като първата е причинена Build_Heap процедура. превръщане на масива в купчина.

Втората част директно регулира купчината. Максимална купчина елемент е в основата на дървото - елемента на [1]. Този елемент се разменят с

елемент [N]. Размер на стек намалява с 1 и възстановява основната собственост на купчината с основния връх (както е в поддървото корени ляв (1) и десния (1) основната собственост на купчината не се нарушава) чрез процедура Heapify.

След това основата ще бъде максимално на останалата елемент. След това, прегрупирането на [1] и [N - 1]. Отново се извършва процедурата

Пренареждане елементи продължава докато, докато цялата масива се сортира.

2 Защото: = N Downto 2 направи

процедурите от време е T (N) = Θ (N LN N).

На практика, алгоритми за сортиране не използват купчина най-бързо, но структурата самата куп честота данни е полезно.

Приоритетни опашки

Приоритет опашка (приоритетна опашка) - набор от елементи, които ще бъдат разглеждани номера. На практика, елементите на S са двойки . къде най-важното - число, което определя приоритетно позиция и призова клавишите със Лиценз

Chom, α - свързана информация; тази информация се съхранява в непосредствена близост до и се движи с него, без да се засяга нейната работа. За простота, ние ще пропусне описанието на операцията с допълнителните данни.

Следните операции по приоритетите на опашката:

1. Поставете (S, х) добавя елемент х до зададената S;

2. Максимална (S) се връща към най-голямата елемент в пакета;

3. Extract_Max (S) премахва най-големият елемент на комплекта;

4. Extract_Min (S) премахва най-малкия елемент от множеството.

Приоритет опашка може да бъде, например, да се използва в операционната система с разделяне във времето. В същото време тя притежава списък на задачи с приоритет

Алгоритъмът за сортиране, използвайки купчина (Heap)

tetami. След изпълнението на следващата задача е завършена, опашката за работа е избран с най-висок приоритет (Extract_Max работа). Нови работни места се добавят към опашката с помощта на операцията Insert.

Друго приложение на една и съща структура - събитие задвижване симулация (възникнали от събития симулация). В опашката са събития, както и приоритет определя от времето, когато трябва да се проведе събитието. Събития трябва да се моделират в реда, в който те се случват. Избирането на следващото събитие се осъществява от експлоатация Extract_Min. събития добавяне - с помощта на операция

Ние се съхраняват елементите на купчина. Максималната е корен елемент, така че операцията отнема време Максимална Θ (1).

За да премахнете максималната елемент от опашката, трябва да се действа, както и за сортиране:

Подкрепете проекта - споделете линка, благодаря!