Didaxis
lecție · Informatică

Secvențe și subsecvențe

Prelucrări pe intervale de poziții.

Se face în:
Clasa a X-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

O secvență a unui șir conține elemente de pe poziții consecutive. În [2,4,6], [2,4] este secvență, iar [2,6] nu este. Un subșir păstrează ordinea din șirul inițial, dar poate sări peste poziții; [2,6] este subșir. Pentru a calcula repede suma unei secvențe, folosim sumele parțiale. Dacă valorile sunt 2, 4, 6, sumele parțiale sunt 2, 6, 12, iar suma ultimelor două valori este 12−2=10.

Desen la lecția „Secvențe și subsecvențe”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

O secvență (subsecvență) a unui vector este formată din elemente aflate pe poziții consecutive, de la la , cu ambele capete incluse; are elemente. Un subșir păstrează ordinea elementelor din șirul inițial, dar poate sări peste poziții. Pentru , este secvență și subșir, iar este subșir, dar nu secvență. Pozițiile se numerotează de la 0 sau de la 1, iar convenția se precizează: în exemplele de mai jos indicii pornesc de la 0, dacă nu se spune altfel.

Suma unei secvențe se calculează printr-un ciclu de la la , cu cost proporțional cu lungimea secvenței. Dacă se cer multe sume pe același vector, se construiește o dată vectorul sumelor parțiale (al prefixelor): și pentru indici de la 1. Suma secvenței cu pozițiile de la la (indici de la 1) este , adică o scădere, în timp constant.

Exemplul 1 — suma unei secvențe. În vectorul (indici de la 0) secvența cu și conține elementele 1 și 4, cu suma 5.

#include <iostream>
using namespace std;
int main() {
    int v[] = {3, 1, 4, 2};
    int l = 1, r = 2, suma = 0;
    for (int i = l; i <= r; ++i)
        suma += v[i];
    cout << suma;
    return 0;
}

Se afișează 5. Secvența are elemente. Dacă ciclul ar avea condiția i < r, elementul de pe poziția ar lipsi și suma ar fi 1.

Exemplul 2 — sume parțiale. Pentru , cu indici de la 1, sumele parțiale sunt . Suma pozițiilor 2–3 (elementele 1 și 4) este , iar suma întregului vector este . Fiecare întrebare nouă despre suma unei secvențe costă acum o singură scădere.

int pre[5] = {0};
for (int i = 0; i < 4; ++i)
    pre[i + 1] = pre[i] + v[i];
cout << pre[3] - pre[1] << ' ' << pre[4];

Secvența afișează 5 10. Vectorul pre are cu un element mai mult decât v, iar pre[0] este 0, ca să funcționeze și secvențele care încep de la primul element.

Exemplul 3 — cea mai lungă secvență de elemente egale. În vectorul se numără lungimea secvenței curente: crește când elementul este egal cu cel dinaintea lui și revine la 1 altfel. Lungimile succesive sunt 1, 2, 1, 2, 3, 1, 1, 2, iar maximul lor este 3, pentru secvența . Valoarea 2 apare de 5 ori în vector, dar secvența lor maximă are lungimea 3, pentru că elementul 3 le întrerupe.

int best = 1, cur = 1;
for (int i = 1; i < n; ++i) {
    if (y[i] == y[i - 1]) ++cur; else cur = 1;
    if (cur > best) best = cur;
}

Secvența lasă best = 3. Algoritmul parcurge vectorul o singură dată, deci timpul este proporțional cu .

Exemplul 4 — câte secvențe și câte subșiruri are un vector. Un vector cu elemente are secvențe de lungime 1, de lungime 2 și așa mai departe, până la una de lungime , deci secvențe. Pentru sunt . Subșirurile nevide corespund submulțimilor nevide de poziții, deci sunt . Diferența, 5, reprezintă subșirurile care sar peste cel puțin o poziție: , , , și . Numărul secvențelor crește pătratic, iar cel al subșirurilor exponențial; de aceea un program care ar încerca toate subșirurile unui vector de 40 de elemente nu mai este practic.

Greșeli frecvente

  • Greșit: este o secvență a lui .
    Corect: este subșir; o secvență are poziții consecutive.
  • Greșit: secvența de la la are elemente.
    Corect: are elemente când ambele capete sunt incluse.
  • Greșit: sumele parțiale se recalculează pentru fiecare întrebare.
    Corect: se construiesc o dată, apoi fiecare suma se obține prin diferența a două prefixe.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
  • UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro

Documente consultate

  • Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.