HEAPSORT I. CONSIDERAŢII TEORETICE

Similar documents
ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

APLICAŢII ELEMENTARE CU ARBORI

Subiecte Clasa a VI-a

Metrici LPR interfatare cu Barix Barionet 50 -

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

Procesarea Imaginilor

Grafuri bipartite. Lecție de probă, informatică clasa a XI-a. Mihai Bărbulescu Facultatea de Automatică și Calculatoare, UPB

Structuri de date: ARBORI

Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

Metoda de programare BACKTRACKING

Versionare - GIT ALIN ZAMFIROIU

Mircea Merca 1) Articol dedicat Prof. Dr. Ioan Tomescu la a 70-a aniversare

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Olimpiad«Estonia, 2003

Metoda BACKTRACKING. prof. Jiduc Gabriel

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

Update firmware aparat foto

Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Metode de acces la informatie în bazele de date pentru prelucrari grafice

Auditul financiar la IMM-uri: de la limitare la oportunitate

Vizualizarea documentelor xml

Lucrarea de laborator nr. 4

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

Modalitǎţi de clasificare a datelor cantitative

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

GHID DE TERMENI MEDIA

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

Mecanismul de decontare a cererilor de plata

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

X-Fit S Manual de utilizare

Updating the Nomographical Diagrams for Dimensioning the Concrete Slabs

Algoritmi pentru regăsirea informaţiei

Baze de date distribuite și mobile

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

Propuneri pentru teme de licență

The First TST for the JBMO Satu Mare, April 6, 2018

Arbori sistolici binari

CHAMPIONS LEAGUE 2017 SPONSOR:

Laborator 2. Definirea tablourilor şi a funcţiilor (în linia de comandă) în Matlab 7.0

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

Class D Power Amplifiers

LINEAR VOLTAGE-TO-CURRENT CONVERTER WITH SMALL AREA

Printesa fluture. Мобильный портал WAP версия: wap.altmaster.ru

ISBN-13:

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

Capete terminale şi adaptoare pentru cabluri de medie tensiune. Fabricaţie Südkabel Germania

ACTA TECHNICA NAPOCENSIS

Managementul referinţelor cu

INTEROGĂRI ÎN SQL SERVER

Cap.5 Normalizarea relaţiilor

Tema 1 - Transferuri de date DMA intr-o arhitectura de tip Cell

ANTICOLLISION ALGORITHM FOR V2V AUTONOMUOS AGRICULTURAL MACHINES ALGORITM ANTICOLIZIUNE PENTRU MASINI AGRICOLE AUTONOME TIP V2V (VEHICLE-TO-VEHICLE)

O abordare Data Mining pentru detectarea accesului neautorizat la baza de date.

CERERI SELECT PE O TABELA

PROCEDURA PRIVIND DECONTURILE. 2. Domeniu de aplicare Procedura se aplică în cadrul Universităţii Tehnice Cluj-Napoca

KAJOT V.RO BLACK PLANET JOC DE NOROC CU RISC LIMITAT

1. Creaţi un nou proiect de tip Windows Forms Application, cu numele MdiExample.

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

În continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci.

Documentaţie Tehnică

EN teava vopsita cu capete canelate tip VICTAULIC

Laborator 2 - Statistică descriptivă

INSTRUMENTE DE MARKETING ÎN PRACTICĂ:

PACHETE DE PROMOVARE

Subiectele pentru proba practică din cadrul examenului de Paradigme de Programare Sesiunea iunie 2015

Lucrarea Nr.1. Sisteme de operare. Generalitati

Evoluția pieței de capital din România. 09 iunie 2018

Reţele Neuronale Artificiale în MATLAB

ACTA TECHNICA NAPOCENSIS

Manual Limba Romana Clasa 5 Editura Humanitas File Type

Lecţii complementare de teoria grafurilor

Ierarhia memoriilor Tipuri de memorii Memorii semiconductoare Memoria cu unități multiple. Memoria cache Memoria virtuală

The driving force for your business.

Excel Advanced. Curriculum. Școala Informală de IT. Educație Informală S.A.

INPUT MODELLING USING STATISTICAL DISTRIBUTIONS AND ARENA SOFTWARE

Programare în limbaj de asamblare 16. Formatul instrucţiunilor (codificare, moduri de adresare).

MODELUL UNUI COMUTATOR STATIC DE SURSE DE ENERGIE ELECTRICĂ FĂRĂ ÎNTRERUPEREA ALIMENTĂRII SARCINII

