Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:laboratoare:laborator-12 [2015/05/24 12:48]
cosmin_ioan.petrisor [Inserarea]
sd-ca:laboratoare:laborator-12 [2015/05/28 15:07] (current)
gabriel.cristache [Exerciții]
Line 19: Line 19:
 O structură de date este o metodă de a reține anumite date astfel încât operațiile cu acestea (căutare, inserare, ștergere) să fie făcute cât mai eficient și să respecte cerințele programatorului. De multe ori, o anumită structură de date se află la baza unui algoritm sau sistem, iar o performanță bună a acesteia (complexitate spațială și temporală cât mai mică) influențează performanța întregului sistem. O structură de date este o metodă de a reține anumite date astfel încât operațiile cu acestea (căutare, inserare, ștergere) să fie făcute cât mai eficient și să respecte cerințele programatorului. De multe ori, o anumită structură de date se află la baza unui algoritm sau sistem, iar o performanță bună a acesteia (complexitate spațială și temporală cât mai mică) influențează performanța întregului sistem.
  
-În laboratoarele precedente am observat că un arbore binar de căutare de înălțime **h** implementează operațiile descrise mai sus într-o complexitate de **O(h)**. Dacă acest arbore binar nu este capabil să gestioneze elementele ce sunt inserate pentru a își menține o structura echilibrată atunci complexitatea pe operațiile de baza va crește.+În laboratoarele precedente am observat că un arbore binar de căutare de înălțime **h** implementează operațiile descrise mai sus într-o complexitate de **O(h)**. Dacă acest arbore binar nu este capabil să gestioneze elementele ce sunt inserate pentru a își menține o structura echilibrată atunci complexitatea pe operațiile de bază va crește.
  
 <note tip> <note tip>
Line 42: Line 42:
 De fiecare dată când un nod este inserat în arbore prioritatea lui este generată aleator (metodă similară cu cea folosită la randomized quick sort, în care la fiecare pas pivotul este generat aleator). Arborele va fi aranjat într-un mod aleator, bineînțeles,​ respectând cei doi invarianți. Cum numărul arborilor echilibrați este mai mare decât cel al arborilor rău echilibrați,​ șansa este destul de mică ca prioritățile generate aleator să nu mențină arborele echilibrat. De fiecare dată când un nod este inserat în arbore prioritatea lui este generată aleator (metodă similară cu cea folosită la randomized quick sort, în care la fiecare pas pivotul este generat aleator). Arborele va fi aranjat într-un mod aleator, bineînțeles,​ respectând cei doi invarianți. Cum numărul arborilor echilibrați este mai mare decât cel al arborilor rău echilibrați,​ șansa este destul de mică ca prioritățile generate aleator să nu mențină arborele echilibrat.
 </​note>​ </​note>​
-Demonstratia ​complet teoretică asupra faptului că operațiile de baza au complexitatea O(logN) se poate găsi in [2].+Demonstraţia ​complet teoretică asupra faptului că operațiile de bază au complexitatea O(logN) se poate găsi în [2].
  
  
Line 108: Line 108:
 </​code>​ </​code>​
  
- Spre exemplu, dacă am dori să inserăm nodul cu cheia 9 şi prioritatea 51, pașii vor arată în felul următor:+Spre exemplu, dacă am dori să inserăm nodul cu cheia 9 şi prioritatea 51, pașii vor arată în felul următor:
  
 {{ :​sd-ca:​laboratoare:​inserare.png }} {{ :​sd-ca:​laboratoare:​inserare.png }}
  
 +<​note>​
 Se observă necesitatea rotirilor pentru a aduce nodul nou inserat în vârful arborelui (are prioritatea cea mai mare). Se observă necesitatea rotirilor pentru a aduce nodul nou inserat în vârful arborelui (are prioritatea cea mai mare).
 +</​note>​
  
 Cele două tipuri de rotiri sunt prezentate vizual în imaginea de mai jos: Cele două tipuri de rotiri sunt prezentate vizual în imaginea de mai jos:
Line 136: Line 138:
   else if nod.stanga.prioritate > nod.dreapta.prioritate   else if nod.stanga.prioritate > nod.dreapta.prioritate
     rotireDreapta(nod)     rotireDreapta(nod)
