Hneď na začiatku narazíme na dôležitú otázku: Prečo nemôžeme jednoducho zmerať, koľko času program naozaj beží? Prečo potrebujeme "časovú zložitosť"?
Dôvod je jednoduchý: skutočný čas závisí od počítača, na ktorom program spúšťaš. Ten istý program pobeží inak rýchlo na tvojom počítači, starom počítači a na výkonnom serveri.
Naším cieľom je teda nájsť spôsob, ako odhadnúť rýchlosť programu len tak, že sa naň pozrieme, bez toho, aby sme ho museli spúšťať na konkrétnom počítači. Chceme oddeliť rýchlosť samotného algoritmu od rýchlosti konkrétneho zariadenia.
Už vieme, že nechceme merať skutočný čas, pretože ten závisí od mnohých vecí, napríklad od rýchlosti konkrétneho počítača. Preto sa pozrieme na to, ako sa čas behu algoritmu meria v teórii:
$$ T_A(n) = max(t_A(x) \text{pre všetky vstupy} x \text{s veľkosťou} n $$
Skutočný čas vykonávania programu závisí od mnohých vecí, ako je rýchlosť procesora, disku, pamäte alebo vyrovnávacej pamäte (cache). Aby sme sa týmto detailom vyhli a mohli algoritmy analyzovať "čisto", nebudeme merať reálny čas. Namiesto toho budeme počítať elementárne operácie.
Elementárna operácia je taká operácia, ktorej vykonanie trvá vždy približne rovnaký, veľmi krátky čas. Tento čas závisí len od toho, ako je operácia implementovaná (či už priamo v hardvéri, alebo ako základná funkcia v softvéri), a nie od konkrétnych hodnôt, s ktorými operácia pracuje.
Príklady elementárnych operácií:
Príklady NEelementárnych operácií:
Je dôležité si uvedomiť, že mnohé programovacie jazyky ponúkajú funkcie alebo príkazy, ktoré sa na prvý pohľad zdajú jednoduché, ale v skutočnosti nie sú elementárnymi operáciami, pretože za nimi prebieha viac zložitých krokov.