Diferente pentru problema/disjoint intre reviziile #2 si #3

Nu exista diferente intre titluri.

Diferente intre continut:

DA
|
h3. Explicaţie
...
h3. Indicatii de rezolvare
 
Problema se poate rezolva reprezentand multimile ca pe niste liste inlatuite. Cand va trebui sa verificam daca $2$ elemente se afla in aceeasi multime pur si simplu luam fiecare element si parcurgem lista lui pana ajungem la sfarsit. Daca pentru ambele noduri am ajuns la acelasi element atunci ele se afla in aceeasi multime, altfel nu. Cand vrem sa unim $2$ multimi pur si simplu luam elementul de sfarsit al primei multimi si il conectam de inceputul celeilalte liste. Aceasta abordare are complexitate $O(N)$ pentru o operatie de tip $2$ si $O(1)$ pentru o operatie de tipul $2$.
O abordare optima este aceea de a reprezenta fiecare multime ca pe un arbore cu radacina. Astfel pentru fiecare operatie de tip $2$ parcurgem arborele in sus din ambele elemente si daca la sfarsit ajungem in aceeasi radacina atunci elementele noastre se afla in aceeasi multime. Atunci cand vrem sa unim $2$ multimi intre ele, pur si simplu aflam radacinile celor $2$ arbori si le unim.
Asupra acestei abordari putem aplica insa $2$ euristici care scad foarte mult timpul de executie:
1. Reuniunea dupa rang: Pentru fiecare multime tinem minte inaltimea arborelui care reprezinta acea multime si atunci cand vrem sa unim $2$ arbori, il unim pe cel mai mic de cel mai mare.
2. Compresia drumurilor: Atunci cand facem o interogare, dupa ce am aflat in ce multime se afla nodul $x$, mai parcurgem odata drumul de la $x$ la radacina si unim toate nodurile direct de radacina. Astfel data viitoare cand vom avea o interogare pentru vreo unul din acele noduri vom ajunge din prima la radacina.
Aceste $2$ euristici duc complexitatea finala la $O(log*N)$ pentru o operatie de tipul $2$ si $O(1)$ pentru o operatie de tipul $1$.
Nota: log*N (a se citi "log star de $N$", reprezinta inversa "functiei lui Ackermann":http://en.wikipedia.org/wiki/Ackermann_function. Acest log* poate de asemenea fi foarte usor aproximat cu $O(1)$. Aveti "aici":http://en.wikipedia.org/wiki/Iterated_logarithm un tabel cu valorile pe care le ia acesta.
 
== include(page="template/taskfooter" task_id="disjoint") ==

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.