6. Excepţii şi aserţiuni. 6. Excepţii şi aserţiuni

SAG MITTIGATION TECHNICS USING DSTATCOMS

Metoda Branch_and_Bound (ramifică şimărgineşte) seaseamănă cu metoda Back_Tracking, însă diferă în primul rând prin ordinea de parcurgere a spaţiului

Strategii pentru jocul de dame Dame Inteligente

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

A NOVEL ACTIVE INDUCTOR WITH VOLTAGE CONTROLLED QUALITY FACTOR AND SELF-RESONANT FREQUENCY

6.1. Tranzacţii O tranzacţie (transaction), este o unitate logică de

Decizia manageriala în conditii de risc. Profilul riscului.

Universitatea Lucian Blaga din Sibiu Facultatea de inginerie Hermann Oberth Catedra de Calculatoare şi automatizări

Itemi Sisteme de Operare

2. Tipul referinţă, structuri de date dinamice ( liste înlănţuite şi arbori binari).

6. Bucle. 6.1 Instrucţiunea while

Prima. Evadare. Ac9vity Report. The biggest MTB marathon from Eastern Europe. 7th edi9on

5.3 OSCILATOARE SINUSOIDALE

R O M Â N I A CURTEA CONSTITUŢIONALĂ

Capitolul 7. Data mining. F. Radulescu. Curs: Utilizarea bazelor de date, anul IV C5.

Transmiterea datelor prin reteaua electrica

Transcription:

I. CONSIDERAŢII TEORETICE HEAPSORT Algoritm de sortare care combină calităţile sortării prin inserţie cu cele ale sortării prin interclasare. A fost inventat de Williams 1964. Prin heapsort se ordonează elementele în spaţiul alocat vectorului. La un moment dat doar un număr constant de elemente ale vectorului sunt păstrate în afara spaţiului alocat vectorului de intrare (sortare pe loc). Timpul de execuţie al agoritmului heapsort este O(nlgn). Introduce structura de date heap utilă şi în tratarea eficientă a unei cozi de prioritate. Se foloseşte şi în legătură cu alocarea dinamică, respectiv în tratarea memoriei bazate pe "colectarea reziduurilor" (garbage collected storage). Deşi este un algoritm excelent, o implementare bună a algoritmului de sortare rapidă se poate dovedi de multe ori mai eficientă. HEAP-URI (ansamblu, grămadă binară) Definiţie: Un vector care poate fi vizualizat sub forma unui arbore binar aproape complet. Fiecare nod al arborelui corespunde unui element al vectorului care conţine valorile ataşate nodurilor. Arborele este plin, exceptând eventual nivelul inferior, care este plin de la stânga la dreapta doar până la un anumit loc. Caracteristici: Heap-ul prezintă două atribute: Lungime[A] - numărul elementelor din vector. dimensiune-heap[a] - numărul elementelor heap-ului memorat în vectorul A. Rădăcina arborelui este A[1]. Fiecare nod de indice i este caracterizat de: PĂRINTE(i) al fiului STÂNGA(i) şi al fiului DREAPTA(i) - returnează [i/2]. STÂNGA(i) returnează 2i. DREAPTA(i) returnează 2i + 1. Pentru orice nod i, diferit de rădăcină, este adevărată următoarea proprietate de heap: A[PĂRINTE(i)] > A[i] (cel mai mare element din heap este păstrat în rădăcină, iar valorile nodurilor oricărui subarbore al unui nod sunt mai mici sau egale cu valoarea nodului respectiv). înălţimea unui nod al arborelui - numărul muchiilor aparţinând celui mai lung drum care leagă nodul respectiv cu o frunză; înălţimea arborelui - înălţimea rădăcinii (=lgn pentru un heap având n elemente). Proceduri utilizate în algoritmul de sortare, respectiv într-o structură de tip coadă de prioritate: RECONSTITUIE-HEAP are timpul de execuţie O(lg n) şi este de primă importanţă în întreţinerea proprietăţii de heap.

