Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pp:lheap [2019/04/01 14:40]
dmihai [Priority Queue]
pp:lheap [2019/04/18 14:23] (current)
georgem [Exerciții]
Line 1: Line 1:
-====== ​TODO ======+====== ​Structuri funcționale de date ======
  
 Scopul laboratorului:​ Scopul laboratorului:​
   * recapitularea conceptelor învățate   * recapitularea conceptelor învățate
-  * programarea cu o structură funcțională+  * programarea cu o structură ​de date funcțională
   * înțelegerea conceptului de "​leftist heap"   * înțelegerea conceptului de "​leftist heap"
  
Line 24: Line 24:
 Un exemplu naiv este implementarea unei cozi de priorități folosind o listă. Avem două posibilități:​ să introducem complexitatea determinării priorității în funcția ''​top'',​ sau în ''​insert''​. Un exemplu naiv este implementarea unei cozi de priorități folosind o listă. Avem două posibilități:​ să introducem complexitatea determinării priorității în funcția ''​top'',​ sau în ''​insert''​.
  
-Putem pune mereu un element la începutul listei (astfel ''​insert''​ e echivalent cu '':''​). Atunci când avem nevoie de cel cu prioritatea cea mai mare, pornim o căutare liniară prin elementele listei. Similar pentru ștergere. Pentru operația de ''​merge''​ putem folosi append din Haskell (''​++''​). Avem astfel complexitățile:​+Putem pune mereu un element la începutul listei (astfel ''​insert''​ e echivalent cu '':''​). Atunci când avem nevoie de cel cu prioritatea cea mai mare, pornim o căutare liniară prin elementele listei. Similar pentru ștergere. Pentru operația de ''​merge''​ putem folosi append din Haskell (''​%%+%%%%+%%''​). Avem astfel complexitățile:​
  
 | Funcție | Complexitate | | Funcție | Complexitate |
Line 51: Line 51:
  
 Implementarea cu liste nu este ideală și putem obține performanțe mai bune. Implementarea cu liste nu este ideală și putem obține performanțe mai bune.
 +
 ==== Binary Heap ==== ==== Binary Heap ====
  
Line 67: Line 68:
  
 Se poate observa că aceste operații ar fi greu de implementat într-un stil funcțional. Se poate observa că aceste operații ar fi greu de implementat într-un stil funcțional.
 +
 ==== Leftist Heap === ==== Leftist Heap ===
  
Line 81: Line 83:
  
 [[https://​courses.cs.washington.edu/​courses/​cse326/​08sp/​lectures/​markup/​05-leftist-heaps-markup.pdf | Leftist heap - more info ]] [[https://​courses.cs.washington.edu/​courses/​cse326/​08sp/​lectures/​markup/​05-leftist-heaps-markup.pdf | Leftist heap - more info ]]
 +
 +Obținem complexitățile:​
 +
 +| Funcție | Complexitate |
 +| ''​isEmpty''​ | ''​O(1)''​ |
 +| ''​insert''​ | ''​O(log(n))''​ |
 +| ''​top''​ | ''​O(1)''​ |
 +| ''​delete''​ | ''​O(log(n))''​ |
 +| ''​merge''​ | ''​O(log(n))''​ |
 +
 ===== newtype ===== ===== newtype =====
  
Line 173: Line 185:
   - Folosiți arbori binari pentru a implementa un leftist heap   - Folosiți arbori binari pentru a implementa un leftist heap
  
-<note tip> +{{:​pp:​laborator_6_-_schelet.zip|Lab 6 - Schelet}}\\
-Clasa ''​PQueue''​ conține unele funcții cu implementări defaultConsiderați înlocuirea acestora cu implementări particularizate. +
-</​note>​+
  
-{{:​pp:​laboratorul_6_-_schelet.zip|Lab 6 - Schelet}} 
 ===== Recommended Reading ===== ===== Recommended Reading =====