-
Notifications
You must be signed in to change notification settings - Fork 0
adumitrescu2708/Range-Minimum-Query
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Dumitrescu Alexandra 323 CA, ACS UPB Tema #1 - Analiza Algoritmilor Noiembrie 2021 _______________________ Range Minimum Query _______________________ A. Deinitia Problemei & Aspecte Relevante 1. Definitia RMQ: | Dandu-se un vector de N elemente si M interogari de forma [x, y] | sa se raspunda la intrebarea: "Care este cel mai mic element din | intervalul [x, y] ?". 2. Definitia RMQ-UPDATE: | Ne-am propus sa studiem si varianta-online a problemei propuse. | Redefinim problema update-urilor, atfel: Dandu-se un vector de | N elemente sa se simuleze M comenzi asupra vectorului. | Comenzile se codifica astfel: | Q: Q a b -> "Care este cel mai mic element din intervalul [a b]?" | U: U idx value -> "Modifica elementul de la pozitia idx cu value" 3. Aspecte relevante: | 3.1 In queries [x, y] - x, y se considera indexate de la 1. | Ex: Q 1 2 -> Minimul dintre primele 2 elemente din vector | | 3.2 Cele 2 probleme vor fi studiate separat, in sensul ca sunt | implementate separat, cu teste proprii menite sa le testeze | corectitudinea & eficienta din aspecte diferite. | Mai multe in: Sectiunile <B>, <C> | | 3.3 In cadrul update-urilor, se trateaza doar problema | update-urilor singulare, nu si a update-urilor pe intervale. B. Solutii propuse | 1. Square Root Decomposition | 2. Sparse Table | 3. Segment Trees Pentru fiecare algoritm s-au adaugat explicatii referitoare la implementare si la modul de functionare al algoritmului in sine in cadrul fisierelor sursa. Pentru mai multe detalii: vezi si comentarii fisiere .c C. Arhiva ./ |-> p1.c - contine implementarea pentru Square root Decomposition |-> p2.c - contine implementarea pentru Sparse Table |-> p3.c - contine implementarea pentru Segment Trees |-> in - directorul cu 75 de teste .in |-> out - directorul cu 75 de teste .out |-> generator - contine generator + README cu detalii relevante | despre acesta |-> math_utils.c & math_utils.c - contine functii auxiliare | precum sqrt, min, log2 | |-> updates - folder unde se gasesc implementari pentru UPDATES | |__ | p1.c - aceleasi functionalitati + updates + parsarea comenzilor | |__ p2.c - IDEM | |__ p3.c - IDEM | |__ README + in + out + generator D. Generator Teste 1. Criterii majore pe care le-am urmarit | A. Dimensiunea datelor de intrare (N, M) | B. Ordinea elementelor din vectorul de intrare | C. Intervalele generate 2. Ierarhie Teste SHORT = 100 = 10^2 MEDIUM = 10000 = 10^4 LARGE = 1000000 = 10^6 | Nr. test | Dimensiuni date | Ordonare | Intervale | |________________________________________________________________________ | | [1, 15] N - SHORT -- random [1, 5] -- mici [1] | M - SHORT -- mari [2] | -- crescator [6, 10] -- mici [6] | -- mari [7] | -- descrescator [11, 15]-- mici [11] | -- mari [12] | [16, 30] N - MEDIUM -- random [16, 20] -- mici [16] | M - MEDIUM -- mari [17] | -- crescator [21, 25] -- mici [21] | -- mari [22] | -- descrescator [26, 30]-- mici [26] | -- mari [27] | [31, 45] N - LARGE -- random [31, 35] -- mici [31] | M - MEDIUM -- mari [32] | -- crescator [36, 40] -- mici [36] | -- mari [37] | -- descrescator [41, 45]-- mici [41] | -- mari [42] | [46, 60] N - MEDIUM -- random [46, 50] -- mici [46] | M - LARGE -- mari [47] | -- crescator [51, 55] -- mici [51] | -- mari [52] | -- descrescator [56, 60]-- mici [56] | -- mari [57] | [61, 75] N - LARGE -- random [61, 65] -- mici [61] | M - LARGE -- mari [62] | -- crescator [66, 70] -- mici [66] | -- mari [67] | -- descrescator [71, 75]-- mici [71] | -- mari [72] Un alt criteriu auxiliar ar fi dimensiunea datelor din vectorul de intrare. Astfel, am procedat: | [1, 30] - valori SHORT (1) | [31, 50] - valori MEDIUM | [51, 75] - valori LARGE Pentru a genera valori random, ne-am folosit de functia rand() si am fortat elementele sa ia o valoare maxima pe care ne-am dorit-o. Pentru a putea testa gradual cele 3 programe, generatorul propus se foloseste de solutia banala pentru a genera fisierele din .out In final, rezultatele celor 3 solutii + solutia banala trebuie sa coincida pe toate testele propuse. Vezi si: README generator Pentru mai multe detalii despre implementarea generatorului vezi si: README checker 3. OTHER CORNER CASES: 1. Avand in vedere (1) si ca in testele [16, 30] N si M sunt de dimensiune MEDIUM -> vor rezulta date de intrare din vector care se repeta abundent. Studiem cum se comporta algoritmii pe vectori in care elementele se repeta 2. Extindem 1. si luam un test in care tot vectorul este constant adica test77.in 3. Verificam corectitudinea algoritmilor si pe un test case in care numarul de queries este nul, in test76.in E. Mentiuni 1. Am verificat prima solutie (Square Root Decomposition) pe platforma infoarena. Am anuntat pe forum problema si atasez link catre solutia care s-a postat public. LINK: https://www.infoarena.ro/job_detail/2800928 CONT: ad2708 DATA: 14.Nov.2021 2. Link-uri utile care m-au ajutat in implementare R1: https://www.geeksforgeeks.org/range-minimum-query-for-static-array/ R2: https://www.geeksforgeeks.org/sqrt-square-root-decomposition-technique-set-1-introduction/ R3: https://www.geeksforgeeks.org/range-sum-queries-and-update-with-square-root/?ref=rp R4: https://www.geeksforgeeks.org/segment-tree-set-1-range-minimum-query/
About
Studied the time-space efficiency and the applicability of three of the fastest algorithms solving range minimum queries and implemented and studied the updates-version for each.
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published