CONSTRUTEŞTE-HEAP are un timp de execuţie liniar şi generează un heap dintrun vector neordonat furnizat la intrare. HEAPSORT se execută în timpul O(nlgn) şi ordonează un vector în spaţiul alocat acestuia. EXTRAGE-MAX şi INSEREAZĂ se execută în timpul O(lg n); utile în generarea unei cozi de prioritate dintr-un heap. RECONSTITUIREA PROPRIETĂŢII DE HEAP Datele de intrare: vectorul A şi un indice i din vector. La apelul RECONSTITUIE-HEAP, se presupune că subarborii, având ca rădăcini nodurile STÂNGA(i) respectiv DREAPTA(i) sunt heap-uri. Sarcina procedurii RECONSTITUIE-HEAP este de a "scufunda" în heap valoarea A[i], astfel încât subarborele care are în rădăcină valoarea elementului de indice i, să devină un heap. RECONSTITUIE-HEAP(A, i) 1: left STÂNGA(i) 2: right DREAPTA(i) 3: dacă left dimensiune-heap[a] şi A[left] > A[i] atunci 4: maxim left 5: altfel 6: maxim i 7: dacă right dimensiune-heap[a] şi A[right] > A[maxim] atunci 8: maxim right 9: dacă maxim i atunci l0: schimbă A[i] A[maxim] 11: RECONSTITUIE-HEAP(A, maxim) Modul de funcţionare: La fiecare pas se determină cel mai mare element dintre A[i], A[STÂNGA(i)] şi A[DREAPTA(i)], iar indicele său se păstrează în variabila maxim. Dacă A(i) este cel mai mare, atunci subarborele având ca rădăcină nodul i este un heap şi procedura se termină. În caz contrar, cel mai mare element este unul dintre cei doi descendenţi şi A[i] este interschimbat cu A[maxim]. Astfel, nodul i şi descendenţii săi satisfac proprietatea de heap. Nodul maxim are acum valoarea iniţială a lui A[i], fiind posibil ca subarborele de rădăcină maxim să nu îndeplinească proprietatea de heap. Rezultă necesitatea apelării recursive a procedurii RECONSTITUIE-HEAP pentru acest arbore. CONSTRUIREA UNUI HEAP - a fost propusă de Floyd 1964. CONSTRUIEŞTE-HEAP(A) 1: dimesiune-heap[a] lungime[a] 2: pentru i lungime[a]/2, 1 execută 3: RECONSTITUIE-HEAP(A, i)

Mod de funcţionare: Procedura RECONSTITUTE-HEAP poate fi utilizată "de jos în sus" pentru transformarea vectorului A[l..n] în heap, unde n = lungime[a]. Deoarece toate elementele subşirului A[([n/2] + 1)..n] sunt frunze, acestea pot fi considerate ca fiind heap-uri formate din câte un element. Astfel, procedura CONSTRUIEŞTE-HEAP trebuie să traverseze doar restul elementelor şi să execute procedura RECONSTITUIE- HEAP pentru fiecare nod întâlnit. Ordinea de prelucrare a nodurilor asigură că subarborii, având ca rădăcină descendenţi ai nodului i să formeze heap-uri înainte ca RECONSTITUIE-HEAP să fie executat pentru aceste noduri. ALGORITMUL HEAPSORT (metoda sortarii cu ansambluri) HEAPSORT(A) 1: CONSTRUIEŞTE-HEAP(A) 2: pentru i lungime[a], 2 execută 3: schimbă A[1] A[i] 4: dimesiune-heap[a] dimesiune-heap[a] 1 5: RECONSTITUIE-HEAP(A, 1) Mod de funcţionare: Algoritmul heapsort începe cu apelul procedurii CONSTRUIEŞTE-HEAP în scopul transformării vectorului de intrare A[l..n] în heap, unde n = lungime[a]. Deoarece cel mai mare element al vectorului este ataşat nodului rădăcină A[1], acesta va ocupa locul definitiv în vectorul ordonat prin interschimbarea sa cu A[n]. "Excluzând" din heap cel de-al n-lea element (şi micşorând cu 1 dimesiune-heap(a)), restul de A[1..(n - 1)] elemente se pot transforma uşor în heap, deoarece subarborii nodului rădăcină au proprietatea de heap, cu eventuala excepţie a elementului ajuns în nodul rădăcină. Apelând procedura RECONSTRUIEŞTE-HEAP(A, 1) se restabileşte proprietatea de heap pentru vectorul A[1..(n - 1)]. Procedeul se repetă micşorând dimensiunea heapului de la n - 1 la 2. COZI DE PRIORITĂŢI Una din cele mai frecvente aplicaţii ale unui heap (introdusă de Williams) o constituie utilizarea lui sub forma unei cozi de priorităţi. Coada de priorităţi este o structură de date care conţine o mulţime S de elemente, fiecare având asociată o valoare numită cheie. Asupra unei cozi de priorităţi se pot efectua următoarele operaţii: INSEREAZĂ(S, x) - inserează elementul x în mulţimea S (S S U {x}). MAXIM(S) - returnează elementul din S având cheia cea mai mare. EXTRAGE-MAX(S) - elimină şi returnează elementul din S având cheia cea mai mare. Aplicabilitate în: Planificarea lucrărilor pe calculatoare partajate. Sarcinile care trebuie efectuate şi priorităţile relative se memorează într-o coadă de prioritate. Când o lucrare este

