Pagini recente » Sandbox | Autentificare | probleme-de-acoperire | Diferente pentru siruri-de-sufixe intre reviziile 56 si 55 | Diferente pentru arbori-indexati-binar intre reviziile 4 si 3
Nu exista diferente intre titluri.
Diferente intre continut:
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
==
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.