Pagini recente » Diferente pentru problema/quadratum intre reviziile 9 si 8 | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Diferente pentru blog/cautare-binara intre reviziile 20 si 19
Nu exista diferente intre titluri.
Diferente intre continut:
int search(int[] A, int x) {
int hi = A.length, lo = -1, mid;
while (hi - lo > 1) {
mid = (lo + hi) / 2;
if (A[mid] < x)
low = mid;
else
hi = mid;
mid = (lo + hi) / 2;
if (A[mid] < x)
low = mid;
else
hi = mid;
}
if (hi == A.length || A[hi] != x)
return -1;
}
==
* linia 2: setam pe hi si lo inafara sirului, astfel invariantul e indeplinit si nu trebuie sa tratam cazuri speciale.
* linia 3: conditia de continuare a buclei e hi - lo > 1. Invariantul ales face ca hi si lo sa fie tot timpul distincte. La fiecare pas distanta intre hi si lo se injumatateste, iar cand hi si lo ajung consecutive ca pozitii in sir putem lua o decizie.
* linia 4: mid va fi tot timpul intre lo si hi.
* linia x: stim ca A[mid] < x si astfel facand atribuirea lo = mid micsoram spatiu de cautare si pastra invariantul
* conditia de la linia 3 e hi - lo > 1. Invariantul ales face ca hi si lo sa fie tot timpul distincte. La fiecare pas distanta intre hi si lo se injumatateste, iar cand hi si lo ajung consecutive ca pozitii in sir putem lua o decizie.
* la linia x stim ca A[mid] < x si astfel putem micsora spatiu de cautare si pastra invariantul, dandu-i lui lo valoarea mid
* la linia y stim ca A[mid] >= x si putem face atribuirea hi = mid.
* la linia z vedem daca x e in sir
** in caz afirmativ putem sa returnam indexul hi
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.