Subiectul al II-lea, cerința 2
Numărul maxim de intervale disjuncte
Metoda greedy care ordonează intervalele după extremitatea dreaptă și le alege pe cele care nu se intersectează cu ultimul interval ales, cu justificarea corectitudinii și a eficienței.
Când două intervale deschise au intersecția vidă
Intervalul deschis (a, b) conține numerele strict mai mari decât a și strict mai mici decât b. Extremitățile nu aparțin intervalului. Două intervale (a₁, b₁) și (a₂, b₂), cu b₁ ≤ b₂, au intersecția vidă dacă și numai dacă a₂ ≥ b₁, adică al doilea începe cel mai devreme în punctul în care se termină primul.
În exemplul din enunț, intervalele (10, 150) și (150, 200) au intersecția vidă: numărul 150 nu aparține niciunuia dintre ele.
Explicarea metodei de rezolvare
Problema se rezolvă prin metoda greedy. Intervalele se ordonează crescător după extremitatea dreaptă, apoi se parcurg în această ordine:
- Se alege primul interval, cel care se termină cel mai devreme.
- Se reține extremitatea dreaptă a ultimului interval ales.
- Fiecare interval următor se alege dacă extremitatea lui stângă este mai mare sau egală cu extremitatea dreaptă reținută. Atunci el nu se intersectează cu niciunul dintre intervalele alese, iar extremitatea reținută devine extremitatea lui dreaptă.
- Intervalul care începe înainte de extremitatea reținută se intersectează cu ultimul interval ales și nu se alege.
Numărul intervalelor alese este rezultatul cerut.
Corectitudinea criteriului de alegere. Fie G intervalul care se termină cel mai devreme și o selecție oarecare de intervale disjuncte, cu număr maxim de elemente. Dacă primul interval al acestei selecții, în ordinea extremităților drepte, nu este G, el poate fi înlocuit cu G. G se termină cel târziu când se termină intervalul înlocuit, deci toate celelalte intervale ale selecției încep cel mai devreme în punctul în care se termină G și rămân disjuncte de el. Selecția obținută are același număr de intervale, deci există o soluție optimă care conține alegerea greedy. Același raționament se aplică apoi intervalelor a căror extremitate stângă este mai mare sau egală cu extremitatea dreaptă a lui G.
Justificarea eficienței
Timpul de executare al algoritmului se compune din:
- ordonarea celor n intervale, făcută cu funcția
sortdin bibliotecaalgorithm, în timp de ordinul O(n log n); - parcurgerea intervalelor ordonate, o singură dată, cu o comparație pentru fiecare interval, în timp O(n).
Timpul de executare este deci O(n log n), dat de ordonare. Pentru n = 10⁴, algoritmul face un număr de operații de ordinul 10⁵.
Verificarea tuturor submulțimilor de intervale ar da tot rezultatul corect, dar ar cere examinarea a 2ⁿ submulțimi, un număr care pentru n = 10⁴ depășește cu mult ce se poate calcula în timp util.
Memoria folosită este de ordinul O(n), pentru vectorul de intervale. Ordonarea cere ca toate intervalele să fie citite înainte de prelucrare.
Rezolvarea se poate citi pe educamp.ro, la adresa de mai sus.
S-a încheiat minutul de citit liber.
Ce cuprinde rezolvarea
- Când două intervale deschise au intersecția vidă
- Explicarea metodei de rezolvare
- Justificarea eficienței
- Programul
- Verificarea pe exemplul din enunț
Vezi rezolvarea ca și cursant
Cel puțin o cerință din fiecare an este disponibilă gratuit și integral. Pentru a citi toate celelalte rezolvări ale disciplinei, te înscrii la cursul de pregătire.
Prima săptămână este gratuită, fără plată și fără card. Dacă vrei să vezi mai întâi cum este scrisă o rezolvare, poți reveni la prima cerință a anului.
100 RON / lună, pentru o disciplină
Ce cuprinde:
- Două întâlniri de câte două ore, în fiecare lună
- Tot suportul de curs publicat până acum la disciplina aleasă
- Capitole noi în fiecare săptămână, cuprinse în luna plătită, fără costuri suplimentare
- Material organizat după structura programei de examen
- Acces de pe orice dispozitiv, folosind același cont
- Prima săptămână gratuită, fără card și fără reînnoire automată
Ai întrebări sau o problemă? Scrie-mi pe WhatsApp, la 0745 874 576.