Le temps d'exécution d'un programme peut être mesuré expérimentalement. Sous Unix, la commande time affiche plusieurs estimations de ce temps, en secondes ; par exemple, un programme euclide est exécuté et son temps d'exécution est évalué en soumettant la commande suivante au shell :
unix% time euclide 13.240u 0.870s 0:19.30 73.1% 0+853k 0+16io 0pf+0w
Il est important d'être capable d'évaluer a priori ce temps u, sans devoir exécuter le programme. Si l'on dispose d'information sur la machine, on a l'estimation suivante :
L'usage est de dénombrer certaines instructions significatives : nombre d'opérations arithmétiques dans un algorithme numérique, nombre d'itérations ou d'appels récursifs, nombre de comparaisons dans un algorithme de recherche d'un élément dans une table. Cette évaluation se fait en fonction d'une grandeur caractéristique du problème : valeur d'une donnée, taille d'un tableau, profondeur d'un arbre, etc. Plutôt que de temps d'exécution, on parlera d'une mesure de complexité.
En outre, il s'agit souvent de comparer plusieurs algorithmes entre eux, indépendamment des machines auxquelles ils sont destinés. On s'intéresse donc surtout à l'ordre de grandeur d'une mesure de complexité, c'est-à-dire à des estimations asymptotiques. On rencontrera notamment des algorithmes linéaires quand la complexité est en , logarithmiques, en , quadratiques, en , etc. Rappelons que est l'ensemble des fonctions pour lesquelles il existe des entiers , et positifs tels que pour tout .