terminată sau întreruptă, procedura EXTRAGE-MAX va selecta lucrarea având prioritatea cea mai mare dintre lucrările în aşteptare. Cu ajutorul procedurii INSERARE în coadă poate fi introdusă oricând o lucrare nouă. Simularea unor evenimente controlate. Din coadă fac parte evenimentele de simulat, fiecăruia ataşându-i-se o cheie reprezentând momentul când va avea loc evenimentul. Evenimentele trebuie simulate în ordinea desfăşurării lor în timp, deoarece simularea unui eveniment poate determina necesitatea simulării altuia în viitor. În acest caz, ordinea evenimentelor în coada de priorităţi trebuie inversată, iar procedurile MAXIM şi EXTRAGE-MAX se vor înlocui cu MINIM Şi EXTRAGE-MIN. Programul de simulare va determina următorul eveniment cu ajutorul procedurii EXTRAGE-MIN, iar dacă va trebui introdus un nou element în şir se va apela procedura INSERARE. Sortarea și afișarea celor mai relevante k documente în etapele de indexare și procesare a interogărilor într-un motor de căutare (Yahoo). Operaţii implementate: MAXIM-HEAP va determina în timpul θ(1) cel mai mare element al heap-ului (A[1]). EXTRAGE-MAX-DIN-HEAP - similară structurii repetitive din liniile 3-5 din procedura HEAPSORT. Timpul de execuţie este O(lgn). INSEREAZĂ-ÎN-HEAP - inserează un nod în heap-ul A. Timpul de execuţie pentru un heap având n elemente este O(lg n). Apelând în mod repetat procedura INSERARE-ÎN-HEAP poate fi implementată un heap. EXTRAGE-MAX-D1N-HEAP(A) 1: dacă dimesiune-heap[a] < 1 atunci 2: eroare "depăşire inferioară heap" 3: max A[1] 4: A[1] A[dimensiune-heap[A]] 5: dimensiune-heap[a] dimensiune-heap[a] 1 6: RECONSTITUIE-HEAP(A, 1) 7: returnează maxim INSEREAZĂ-ÎN-HEAP(A, cheie) 1: dimensiune-heap[a] dimensiune-heap[a] + 1 2: i dimensiune-heap[a] 3: cât timp i > 1 şi A[PĂRINTE(i)] < cheie execută 4: A[i] A[PĂRINTE(i)] 5: i PĂRINTE(i) 6: A[i] cheie Construirea unui Heap prin Inserţie CONSTRUIEŞTE-HEAP'(A) 1: dimensiune-heap[a] 1 2: pentru i 2, lungime[a] execută

3: INSEREAZĂ-ÎN-HEAP(A, A[i]) În cazul cel mai defavorabil se execută într-un timp θ(nlgn) pentru construirea unui heap având n elemente. II. APLICAŢII II.1. Scrieţi un program care implementează operaţiile aferente heap-urilor (RECONSTITUIE-HEAP, CONSTRUIEŞTE-HEAP, HEAPSORT, EXTRAGE-MAX-D1N-HEAP, MAXIM şi INSEREAZĂ-ÎN-HEAP) folosind funcţiile descrise în prezentul document. II.2. Scrieţi un program care construiește un ansamblu (Heap) din toate elementele a două heap-uri cu n, respectiv m elemente. II.3. Scrieţi un program care verifică dacă un șir dat de numere este ansamblu (heap). II.4. Se dă un ansamblu într-un vector a. Să se înlocuiască elementul a[i] cu o valoare dată x și să se refacă ansamblul. BIBLIOGRAFIE [Iva98] Ivaşc C., Prună M. Bazele informaticii (Grafuri şi elemente de combinatorică), Manual pentru clasa a X-a, Editura Petrion, 1998. [Cor90] Cormen, T. H., Leiserson, C. E., Rivest, R. L. Introduction to Algorithms. McGraw-Hill, New York, 1990.