¿Qué significa T (n) en relación con O (n)?

Cuando se discute un algoritmo, el uso común del símbolo [math] T [/ math] es representar su complejidad temporal.

[matemáticas] T [/ matemáticas] es una función . La entrada a esta función es el tamaño de entrada , la salida es el tiempo de ejecución (en el peor de los casos) para una entrada de ese tamaño.

Por lo tanto, [math] T (n) [/ math] es un número : el número devuelto por la función [math] T [/ math] cuando se le da el número [math] n [/ math]. Este número es el tiempo de ejecución de nuestro algoritmo en una entrada de tamaño [math] n [/ math].

La [matemática] O [/ matemática] en “[matemática] O (n) [/ matemática]” no es una función . Esta es la notación Big O. En particular, el símbolo [math] O (n) [/ math] representa la clase de todas las funciones que crecen (asintóticamente) como máximo tan rápidamente como la función lineal [math] f (n) = n [/ math].

La notación Big O nos brinda una forma conveniente de hablar sobre los límites superiores. Por ejemplo, podemos decir “la complejidad temporal de este algoritmo es [matemática] O (n ^ 2) [/ matemática]” (formalmente: “[matemática] T \ en O (n ^ 2) [/ matemática]”) decir que el tiempo de ejecución del algoritmo es como máximo cuadrático en el tamaño de entrada.

A veces, puede ver que ambos símbolos se usan en una sola ecuación. Por ejemplo, la complejidad temporal de MergeSort se describe comúnmente por la siguiente recurrencia: “[matemáticas] T (n) = 2T (n / 2) + O (n) [/ matemáticas]”.

El significado de la declaración anterior: para cualquier [matemática] n [/ matemática], el tiempo [matemático] T (n) [/ matemático] necesario para ordenar los elementos [matemáticos] n [/ matemático] puede calcularse tomando el tiempo [math] T (n / 2) [/ math] necesitaba clasificar los elementos [math] n / 2 [/ math], multiplicando ese tiempo por 2 y agregando algo extra. Ese algo extra debe ser como máximo lineal en [math] n [/ math].

O (n) significa “cuánto”, más precisamente “para todos los n que son lo suficientemente grandes, como máximo c * n, para algunos c fijos”.

T (n) es una denotación estándar para el tiempo, más precisamente “tiempo máximo que el programa puede ejecutar para cualquier entrada de tamaño n”.

T (n) = O (n) significa “para todas las n que son lo suficientemente grandes, para cualquier entrada de tamaño n, el programa puede ejecutarse en la mayoría de las veces c * n, por alguna constante fija c”.

Además del tiempo, también puede analizar la memoria necesaria para ejecutar el programa. Se denota por M (n).