Diferente pentru problema/infasuratoare intre reviziile #31 si #32

Nu exista diferente intre titluri.

Diferente intre continut:

O astfel de solutie este compusa din 2 pasi unul, sortarea, avand complexitate generala $O(Nlog{~2~}N)$, si dupa 2 stive ambele cu complexitate $O(N)$. O optimizare care se poate aduce deobicei la algoritmul acesta in timp de concurs este ori ca punctele sunt direct sortate, cum este cazul de fata, sau ca punctele au coordonate intregi , moment in care se poate apela la o sortare care se bazeaza pe limitarea capacitatii calculatorului de a tine minte numere intregi foarte mari gen "Radix Sort":http://en.wikipedia.org/wiki/Radix_sort sau cateodata "Counting Sort":http://en.wikipedia.org/wiki/Counting_sort. O astfel de solutie se poate vedea 'aici':job_detail/236230?action=view-source. Aceasta solutie obtine $100$ de puncte.
O alta prezentare a acestei probleme este aceea cand punctele nu sunt toate date deodata, iar fiecare punct este prezentat iterativ. Este destul de clar ca la oricare algoritm dintre cele prezentate pana acum mai apare un $N$ la complexitate, lucru care le face in mare parte ineficiente si inutile pentru problema aceasta
Un algoritm naiv cu complexitate $O(N*H)$ se poate realiza daca la fiecare aparitie a unui punct se verifica daca acesta este sau nu in poligon. Daca este in poligon nu mai trebuie modificat nimic. Daca nu atunci se cauta primul punct din poligon care unit cu punctul curent nu trece prin interiorul poligonului. Se determina toate aceste puncte si se scot din poligon, dupa care se introduce punctul nou in locul celor scoase.
O observatie matematica care ajuta la optimizarea acestui algoritm este faptul ca in functie de un punct din interiorul poligonului, varfurile par sa fie sortate in functie de unghi, si astfel cautarea unui punct care trebuie scos se reduce la o cautare binara de complexitate $O(Nlog{~2~}H)$. Secventa de puncte care trebuie scoase sunt un interval compact mereu si astfel dupa ce se gaseste primul punct se pot determina toate punctele care trebuie scoase in o singura parcurgere a lor. Deoarece poligonul poate doar sa se mareasca pe masura ce se introduc puncte, orice punct care se afla in poligon cand este la inceput(la primele 3 puncte) se va afla tot timpul, astfel un punct care se afla mereu in interiorul poligonului este centrul de greutate initial. Dar acum mai trebuie o structura de date care permite stergere,inserare si cautare in $O(log~2~N)$. O astfel de structura de date este "Arborele Echilibrati de cautare":http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree, dar care spre norocul nostru sunt implementati deja in stl sub forma de "set-uri":http://www.sgi.com/tech/stl/set.html. O astfel de solutie are complexitate $O(Nlog{~2~}N)$.
O observatie matematica care ajuta la optimizarea acestui algoritm este faptul ca in functie de un punct din interiorul poligonului, varfurile par sa fie sortate in functie de unghi, si astfel cautarea unui punct care trebuie scos se reduce la o cautare binara de complexitate $O(Nlog{~2~}H)$. Secventa de puncte care trebuie scoase sunt un interval compact mereu si astfel dupa ce se gaseste primul punct se pot determina toate punctele care trebuie scoase in o singura parcurgere a lor. Deoarece poligonul poate doar sa se mareasca pe masura ce se introduc puncte, orice punct care se afla in poligon cand este la inceput(la primele 3 puncte) se va afla tot timpul, astfel un punct care se afla mereu in interiorul poligonului este centrul de greutate initial. Dar acum mai trebuie o structura de date care permite stergere,inserare si cautare in $O(log{~2~}N)$. O astfel de structura de date este "Arborele Echilibrati de cautare":http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree, dar care spre norocul nostru sunt implementati deja in stl sub forma de "set-uri":http://www.sgi.com/tech/stl/set.html. O astfel de solutie are complexitate $O(Nlog{~2~}N)$.
h3. Aplicatii

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.