This shows you the differences between two versions of the page.
sd-ca:teme:tema1 [2019/03/03 15:41] george.popescu0309 |
sd-ca:teme:tema1 [2019/04/06 19:22] (current) george.popescu0309 |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | <hidden> | ||
====Tema1==== | ====Tema1==== | ||
Line 5: | Line 4: | ||
* [[mailto:andistroie@gmail.com | Alexandru Mihai Stroie]] | * [[mailto:andistroie@gmail.com | Alexandru Mihai Stroie]] | ||
* [[mailto:george.apopescu97@gmail.com | George Popescu]] | * [[mailto:george.apopescu97@gmail.com | George Popescu]] | ||
- | * [[mailto:@gmail.com | Tiberiu Lepadatu]] | ||
* Data publicării: 11.03.2019 | * Data publicării: 11.03.2019 | ||
- | * Deadline: 03.04.2019 | + | * Deadline: **05.04.2019 ora 23:55** |
+ | |||
+ | === Modificări și actualizări === | ||
+ | * **18 martie** | ||
+ | * modificare nume fisiere intrare/iesire in races.in/races.out | ||
+ | * update checker | ||
+ | |||
+ | <note warning>**Atenite!** O tema care nu compileaza va primi 0 puncte.</note> | ||
=== Obiective === | === Obiective === | ||
Line 53: | Line 58: | ||
</note> | </note> | ||
- | <note important>In cazul in care 2 concurenti au acelasi timp, vor fi departajati dupa id (cel cu id mai mic este in fata celui cu id mai mare).</note> | + | <note important>In cazul in care 2 concurenti au acelasi timp, vor fi departajati dupa pozitia ocupata in clasamentul anterior cursei actuale. |
+ | Clasamentul se va stabili dupa fiecare cursa, nu doar la operatii de print.</note> | ||
=== Operatii === | === Operatii === | ||
Line 66: | Line 72: | ||
* Creati un program care sa il ajute pe Piciorus sa isi urmareasca favoritii din campionatul descris mai sus. | * Creati un program care sa il ajute pe Piciorus sa isi urmareasca favoritii din campionatul descris mai sus. | ||
- | |||
=== Input === | === Input === | ||
Line 74: | Line 79: | ||
* Sirul “print”. | * Sirul “print”. | ||
* n numere naturale separate printr-un spatiu, reprezentand timpul unui concurent intr-o cursa. | * n numere naturale separate printr-un spatiu, reprezentand timpul unui concurent intr-o cursa. | ||
- | * Citirea se va face din fisierul race.in | + | * Citirea se va face din fisierul races.in |
<note tip>Se garanteaza ca vor fi fix m curse si fix k print-uri.</note> | <note tip>Se garanteaza ca vor fi fix m curse si fix k print-uri.</note> | ||
Line 82: | Line 87: | ||
* In fisierul de output se vor gasi n*(k + 1) linii (k clasamente, dupa fiecare clasament se va afisa o linie goala), fiecare linie continand 3 numere separate printr-un spatiu: ID-ul, Nr. de puncte acumulate de la inceputul campionatului si Diferenta de nivel din clasament fata de print-ul trecut. | * In fisierul de output se vor gasi n*(k + 1) linii (k clasamente, dupa fiecare clasament se va afisa o linie goala), fiecare linie continand 3 numere separate printr-un spatiu: ID-ul, Nr. de puncte acumulate de la inceputul campionatului si Diferenta de nivel din clasament fata de print-ul trecut. | ||
- | * Afisarea se va face in fisierul race.out | + | * Afisarea se va face in fisierul races.out |
<note tip>Pentru primul print Diferenta de nivel va fi 0 pentru toti participantii.</note> | <note tip>Pentru primul print Diferenta de nivel va fi 0 pentru toti participantii.</note> | ||
Line 116: | Line 121: | ||
=== Restrictii si precizari === | === Restrictii si precizari === | ||
- | * TO DO | ||
<note warning>**Atenție!** Structurile de date trebuie sa fie implementate generic.</note> | <note warning>**Atenție!** Structurile de date trebuie sa fie implementate generic.</note> | ||
+ | * 0 < n < 1000 | ||
=== Teste publice === | === Teste publice === | ||
- | {{|Checker Tema1}} | + | |
+ | {{:sd-ca:teme:checker-tema1-2019-v3.zip|}} | ||
Temele vor trebui trimise pe [[https://elf.cs.pub.ro/vmchecker/ui/#SD|vmchecker]]. | Temele vor trebui trimise pe [[https://elf.cs.pub.ro/vmchecker/ui/#SD|vmchecker]]. | ||
Line 156: | Line 161: | ||
=== Tutorial Skip List === | === Tutorial Skip List === | ||
- | * TO DO | + | Despre structura de date: |
- | </hidden> | + | |
+ | SkipList este o structura de date care poate sa faca operatia de cautare in O(log n) si insertia ordonata in O(log n). Deci se aproprie de caracteristiciile vectorului in ceea ce priveste cautarea, pastrand totusi avantajele unei liste(inserarea elementelor in O(1)).\\ | ||
+ | |||
+ | ^ Algorithm ^ Average ^ Worst case ^ | ||
+ | | Space | O(n) | O(n log n) | | ||
+ | | Search | O(log n) | O(n) | | ||
+ | | Insert | O(log n) | O(n) | | ||
+ | | Delete | O(log n) | O(n) | | ||
+ | \\ | ||
+ | **Principalele operatii:** | ||
+ | \\ | ||
+ | <code> | ||
+ | **Search**(key) | ||
+ | p = top-left node in S | ||
+ | while (p.below != null) do //Scan down | ||
+ | p = p.below | ||
+ | while (key >= p.next) do //Scan forward | ||
+ | p = p.next | ||
+ | return p | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | **Insert**(key) | ||
+ | p = Search(key) | ||
+ | q = null | ||
+ | i = 1 | ||
+ | repeat | ||
+ | i = i + 1 //Height of tower for new element | ||
+ | if i >= h | ||
+ | h = h + 1 | ||
+ | createNewLevel() //Creates new linked list level | ||
+ | while (p.above == null) | ||
+ | p = p.prev //Scan backwards until you can go up | ||
+ | p = p.above | ||
+ | q = insertAfter(key, p) //Insert our key after position p | ||
+ | until CoinFlip() == 'Tails' | ||
+ | n = n + 1 | ||
+ | return q | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | **Delete**(key) | ||
+ | Search for all positions p_0, ..., p_i where key exists | ||
+ | if none are found | ||
+ | return | ||
+ | Delete all positions p_0, ..., p_i | ||
+ | Remove all empty layers of skip list | ||
+ | </code> | ||
+ | {{ :sd-ca:teme:screenshot_from_2019-03-04_22-06-08.png?nolink&700 |}} | ||
+ | |||
+ | <note tip>Linkuri utile:\\ | ||
+ | '' | ||
+ | https://people.ok.ubc.ca/ylucet/DS/SkipList.html\\ | ||
+ | |||
+ | https://www.ics.uci.edu/~pattis/ICS-23/lectures/notes/Skip%20Lists.pdf\\ | ||
+ | |||
+ | http://ticki.github.io/blog/skip-lists-done-right/\\ | ||
+ | |||
+ | https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/skiplists.pdf\\ | ||
+ | |||
+ | https://www.youtube.com/watch?v=2g9OSRKJuzM\\ | ||
+ | |||
+ | https://www.youtube.com/watch?v=7GWXfL6T3fM\\ | ||
+ | '' | ||
+ | </note> |