-    sterge(nod, cheie);+    sterge(nod, cheie)
   else   else
     rotireStanga(nod)     rotireStanga(nod)
Line 147: Line 149:
 Pentru exerciții porniți de la {{:​sd-ca:​laboratoare:​labtreap-tasks.zip|scheletul de laborator}}. Pentru exerciții porniți de la {{:​sd-ca:​laboratoare:​labtreap-tasks.zip|scheletul de laborator}}.
  
-1. Implementați funcțiile de bază pentru un treap:+1.**[2p]** ​Implementați funcțiile de bază pentru un treap:
     * [0.5p] Căutare     * [0.5p] Căutare
     * [0.5p] Rotiri stânga și dreapta     * [0.5p] Rotiri stânga și dreapta
     * [0.5p] Inserare     * [0.5p] Inserare
     * [0.5p] Ștergere     * [0.5p] Ștergere
 +
 +2.**[1p]** Realizați o parcurgere a treapului astfel încât să obțineți cheile sortate crescător/​descrescător.
 +
 +3.**[2p]** Realizați o parcurgere a treapului astfel încât să obțineți o structură arborescentă a priorităților,​ pentru a observa invariantul de heap.
 +
 +4.**[2p]** Scrieți o funcție care să răspundă într-o complexitate de ''​O(logN)''​ la următoarea cerință: Care este cea de-a K-a cheie, în ordinea sortării crescătoare,​ care se află în treap?
 +
 <​hidden>​ <​hidden>​
-2. [1p] Realizați o parcurgere a treapului astfel încât să obțineți cheile sortate crescător/​descrescător.+2.**[1p]** Realizați o parcurgere a treapului astfel încât să obțineți cheile sortate crescător/​descrescător.
  
-3. [2p] Realizați o parcurgere a treapului astfel încât să obțineți o structură arborescentă a priorităților,​ pentru a observa invariantul de heap.+3.**[2p]** Realizați o parcurgere a treapului astfel încât să obțineți o structură arborescentă a priorităților,​ pentru a observa invariantul de heap.
  
-4. [4p] Scrieți o funcție care să răspundă într-o complexitate de ''​O(logN)''​ la următoarea cerință: Care este cea de-a K-a cheie, în ordinea sortării crescătoare,​ care se află în treap?.+4.**[4p]** Scrieți o funcție care să răspundă într-o complexitate de ''​O(logN)''​ la următoarea cerință: Care este cea de-a K-a cheie, în ordinea sortării crescătoare,​ care se află în treap?.
 </​hidden>​ </​hidden>​
-===== Referințe ​=====+===== Bibliografie ​===== 
 + 
 +[1] [[http://​www.cs.cmu.edu/​afs/​cs.cmu.edu/​project/​scandal/​public/​papers/​treaps-spaa98.pdf | Fast Set Operations Using Treaps]] 
 + 
 +[2] [[http://​compgeom.cs.uiuc.edu/​~jeffe/​teaching/​algorithms/​notes/​10-treaps.pdf | Randomized Binary Search Trees]] 
 + 
 +[3] [[http://​www.cs.cmu.edu/​afs/​cs.cmu.edu/​academic/​class/​15451-s07/​www/​lecture_notes/​lect0208.pdf | Balanced Search Trees]] 
 + 
 +[4] [[http://​en.wikipedia.org/​wiki/​Red%E2%80%93black_tree | Red-black Tree]] 
 + 
 +[5] [[http://​en.wikipedia.org/​wiki/​AVL_tree | AVL Tree]]
  
-  * [[http://​www.cs.cmu.edu/​afs/​cs.cmu.edu/​project/​scandal/​public/​papers/​treaps-spaa98.pdf | Fast Set Operations Using Treaps]] +[6] [[http://en.wikipedia.org/wiki/B-tree B-Tree]]
-  * [[http://compgeom.cs.uiuc.edu/~jeffe/teaching/​algorithms/​notes/​10-treaps.pdf ​Randomized Binary Search Trees]] +
-  * [[http://​www.cs.cmu.edu/​afs/​cs.cmu.edu/​academic/​class/​15451-s07/​www/​lecture_notes/​lect0208.pdf | Balanced Search Trees]]+
sd-ca/laboratoare/laborator-12.1432460905.txt.gz · Last modified: 2015/05/24 12:48 by cosmin_ioan.petrisor
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0