La complejidad algebraica es una rama de la teoría de la complejidad computacional que trata con polinomios. Fue creado principalmente gracias al trabajo de F. Strassen [1] [2] [3] .
La complejidad algebraica de un polinomio , que se denota por , es la longitud del programa no ramificado más corto que calcula [4] . Un programa sin ramificación es una secuencia de funciones definida de la siguiente manera:
, … , …donde y son polinomios de primer grado. La longitud de un programa sin ramificación es el número de términos en la secuencia . Un programa de longitud que no se ramifica calcula un polinomio si .
Considere la operación de multiplicar una matriz cuadrada con elementos constantes: por un vector .
La complejidad aditiva de una matriz cuadrada es la longitud de la secuencia más corta de funciones que calculan el producto de un vector y una fila de la tabla y se definen de la siguiente manera: , ..., , ... donde , y son constantes.
La clase VP es el conjunto de todas las familias de polinomios para los que . Por ejemplo, el problema de calcular el determinante de una matriz pertenece a la clase VP. La clase de complejidad computacional VP es un análogo algebraico de la clase P de la teoría de la complejidad computacional [6] .
Una clase VNP incluye una familia de polinomios si tiene una familia de polinomios de la clase VP tal que . La suma se realiza sobre todos los vectores de ceros y unidades de longitud , y es igual al valor de la coordenada -ésima del vector e. Por ejemplo, el problema de calcular el permanente de una matriz pertenece a la clase VNP. La clase de complejidad computacional VNP es un análogo algebraico de la clase NP de la teoría de la complejidad computacional.