Treci la conținutul principal

Un singur pas, orice dimensiune

O(1) înseamnă timp constant: operația face același număr de pași fie că intrarea are 5 elemente, fie un milion. Munca nu crește deloc.

Aceasta este cea mai bună complexitate care există. Operațiile O(1) tipice în Go sunt: citirea unui element dintr-un slice după index, citirea unei valori dintr-un map după cheie, len(), adăugarea unui singur element și calculele matematice simple.

Observă ce nu înseamnă O(1): nu înseamnă „rapid”, înseamnă „nu devine mai lent când crește intrarea”. Un singur pas constant poate fi în continuare un pas lent — dar rămâne un singur pas.


Căutări în slice și în map

Un element de slice se află la o poziție cunoscută în memorie, așa că words[2] este un singur salt — calculatorul nu parcurge elementele dinaintea lui. Aceeași citire costă la fel într-un slice cu un milion de elemente.

O căutare în map precum ages["Ben"] durează, în medie, tot timp constant: cheia îi spune map-ului direct unde este stocată valoarea. Căutarea returnează value, ok, iar ok este false când cheia lipsește.

Citirea unui element după index

Programul citește un element dintr-un slice cu 5 elemente și un element dintr-un slice cu un milion de elemente. Ambele citiri sunt un singur pas — lungimea slice-ului nu joacă niciun rol.

Prompt
Scrie un program Go cu un slice mic de 5 cuvinte și un slice mare de un milion de întregi, construit cu make și o buclă. Citește după index câte un element din fiecare și afișează-le pe amândouă, ca să arăți că citirea după index este un singur pas, indiferent cât de lung este slice-ul.
Ieșire: program Go și rezultatul capturat
Read an element by index

Citirea unei valori după cheie

ages["Ben"] găsește direct 25. Cheia lipsă "Dan" returnează valoarea zero 0 și ok == false — tot în timp constant.

Prompt
Scrie un program Go cu un map de la nume la vârste care conține Ana 30, Ben 25 și Cleo 41. Caută Ben și afișează valoarea și indicatorul ok. Apoi caută cheia lipsă Dan și afișează valoarea și indicatorul ok.
Ieșire: program Go și rezultatul capturat
Read a value by key

Adăugarea și calculele simple

append() adaugă un element la sfârșitul unui slice. De cele mai multe ori acesta este un singur pas. (Din când în când slice-ul trebuie să crească și este copiat, dar, la medie, costul unui append rămâne constant.)

Toate operațiile mici — atribuiri, adunări, comparații, interschimbarea a două valori — sunt și ele O(1). Ele sunt „pașii” în care se numără toate celelalte clase de complexitate.

Adăugarea unui element

append() pune "galben" la sfârșit. Costul nu depinde de câte culori sunt deja în slice.

Prompt
Scrie un program Go cu un slice care conține roșu, verde, albastru. Afișează slice-ul și lungimea lui, adaugă galben, apoi afișează din nou slice-ul și lungimea lui.
Ieșire: program Go și rezultatul capturat
Append one element

Interschimbarea a două valori

a, b = b, a interschimbă cele două valori într-un singur pas cu timp constant — fără să fie nevoie de o variabilă ajutătoare.

Prompt
Scrie un program Go cu două variabile a = 1 și b = 2. Afișează-le, interschimbă-le cu atribuirea cu două valori a, b = b, a și afișează-le din nou.
Ieșire: program Go și rezultatul capturat
Swap two values