Diferente pentru happy-coding-2007/solutii intre reviziile #33 si #34

Nu exista diferente intre titluri.

Diferente intre continut:

Pseudocodul pentru calculul capatului stanga al intervalului in care functia fi este minima este urmatorul:
==code(c) |
find_interval(i)
==code(c) | find_interval(i)
  left=i
  right=N
  li=N+1
Pseudocodul functiei $update$ este prezentat in continuare:
== code(c) |
update(li,ri,i,nod)
== code(c) | update(li,ri,i,nod)
  daca intervalul corespunzator nodului nod este chiar [li,ri], atunci
    index[nod]=i
  altfel
Fiecare nod din arbore are o referinta catre tatal sau $(tata[nod])$. Radacina arborelui are o referinta catre o valoare nedefinita $(NEDEFINIT)$. Pseudocodul functiei $get_min$ este urmatorul:
== code(c) |
get_min(i)
== code(c) | get_min(i)
  nod = nodul din arbore corespunzator intervalului [i,i]
  val_min=infinit
  cat timp nod != NEDEFINIT
h2(#antitero). 'Antitero':problema/antitero
* $cat timp (exista un soldat care se poate deplasa in siguranta intr-o pozitie de unde poate omori un terorist)$
** $deplaseaza soldatul in pozitia respectiva si elimina teroristul$
* $daca toti soldatii pot ajunge in siguranta la destinatie, atunci deplaseaza-i acolo si incheie misiunea cu succes$
* $altfel: "Mission aborted!"$
==code(c) |
cat timp (exista un soldat care se poate deplasa in siguranta intr-o pozitie de unde poate omori un terorist)
  deplaseaza soldatul in pozitia respectiva si elimina teroristul
daca toti soldatii pot ajunge in siguranta la destinatie, atunci deplaseaza-i acolo si incheie misiunea cu succes
altfel: "Mission aborted!"
==
Aceasta este schita unui algoritm usor de implementat care rezolva problema. Practic, se incearca eliminarea repetata a cat mai multor teroristi, dupa care se incearca deplasarea la destinatie. Rezolvarea problemei implica, asadar, doar parcurgeri repetate ale grafului (de exemplu, 'DF':http://en.wikipedia.org/wiki/Depth-first_search sau 'BF':http://en.wikipedia.org/wiki/Breadth-first_search), in care unele noduri sunt "blocate" (cele in care se afla teroristi in viata si cele amenintate de teroristi in viata).
Pentru reconstituirea solutiei, vom initializa toate nodurile ca aflandu-se in starea $0$ si vom tine un vector cu nodurile la care a ajuns deja mesajul. Prima mutare va fi de la nodul $1$ la nodul $j = Mut[ 1 ][ 0 ]$. Pentru toate nodurile de pe calea de la $1$ (inclusiv) la $j$ (exclusiv), vom incrementa starea in care se afla acestea, apoi vom marca ca nodul $j$ a primit mesajul. La urmatorul moment de timp, vom lua fiecare nod care detine mesajul, vom verifica daca mai are de efectuat pasi din strategia sa optima si daca da, vom efectua pasul corespunzator in mod similar mutarii descrise mai sus.
Complexitatea solutiei descrise este O(N^3^ * logN).
Complexitatea solutiei descrise este $O(N^3^ * logN)$.
O dificultate suplimentara apare in momentul in care avem mai multi fii $f$ ai unui nod $i$, pentru care $Tmin[f][s(f)]$ are aceeasi valoare maxima. In aceasta situatie, va trebui sa il alegem pe cel pentru care sirul $Tmin[f][s(f)], Tmin[f][s(f)+1], ..$ este maxim din punct de vedere lexicografic. Justificarea este ca vrem sa scapam de acel fiu care ne-ar restrictiona cel mai mult mutarile ulterioare daca nu l-am taia acum. Mai exact, daca la un moment dat ajungem cu $T$-ul egal cu $Tmin[f][s(f)]$ (deoarece am eliminat altii fii si nu pe $f$), vrem ca acest fiu $f$ sa aiba sirul respectiv cat mai mic din punct de vedere lexicografic, pentru a ne restrictiona cat mai putin timpul.

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.