Starea sistemului — fotografia de la un moment dat

Mediu~15 min6 pași

De ce contează?

Pui un film pe pauză. Cadrul înghețat de pe ecran îți arată tot ce se întâmplă chiar acum: unde e fiecare personaj, ce ține în mână. Din acel cadru poți ghici ce urmează, fără să derulezi tot filmul de la început. Acel cadru e „starea” sistemului.

Ce este starea

Starea unui sistem e toată informația care îl descrie complet la un moment dat — fotografia lui. Dacă ai starea curentă, poți calcula ce se întâmplă în pasul următor fără să te uiți în trecut.

Observația-cheie

Proprietatea cheie: o stare bună e suficientă pentru viitor. Dacă din starea curentă poți deduce starea următoare, nu mai ai nevoie de istoric — ții minte o singură fotografie, nu tot filmul.

Starea = reprezentarea, la un moment dat

Reprezentarea (lecția trecută) e cum stochezi sistemul. Starea e valoarea concretă a acelei reprezentări acum. Pe măsură ce simularea avansează, starea se schimbă, dar structura rămâne aceeași.

Exemplu: un robot pe o linie de 6 căsuțe. Starea = poziția lui.

linie
.
.
R
.
.
.
0
1
2
3
4
5
R
Stare la momentul t: robotul e pe căsuța 2
linie
.
.
.
R
.
.
0
1
2
3
4
5
R
Stare la momentul t+1: după un pas la dreapta, robotul e pe 3

Aici starea e doar un număr: poziția. Dar dacă mișcările ar depinde de direcția robotului, starea ar trebui să includă și direcția.

Ce intră în stare?

Întrebarea decisivă: „de ce informație am nevoie ca să calculez pasul următor?”. Tot ce influențează viitorul intră în stare; restul nu.

SistemStarea minimă
Robot pe linie (doar stânga/dreapta)poziția
Robot care se roteștepoziția și direcția
Parcajcare locuri sunt ocupate
Șir de becurivectorul de 0/1

Implementare C++ — o stare care evoluează

#include <iostream>
using namespace std;

int main() {
    int n = 6;
    int pozRobot = 2; // STAREA: pozitia robotului pe linie

    // un pas la dreapta = trecem la starea urmatoare
    if (pozRobot + 1 < n)
        pozRobot = pozRobot + 1; // noua stare depinde doar de starea veche

    cout << "Pozitia robotului: " << pozRobot << "\n"; // 3
    return 0;
}

Noua stare (pozRobot după pas) se calculează doar din starea veche — exact proprietatea care face simularea simplă.

Complexitate

AspectCost
Memorie pentru o stareO(mărimea reprezentării)
Trecerea la starea următoaredepinde de eveniment (vezi lecția următoare)
Greșeli frecvente

Greșeli frecvente de concurs:

  • Stare incompletă. Dacă lași pe dinafară ceva ce influențează viitorul (ex. direcția robotului), nu mai poți calcula corect pasul următor.
  • Stare umflată cu istoric. Nu păstra toți pașii anteriori dacă pasul următor depinde doar de cel curent. Reții o fotografie, nu tot filmul.
  • Confunzi starea cu rezultatul final. Starea se schimbă la fiecare pas; răspunsul problemei e adesea o valoare derivată din starea finală (sau acumulată pe drum).
  • Modifici starea fără s-o actualizezi peste tot. Dacă starea are mai multe componente (poziție + direcție), un pas trebuie să le actualizeze pe toate cele afectate.

Recapitulare

  • Starea = fotografia completă a sistemului acum; din ea poți calcula viitorul, fără istoric.
  • Pune în stare exact ce influențează pasul următor (poziție, direcție, ocupări) — nimic în plus.
  • Simularea = o succesiune de stări, fiecare calculată din cea precedentă.

Întrebarea 1 / 3

Ce este „starea” unui sistem la un moment dat?