Pagini recente » Cod sursa (job #528047) | Profil VisuianMihai | Profil Raz_Van_Barbascu | Diferente pentru template/userrating intre reviziile 14 si 15 | Diferente pentru arbori-indexati-binar intre reviziile 3 si 7
Nu exista diferente intre titluri.
Diferente intre continut:
h2. Cazul unidimensional
Din modul în care a fost enunţată problema, rezultă că operaţiile efectuate asupra unui tablou unidimensional; aşadar, acesta este cazul unidimensional al problemei. Vom prezenta în continuare trei algoritmi care pot fi folosiţi pentru rezolvarea problemei şi apoi le vom studia performanţele.
Din modul în care a fost enunţată problema, rezultă că operaţiile sunt efectuate asupra unui tablou unidimensional; aşadar, acesta este cazul unidimensional al problemei. Vom prezenta în continuare trei algoritmi care pot fi folosiţi pentru rezolvarea problemei şi apoi le vom studia performanţele.
h3. Algoritmul naiv
Trebuie observat faptul că algoritmul este acelaşi dacă operaţia de însumare este înlocuită cu o alta (calcularea produsului, stabilirea minimului etc.).
h3. Vector de sume
O altă idee este de a menţine un vector $S$ cu semnificaţia $S ~i~ = suma elementelor din subsecventa <1, i>$. Astfel, răspunsul la o întrebare $(x, y)$ va fi $S ~y~ - S ~x-1~$, ce se poate calcula în timp constant. Însă, când se modifică un element $a ~i~$ trebuie modificate toate sumele $S ~i~, S ~i+1~ ... S ~n~$, deci timpul necesar pentru o modificare este liniar proporţional cu lungimea şirului.
Implementarea (scrisă in pseudocod) este aceasta:
== code(cpp) |
// iniţializări
scrie „Introduceţi numărul de elemente:”
citeşte N // dimensiunea şirului
pentru i = 1, N execută
S[i] = 0 // valorile iniţiale sunt nule
sfârşit pentru
scrie „Introduceţi codul operaţiei:”
citeşte cod
cât timp cod <> 3 execută
dacă cod = 1 atunci // modificare
scrie „Introduceţi indicele elementului care va fi modificat:”
citeşte ind
scrie „Introduceţi valoarea care va fi adunată (valoare negativă pentru scăderi):”
citeşte val
pentru i = ind, n execută
S[i] = S[i] + val
sfârşit pentru
altfel // interogare
scrie „Introduceţi extremităţile subsecvenţei:”
citeşte st, dr
scrie „Suma elementelor subsecvenţei este: ”, S[dr] - S[st - 1]
sfârşit dacă
scrie „Introduceţi codul operaţiei:”
citeşte cod
sfârşit cât timp
==
h3. Arbori de intervale
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.