fbpx
Wikipedia

Complejidad temporal

En informática, la complejidad temporal es la complejidad computacional que describe la cantidad de tiempo que lleva ejecutar un algoritmo. La complejidad temporal se estima comúnmente contando el número de operaciones elementales realizadas por el algoritmo, suponiendo que cada operación elemental requiere una cantidad fija de tiempo. Por lo tanto, la cantidad de tiempo necesario y el número de operaciones elementales realizadas por el algoritmo difieren en un factor constante como máximo.

Gráficos de funciones comúnmente utilizadas en el análisis de algoritmos, que muestran el número de operaciones N versus el tamaño de entrada n para cada función

Dado que el tiempo de ejecución de un algoritmo puede variar entre diferentes entradas del mismo tamaño, comúnmente se considera la complejidad temporal del peor caso, que es la cantidad máxima de tiempo requerida para las entradas de un tamaño determinado. Menos común, y usualmente especificado explícitamente, es la complejidad del caso promedio, que es el promedio del tiempo necesario para las entradas de un tamaño dado (esto tiene sentido porque solo hay un número finito de entradas posibles de un tamaño dado). En ambos casos, la complejidad temporal generalmente se expresa como una función del tamaño de la entrada.[1]​ Dado que esta función es generalmente difícil de calcular exactamente, y el tiempo de ejecución para entradas pequeñas generalmente no es consecuente, uno comúnmente se enfoca en el comportamiento de la complejidad cuando aumenta el tamaño de entrada, es decir, el comportamiento asintótico de la complejidad. Por lo tanto, la complejidad temporal se expresa comúnmente usando la notación O grande, típicamente etc., donde n es el tamaño de entrada en unidades de bits necesarios para representar la entrada.

Las complejidades algorítmicas se clasifican según el tipo de función que aparece en la notación O grande. Por ejemplo, un algoritmo con complejidad temporal es un algoritmo de tiempo lineal y un algoritmo con complejidad de tiempo por alguna constante es un algoritmo de tiempo polinómico .

Tabla de complejidades temporales comunes

La siguiente tabla resume algunas clases de complejidades de tiempo comúnmente encontradas. En la tabla, poly(x) = xO(1), es decir, polinomial en x .

Nombre Clase de complejidad Tiempo de ejecución (T(n)) Ejemplos de tiempo de ejecución Algoritmos de ejemplo
Tiempo constante O(1) 10 Encontrar la mediana en un array ordenado de números.
Tiempo inverso de la función de Ackermann O(α(n)) Tiempo amortizado por operación usando un conjunto disjunto
Tiempo de

logaritmo iterado

O(log*n) Coloración distribuida de grafos
Log-logaritmico O(log log n) Tiempo amortizado por operación usando una cola de prioridades[2]​ acotada.
Tiempo logarítimico DLOGTIME O(log n) log n, log(n2) Búsqueda binaria
Tiempo polilogarítmico poly(log n) (log n)2
Poder fraccional O(nc) donde 0 < c < 1 n1/2, n2/3 Buscando en un árbol kd
Tiempo lineal O(n) n, 2n + 5 Encontrar el item más grande o más pequeño en un array desordenado. Kadane's algorithm
Tiempo "n log-estrella n" O(n log* n) Algoritmo de triangulación de polígonos de Seidel
Tiempo linealitmico O(n log n) n log n, log n! El ordenamiento por comparación más rápido posible; Transformada rápida de Fourier
Tiempo cuasilineal n poly(log n)
Tiempo cuadrático O(n2) n2 Bubble sort; Insertion sort; Convolución directa
Tiempo cúbico O(n3) n3 Multiplicación ingenua de dos matrices de n×n. Cálculo decorrelación parcial.
Tiempo polinómico P 2O(log n) = poly(n) n2 + n, n10 Algoritmo de Karmarkar para programación lineal; Test de primalidad AKS[3][4]
Tiempo cuasipolinomial QP 2poly(log n) nlog log n, nlog n O(log2 n), mejoralgoritmo conocido de aproximación para el el problema del árbol de Steiner directo
Tiempo sub-exponencial

(primera definición)
SUBEXP O(2nε) para todo ε > 0 O(2log nlog log n)
Tiempo sub-exponencial

(segunda definición)
2o(n) 2n1/3 Mejor algoritmo conocido para for factorización de enteros; anteriormente el mejor algoritmo para el problema del isomorfismo de grafos
Tiempo exponencial
(con exponente lineal)
E 2O(n) 1.1n, 10n Resolución del problema del viajante usando programación dinámica
Tiempo exponencial EXPTIME 2poly(n) 2n, 2n2 Resolución de multiplicación de matrices encadenadas via brute-force search
Tiempo factorial O(n!) n! Resolviendo el problema del viajero usando búsqueda de fuerza bruta
Tiempo exponencial doble 2-EXPTIME 22poly(n) 22n Deciding the truth of a given statement in Aritmética de Presburguer

Tiempo constante

Se dice que un algoritmo es tiempo constante (también escrito como tiempo O(1)) si el valor de T(n) está limitado por un valor que no depende del tamaño de la entrada. Por ejemplo, acceder a cualquier elemento individual en una matriz requiere tiempo constante, ya que solo se debe realizar una operación para localizarlo. De manera similar, encontrar el valor mínimo en una matriz ordenada en orden ascendente también es una operación de tiempo constante ya que el resultado es siempre el primer elemento. Sin embargo, encontrar el valor mínimo en una matriz desordenada no es una operación de tiempo constante ya que es necesario escanear cada elemento de la matriz para determinar el valor mínimo. Por lo tanto, este caso es una operación de tiempo lineal, que toma tiempo O(n). Sin embargo, si el número de elementos se conoce de antemano y no cambia aún se puede decir que dicho algoritmo se ejecuta en tiempo constante.

A pesar del nombre "tiempo constante", el tiempo de ejecución no tiene que ser independiente del tamaño del problema, pero un límite superior para el tiempo de ejecución tiene que estar limitado independientemente del tamaño del problema. Por ejemplo, la tarea "intercambia los valores de a y b si es necesario para que ab " se llama de tiempo constante aunque el tiempo pueda depender de si ya es cierto o no que ab . Sin embargo, hay una constante t tal que el tiempo requerido es siempre como máximo t .

Estos son algunos ejemplos de fragmentos de código que se ejecutan en tiempo constante.  :

int index = 5; int item = lista[index]; if (condición verdadera) then realizar alguna operación que se ejecuta en tiempo constante else realizar alguna otra operación que se ejecute en tiempo constante for i=1 to 100 for j=1 to 200 realizar alguna operación que se ejecuta en tiempo constante 

Si T(n) es O(cualquier valor constante) se indica en notación estándar como T(n) siendo O(1).

Tiempo logarítmico

Se dice que un algoritmo toma tiempo logarítmico cuando T(n) = O(log n) . Dado que log a n y log b n están relacionados por un multiplicador constante, y dicho multiplicador es irrelevante para la clasificación big-O, el uso estándar para algoritmos de tiempo logarítmico es O(log n ) independientemente de la base del logaritmo que aparece en la expresión de T.

Los algoritmos que toman tiempo logarítmico se encuentran comúnmente en operaciones con árboles binarios o cuando se usa la búsqueda binaria.

Un algoritmo O(log n) se considera altamente eficiente, ya que la relación entre el número de operaciones y el tamaño de la entrada disminuye y tiende a cero cuando aumenta n. Un algoritmo que debe acceder a todos los elementos de su entrada no puede tomar tiempo logarítmico ya que el tiempo necesario para leer una entrada de tamaño n es del orden de n .

Un ejemplo de tiempo logarítmico es la búsqueda dentro de un diccionario. Considere un diccionario D que contiene n entradas, ordenadas por orden alfabético. Suponemos que, para 1 ≤ kn, uno puede acceder a la entrada k del diccionario en un tiempo constante. Usemos D(k) para denotar la k-ésima entrada. Bajo estas hipótesis, la prueba de si una palabra w está en el diccionario se puede hacer en tiempo logarítmico: considere   dónde   denota la función de piso . Si   entonces hemos terminado. Si no   continuamos la búsqueda de la misma manera en la mitad izquierda del diccionario, de lo contrario continuamos de manera similar con la mitad derecha del diccionario. Este algoritmo es similar al método utilizado a menudo para encontrar una entrada en un diccionario de papel.

Tiempo poli-logarítmico

Se dice que un algoritmo se ejecuta en tiempo poli-logarítmico si T(n) = O ((log n )k ), para alguna constante k. Por ejemplo, el orden de una matriz de cadena se puede resolver en tiempo poli-logarítmico en una máquina paralela de acceso aleatorio. [5]

Tiempo sub-lineal

Se dice que un algoritmo se ejecuta en tiempo sub-lineal si T(n)=o(n). En particular, esto incluye algoritmos con las complejidades de tiempo definidas anteriormente.

Los algoritmos típicos que son exactos y, sin embargo, se ejecutan en tiempo sub-lineal usan el procesamiento paralelo (como lo hace el cálculo del determinante de una matriz NC1), o alternativamente tienen suposiciones garantizadas en la estructura de entrada (como lo hacen la búsqueda binaria de tiempo logarítmico y muchos algoritmos de mantenimiento de árboles). Sin embargo, los lenguajes formales, como el conjunto de todas las cadenas que tienen un bit en la posición indicada por los primeros log (n) bits de la cadena pueden depender de cada bit de la entrada y, sin embargo, ser computables en tiempo sub-lineal.

El término específico algoritmo de tiempo sublineal generalmente se reserva a algoritmos que son diferentes a los anteriores en el sentido de que se ejecutan sobre modelos de máquinas seriales clásicas y donde no se permiten suposiciones previas en la entrada. [6]​ Sin embargo, se les permite ser aleatorizados, y de hecho deben ser aleatorizados para todas las tareas excepto las más triviales.

Como tal, un algoritmo debe proporcionar una respuesta sin leer toda la entrada, sus detalles dependen en gran medida del acceso permitido a la entrada. Por lo general, para una entrada que se representa como una cadena binaria b1,..., bk se supone que el algoritmo puede solicitar y obtener el valor de bi para cualquier i en tiempo O(1).

Los algoritmos de tiempo sub-lineal suelen ser aleatorios y solo proporcionan soluciones aproximadas. De hecho, la propiedad de una cadena binaria que solo tiene ceros puede demostrarse fácilmente que no puede ser decidida por un algoritmo de tiempo sub-lineal (no aproximado). Los algoritmos de tiempo sub-lineales surgen naturalmente en la investigación de property testing .

Tiempo lineal

Se dice que un algoritmo toma tiempo lineal, o tiempo O(n), si su complejidad temporal es O(n). Informalmente, esto significa que el tiempo de ejecución aumenta como máximo linealmente con el tamaño de la entrada. Más precisamente, esto significa que hay una constante c tal que el tiempo de ejecución es como máximo cn para cada entrada de tamaño n . Por ejemplo, un procedimiento que suma todos los elementos de una lista requiere un tiempo proporcional a la longitud de la lista, si el tiempo de adición es constante o, al menos, está limitado por una constante.

El tiempo lineal es la mejor complejidad de tiempo posible en situaciones en las que un algoritmo tiene que leer secuencialmente toda su entrada. Por lo tanto, se ha invertido mucha investigación en descubrir algoritmos que exhiben tiempo lineal o, al menos, tiempo casi lineal. Esta investigación incluye métodos de software y hardware. Hay varias tecnologías de hardware que explotan el paralelismo para proporcionar esto. Un ejemplo es la memoria direccionable por contenido . Este concepto de tiempo lineal se utiliza en algoritmos de coincidencia de cadenas como el algoritmo de Boyer-Moore y el algoritmo de Ukkonen .

Tiempo cuasilineal

Se dice que un algoritmo se ejecuta en tiempo cuasilineal (también denominado tiempo log-lineal) si T (n)=O(n log k n) para alguna constante positiva k;[7]​ el caso de k=1 se llama tiempo linealitmico.[8]​ Usando la notación O suave, estos algoritmos son Õ(n). Los algoritmos de tiempo cuasilineal también son O(n1+ε) para cada constante ε> 0, y por lo tanto se ejecutan más rápido que cualquier algoritmo de tiempo polinómico cuyo límite de tiempo incluye un término nc para cualquier c>1)

Los algoritmos que se ejecutan en tiempo cuasilineal incluyen:

  • Merge sort in-place, O(n log2 n)
  • Quicksort, O(n log n), en su versión aleatoria, tiene un tiempo de ejecución que es O(n log n) en espera de la entrada del peor de los casos. Su versión no aleatoria tiene un tiempo de ejecución O(n log n) solo cuando se considera la complejidad promedio de los casos.
  • Heapsort, O(n log n), merge sort, introsort, binary tree sort, smoothsort, patience sorting, etc. en el peor de los casos
  • Transformadas rápidas de Fourier, O (n log n)
  • Cálculo de matriz Monge, O (n log n)

En muchos casos, el tiempo de ejecución n log n es simplemente el resultado de realizar una operación Θ (log n) n veces. Por ejemplo, el ordenamiento de un árboles binario crea un árbol binario insertando uno por uno los elementos de la matriz de tamaño n. Dado que la operación de inserción en un árbol de búsqueda binaria auto-balanceado toma tiempo O(log n ), todo el algoritmo toma tiempo O (n log n).

El ordenamiento por comparación requiere al menos Ω(n log n) comparaciones en el peor de los casos porque log (n!) = Θ(n log n), por aproximación de Stirling. Esto tiempos también surgen con frecuencia de la relación de recurrencia T(n) = 2T(n/2) + O (n).

Tiempo sub-cuadrático

Se dice que un algoritmo es de tiempo subcuadrático si T (n) = O(n2).

Por ejemplo, los algoritmos de ordenamiento simples basados en la comparación son cuadráticos (por ejemplo, ordenamiento por inserción) pero se pueden encontrar algoritmos más avanzados que son subcuadráticos (por ejemplo, ordenamiento shell). Ningún algoritmo de ordenamiento de propósito general se ejecuta en tiempo lineal pero la reducción de un tiempo cuadrático a uno subcuadrático es de gran importancia práctica.

Tiempo polinomial

Se dice que un algoritmo es de tiempo polinómico si su tiempo de ejecución está limitado por una expresión polinómica en el tamaño de la entrada para el algoritmo, es decir, T (n) = O(nk) para alguna constante positiva k.[1][9]Los problemas para los que existe un algoritmo de tiempo polinómico determinista pertenecen a la clase de complejidad P, que es central en el campo de la teoría de la complejidad computacional. La tesis de Cobham establece que el tiempo polinomial es sinónimo de "manejable", "factible", "eficiente" o "rápido".[10]

Algunos ejemplos de algoritmos de tiempo polinomiales:

  • El ordenamiento por selección, para n enteros realiza   operaciones para alguna constante A. Por lo tanto, corre en el tiempo   y es un algoritmo de tiempo polinómico.
  • Todas las operaciones aritméticas básicas (suma, resta, multiplicación, división y comparación) se pueden realizar en tiempo polinómico.
  • Las coincidencias máximas en los grafos se pueden encontrar en el tiempo polinómico.

Tiempo polinomial fuerte y débil

En algunos contextos, especialmente en la optimización, uno diferencia entre el tiempo fuertemente polinomial y los algoritmos de tiempo débilmente polinomial . Estos dos conceptos solo son relevantes si las entradas a los algoritmos consisten en enteros.

El tiempo fuertemente polinómico se define en el modelo aritmético de computación. En este modelo de computación, las operaciones aritméticas básicas (suma, resta, multiplicación, división y comparación) toman un paso de unidad de tiempo para realizar, independientemente de los tamaños de los operandos. El algoritmo se ejecuta en tiempo fuertemente polinómico si: [11]

  1. El número de operaciones en el modelo aritmético de computación está limitado por un polinomio en el número de enteros en la instancia de entrada; y
  2. El espacio utilizado por el algoritmo está limitado por un polinomio en el tamaño de la entrada.

Cualquier algoritmo con estas dos propiedades se puede convertir en un algoritmo de tiempo polinómico reemplazando las operaciones aritméticas por algoritmos adecuados para realizar las operaciones aritméticas en una máquina de Turing . Si el segundo de los requisitos anteriores no se cumple, entonces esto ya no es cierto. Dado el entero   (que ocupa un espacio proporcional a n en el modelo de máquina de Turing), es posible calcular   con n multiplicaciones usando exponenciación binaria. Sin embargo, el espacio utilizado para representar   es proporcional a   y, por lo tanto, exponencial en lugar de polinomico en el espacio utilizado para representar la entrada. Por lo tanto, no es posible llevar a cabo este cálculo en tiempo polinómico en una máquina de Turing pero es posible calcularlo polinómicamente con muchas operaciones aritméticas.

Por el contrario, existen algoritmos que se ejecutan en varios pasos de la máquina de Turing delimitados por un polinomio en la longitud de la entrada codificada en binario pero no toman una serie de operaciones aritméticas delimitadas por un polinomio en el número de números de entrada. El algoritmo euclidiano para calcular el máximo divisor común de dos enteros es un ejemplo. Dados dos enteros   y  , el algoritmo realiza   operaciones aritméticas en números con como máximo   bits. Al mismo tiempo, el número de operaciones aritméticas no puede estar limitado por el número de enteros en la entrada (que es constante en este caso, siempre hay solo dos enteros en la entrada). Debido a la última observación, el algoritmo no se ejecuta en un tiempo fuertemente polinómico. Su tiempo real de ejecución depende de las magnitudes de   y   y no solo en el número de enteros en la entrada.

Se dice que un algoritmo que se ejecuta en tiempo polinomial pero que no es fuertemente polinomial se ejecuta en tiempo polinomial débil.[12]​ Un ejemplo bien conocido de un problema para el que se conoce un algoritmo de tiempo polinomial débil, pero no se sabe que admita un algoritmo de tiempo polinomial fuerte, es la programación lineal. El tiempo débilmente polinomial no debe confundirse con el tiempo pseudopolinómico.

Clases de complejidad

El concepto de tiempo polinomial conduce a varias clases de complejidad en la teoría de la complejidad computacional. Algunas clases importantes definidas usando el tiempo polinomial son las siguientes.

P La clase de complejidad de los problemas de decisión que se pueden resolver en una máquina de Turing determinista en tiempo polinómico
NP La clase de complejidad de los problemas de decisión que se pueden resolver en una máquina de Turing no determinista en tiempo polinómico
ZPP La clase de complejidad de los problemas de decisión que se pueden resolver con cero errores en una máquina de Turing probabilística en tiempo polinómico
RP La clase de complejidad de los problemas de decisión que se pueden resolver con un error unilateral en una máquina de Turing probabilística en tiempo polinómico.
BPP La clase de complejidad de los problemas de decisión que se pueden resolver con un error de 2 lados en una máquina de Turing probabilística en tiempo polinómico
BQP La clase de complejidad de los problemas de decisión que se pueden resolver con un error de 2 lados en una máquina cuántica de Turing en tiempo polinómico

P es la clase de complejidad temporal más pequeña en una máquina determinista que es robusta en términos de cambios en el modelo de máquina. (Por ejemplo, un cambio de una máquina de Turing de una sola cinta a una máquina de varias cintas puede conducir a una aceleración cuadrática pero cualquier algoritmo que se ejecute en tiempo polinómico en un modelo también lo hace en el otro). Cualquier máquina abstracta tendrá una clase de complejidad correspondiente a los problemas que se pueden resolver en tiempo polinómico en esa máquina.

Tiempo superpolinomial

Se dice que un algoritmo toma tiempo superpolinomial si T (n) no está limitado por ningún polinomio. Usando una notación omega chica, es el tiempo ω(nc) para todas las constantes c, donde n es el parámetro de entrada, típicamente el número de bits en la entrada.

Por ejemplo, un algoritmo que se ejecuta durante 2n pasos en una entrada de tamaño n requiere tiempo superpolinomial (más específicamente, tiempo exponencial).

Un algoritmo que utiliza recursos exponenciales es claramente superpolinomial, pero algunos algoritmos son muy débilmente superpolinomiales. Por ejemplo, la prueba de primalidad Adleman – Pomerance – Rumely se ejecuta durante nO(log log n) en entradas de n bits; esto crece más rápido que cualquier polinomio para una n lo suficientemente grande pero el tamaño de entrada debe hacerse tan grande como para volverse impráctico si se quiere evitar ser dominado por un polinomio de pequeño grado.

Un algoritmo que requiere tiempo superpolinomial se encuentra fuera de la clase de complejidad P. La tesis de Cobham postula que estos algoritmos no son prácticos. Dado que el problema P versus NP no está resuelto, actualmente no se sabe de un algoritmo para un problema NP completo que se ejecute en tiempo polinómico.

Tiempo cuasi polinomial

Los algoritmos de tiempo cuasi polinomiales son algoritmos que funcionan más lentamente que aquellos de tiempo polinómico pero no tan lentos como para ser de tiempo exponencial. El peor tiempo de ejecución de un algoritmo de tiempo cuasi polinomial es   para una constante  . Para   obtenemos un algoritmo de tiempo polinómico, para   obtenemos un algoritmo de tiempo sub-lineal.

Los algoritmos de tiempo cuasi polinomiales generalmente surgen en reducciones de un problema NP-hard a otro problema. Por ejemplo, uno puede tomar una instancia de un problema NP-hard, digamos 3SAT, y convertirlo en una instancia de otro problema B, pero el tamaño de la instancia se convierte en  . En ese caso, esta reducción no prueba que el problema B sea NP-hard; esta reducción solo muestra que no existe un algoritmo de tiempo polinómico para B a menos que exista un algoritmo de tiempo cuasi polinómico para 3SAT (y, por lo tanto, todo NP). De manera similar, existen algunos problemas para los cuales conocemos algoritmos de tiempo cuasi-polinomiales pero no de tiempo polinomial. Tales problemas surgen en los algoritmos de aproximación; Un ejemplo famoso es el problema del árbol Steiner dirigido, para el cual existe un algoritmo de aproximación de tiempo cuasi polinomial que logra un factor de aproximación de   (n es el número de vértices), pero la demostración de la existencia de dicho algoritmo de tiempo polinomial es un problema abierto.

Otros problemas computacionales con soluciones de tiempo cuasi-polinomiales pero ninguna solución de tiempo polinomial conocida incluye el problema de planted cliques en el que el objetivo es encontrar un clique mayor en la unión de una clique y un grafo aleatorio. Aunque cuasi-polinomialmente solucionable, se ha conjeturado que el problema de planted cliques no tiene una solución de tiempo polinomial; Esta conjetura se ha utilizado como un supuesto de dureza computacional para demostrar la dificultad de varios otros problemas en la teoría de juegos computacionales, property testing y el aprendizaje automático.[13]

La clase de complejidad QP consiste en todos los problemas que tienen algoritmos de tiempo cuasi-polinomiales. Se puede definir en términos de DTIME de la siguiente manera: [14]

 

Relación con problemas NP-completos

En teoría de la complejidad, el problema de P versus NP sin resolver pregunta si todos los problemas en NP tienen algoritmos de tiempo polinomial. Todos los algoritmos más conocidos para problemas NP-completos como 3SAT, etc. toman tiempo exponencial. De hecho, se conjetura para muchos problemas naturales completos de NP que no tienen algoritmos de tiempo sub-exponenciales. Aquí "tiempo sub-exponencial" se entiende como la segunda definición presentada a continuación. (Por otro lado, muchos problemas de grafos representados de forma natural por matrices de adyacencia se pueden resolver en tiempo subexponencial simplemente porque el tamaño de la entrada es el cuadrado del número de vértices.) Esta conjetura (para el problema k-SAT) se conoce como la hipótesis del tiempo exponencial.[15]​ Dado que se conjetura que los problemas NP-completos no tienen algoritmos de tiempo cuasi-polinomiales, algunos resultados de inaplicabilidad en el campo de los algoritmos de aproximación suponen que los problemas NP-completos no tienen algoritmos de tiempo cuasi-polinomiales. Por ejemplo, vea los resultados de inaplicabilidad conocidos para el problema de la cobertura de conjuntos.

Tiempo sub-exponencial

El término tiempo sub-exponencial se usa para expresar que el tiempo de ejecución de algún algoritmo puede crecer más rápido que cualquier polinomio pero aún es significativamente más pequeño que un exponencial. En este sentido, los problemas que tienen algoritmos de tiempo sub-exponenciales son algo más manejables que aquellos que solo tienen algoritmos exponenciales. Generalmente no hay consenso respecto a la definición precisa de "sub-exponencial", [16]​ enumeramos las dos más utilizados a continuación:

Primera definición

Se dice que un problema puede resolverse con un tiempo sub-exponencial si se puede resolver en tiempos de ejecución cuyos logaritmos crecen más lentamente que cualquier polinomio dado. Más precisamente, un problema toma un tiempo sub-exponencial si por cada ε>0 existe un algoritmo que resuelve el problema en el tiempo O (2nε). El conjunto de todos estos problemas es la clase de complejidad SUBEXP que se puede definir en términos de DTIME de la siguiente manera: [17][18][19][20]

 

Esta noción de sub-exponencial no es uniforme en términos de ε en el sentido de que ε no es parte de la entrada y cada ε puede tener su propio algoritmo para el problema.

Segunda definición

Algunos autores definen el tiempo sub-exponencial como tiempos de ejecución en 2o(n). [15][21][22]​ Esta definición permite tiempos de ejecución mayores que la primera definición de tiempo sub-exponencial. Un ejemplo de dicho algoritmo de tiempo sub-exponencial es el algoritmo clásico más conocido para la factorización de enteros, la criba general del cuerpo de números , que se ejecuta en un tiempo de  , donde n es la longitud de la entrada. Otro ejemplo es el problema del isomorfismo de grafos, donde el algoritmo de Luks se ejecuta a tiempo   . (En 2015–2017, Babai redujo la complejidad de este problema al tiempo cuasi polinomial.)

Si el algoritmo puede ser sub-exponencial en el tamaño de la instancia, el número de vértices o el número de aristas, eso hace una diferencia. En la complejidad parametrizada, esta diferencia se hace explícita considerando pares   de problemas de decisión y parámetros k. SUBEPT es la clase de todos los problemas parametrizados que se ejecutan en tiempo sub-exponencial en k y en tiempo polinomico en el tamaño de entrada n: [23]

 

Más precisamente, SUBEPT es la clase de todos los problemas parametrizados   para los cuáles hay una función computable   con   y un algoritmo que decide L en tiempo   .

Hipótesis de tiempo exponencial

La hipótesis del tiempo exponencial (ETH ) es que 3SAT, el problema de satisfacción de las fórmulas booleanas en forma conjuntiva normal con, como máximo, tres literales por cláusula y con n variables, no puede resolverse en el tiempo 2o(n) . Más precisamente, la hipótesis es que existe una constante absoluta c>0 tal que 3SAT no puede decidirse en tiempo 2cn por ninguna máquina determinista de Turing. Con m denotando el número de cláusulas, ETH es equivalente a la hipótesis de que k-SAT no puede resolverse en el tiempo 2o(m) para cualquier entero k ≥ 3 [24]​ La hipótesis del tiempo exponencial implica P ≠ NP .

Tiempo exponencial

Se dice que un algoritmo es de tiempo exponencial, si T(n) está limitado por 2poly(n), donde poly(n) es un polinomio en n. Más formalmente, un algoritmo es de tiempo exponencial si T(n) está limitado por O(2nk) para alguna constante k. Los problemas que admiten algoritmos de tiempo exponencial en una máquina de Turing determinista forman la clase de complejidad conocida como EXP.

 

A veces, el tiempo exponencial se usa para referirse a algoritmos que tienen T(n) = 2O(n), donde el exponente es como máximo una función lineal de n. Esto da lugar a la clase de complejidad E.

 

Tiempo factorial

Un ejemplo de un algoritmo que se ejecuta en tiempo factorial es bogosort, un algoritmo de clasificación notoriamente ineficiente basado en prueba y error. Bogosort ordena una lista de n elementos mezclando repetidamente la lista hasta que se encuentre ordenada. En el caso promedio, cada paso a través del algoritmo bogosort examinará uno de los n! ordenamientos de los n elementos. Si los elementos son distintos, solo se ordena uno de esos pedidos. Bogosort comparte patrimonio con el teorema del mono infinito .

Doble tiempo exponencial

Se dice que un algoritmo es el tiempo exponencial doble si T (n) está limitado por 22poli (n), donde poly (n) es algún polinomio en n. Dichos algoritmos pertenecen a la clase de complejidad 2-EXPTIME .

 

Los algoritmos de tiempo doble exponencial bien conocidos incluyen:

  • Procedimientos de decisión para la aritmética de Presburger
  • Computación de una base de Gröbner (en el peor de los casos [25]​)
  • La eliminación del cuantificador en campos cerrados reales requiere al menos un tiempo exponencial doble [26][27]

Referencias

  1. Sipser, Michael (2006). Introduction to the Theory of Computation. Course Technology Inc. ISBN 0-619-21764-2. 
  2. Mehlhorn, Kurt; Naher, Stefan (1990). «Bounded ordered dictionaries in O(log log N) time and O(n) space». Information Processing Letters 35 (4): 183-189. doi:10.1016/0020-0190(90)90022-P. 
  3. Tao, Terence (2010). «1.11 The AKS primality test». An epsilon of room, II: Pages from year three of a mathematical blog. Graduate Studies in Mathematics 117. Providence, RI: American Mathematical Society. pp. 82-86. ISBN 978-0-8218-5280-4. doi:10.1090/gsm/117. 
  4. Lenstra, Jr., H.W.; Pomerance, Carl (11 de diciembre de 2016). Primality testing with Gaussian periods. 
  5. Bradford, Phillip G.; Rawlins, Gregory J. E.; Shannon, Gregory E. (1998). «Efficient Matrix Chain Ordering in Polylog Time». SIAM Journal on Computing (Philadelphia: Society for Industrial and Applied Mathematics) 27 (2): 466-490. ISSN 1095-7111. doi:10.1137/S0097539794270698. 
  6. Kumar, Ravi; Rubinfeld, Ronitt (2003). «Sublinear time algorithms». SIGACT News 34 (4): 57-67. doi:10.1145/954092.954103. 
  7. Naik, Ashish V.; Regan, Kenneth W.; Sivakumar, D. (1995). «On Quasilinear Time Complexity Theory». Theoretical Computer Science 148 (2): 325-349. doi:10.1016/0304-3975(95)00031-q. Consultado el 23 de febrero de 2015. 
  8. Sedgewick, R. and Wayne K (2011). Algorithms, 4th Ed. p. 186. Pearson Education, Inc.
  9. Papadimitriou, Christos H. (1994). Computational complexity. Reading, Mass.: Addison-Wesley. ISBN 0-201-53082-1. 
  10. Cobham, Alan (1965). «The intrinsic computational difficulty of functions». Proc. Logic, Methodology, and Philosophy of Science II. North Holland. 
  11. Grötschel, Martin; László Lovász; Alexander Schrijver (1988). «Complexity, Oracles, and Numerical Computation». Geometric Algorithms and Combinatorial Optimization. Springer. ISBN 0-387-13624-X. 
  12. Schrijver, Alexander (2003). «Preliminaries on algorithms and Complexity». Combinatorial Optimization: Polyhedra and Efficiency 1. Springer. ISBN 3-540-44389-4. 
  13. Braverman, Mark; Ko, Young Kun; Rubinstein, Aviad; Weinstein, Omri (2015), ETH hardness for densest-k-subgraph with perfect completeness, Bibcode:2015arXiv150408352B ..
  14. Complexity Zoo: Class QP: Quasipolynomial-Time
  15. Impagliazzo, R.; Paturi, R. (2001). «On the complexity of k-SAT». Journal of Computer and System Sciences (Elsevier) 62 (2): 367-375. ISSN 1090-2724. doi:10.1006/jcss.2000.1727. 
  16. Aaronson, Scott (5 de abril de 2009). «A not-quite-exponential dilemma». Shtetl-Optimized. Consultado el 2 de diciembre de 2009. 
  17. Babai, László; Fortnow, Lance; Nisan, N.; Wigderson, Avi (1993). «BPP has subexponential time simulations unless EXPTIME has publishable proofs». Computational Complexity (Berlin, New York: Springer-Verlag) 3 (4): 307-318. doi:10.1007/BF01275486. 
  18. Complexity Zoo: Class SUBEXP: Deterministic Subexponential-Time
  19. Philippe Moser (2003). Baire’s Categories on Small Complexity Classes 2751. pp. 333-342. ISBN 978-3-540-40543-6. doi:10.1007/978-3-540-45077-1_31. 
  20. Miltersen, P.B. (2001). «Derandomizing Complexity Classes». Handbook of Randomized Computing. Combinatorial Optimization (Kluwer Academic Pub) 9: 843. ISBN 978-1-4613-4886-3. doi:10.1007/978-1-4615-0013-1_19. 
  21. Kuperberg, Greg (2005). «A Subexponential-Time Quantum Algorithm for the Dihedral Hidden Subgroup Problem». SIAM Journal on Computing (Philadelphia) 35 (1): 188. ISSN 1095-7111. arXiv:quant-ph/0302112. doi:10.1137/s0097539703436345. 
  22. «A Subexponential Time Algorithm for the Dihedral Hidden Subgroup Problem with Polynomial Space». arXiv:quant-ph/0406151v1. 2004. 
  23. Flum, Jörg; Grohe, Martin (2006). . Springer. p. 417. ISBN 978-3-540-29952-3. Archivado desde el original el 18 de noviembre de 2007. Consultado el 14 de julio de 2020. 
  24. Impagliazzo, R.; Paturi, R.; Zane, F. (2001). «Which problems have strongly exponential complexity?». Journal of Computer and System Sciences 63 (4): 512-530. doi:10.1006/jcss.2001.1774. 
  25. Mayr,E. & Mayer,A.: The Complexity of the Word Problem for Commutative Semi-groups and Polynomial Ideals. Adv. in Math. 46(1982) pp. 305–329
  26. J.H. Davenport & J. Heintz: Real Quantifier Elimination is Doubly Exponential. J. Symbolic Comp. 5(1988) pp. 29–35.
  27. G.E. Collins: Quantifier Elimination for Real Closed Fields by Cylindrical Algebraic Decomposition. Proc. 2nd. GI Conference Automata Theory & Formal Languages (Springer Lecture Notes in Computer Science 33) pp. 134–183
  •   Datos: Q2393193

complejidad, temporal, informática, complejidad, temporal, complejidad, computacional, describe, cantidad, tiempo, lleva, ejecutar, algoritmo, complejidad, temporal, estima, comúnmente, contando, número, operaciones, elementales, realizadas, algoritmo, suponie. En informatica la complejidad temporal es la complejidad computacional que describe la cantidad de tiempo que lleva ejecutar un algoritmo La complejidad temporal se estima comunmente contando el numero de operaciones elementales realizadas por el algoritmo suponiendo que cada operacion elemental requiere una cantidad fija de tiempo Por lo tanto la cantidad de tiempo necesario y el numero de operaciones elementales realizadas por el algoritmo difieren en un factor constante como maximo Graficos de funciones comunmente utilizadas en el analisis de algoritmos que muestran el numero de operaciones N versus el tamano de entrada n para cada funcion Dado que el tiempo de ejecucion de un algoritmo puede variar entre diferentes entradas del mismo tamano comunmente se considera la complejidad temporal del peor caso que es la cantidad maxima de tiempo requerida para las entradas de un tamano determinado Menos comun y usualmente especificado explicitamente es la complejidad del caso promedio que es el promedio del tiempo necesario para las entradas de un tamano dado esto tiene sentido porque solo hay un numero finito de entradas posibles de un tamano dado En ambos casos la complejidad temporal generalmente se expresa como una funcion del tamano de la entrada 1 Dado que esta funcion es generalmente dificil de calcular exactamente y el tiempo de ejecucion para entradas pequenas generalmente no es consecuente uno comunmente se enfoca en el comportamiento de la complejidad cuando aumenta el tamano de entrada es decir el comportamiento asintotico de la complejidad Por lo tanto la complejidad temporal se expresa comunmente usando la notacion O grande tipicamente O n displaystyle O n O n log n displaystyle O n log n O n a displaystyle O n alpha O 2 n displaystyle O 2 n etc donde n es el tamano de entrada en unidades de bits necesarios para representar la entrada Las complejidades algoritmicas se clasifican segun el tipo de funcion que aparece en la notacion O grande Por ejemplo un algoritmo con complejidad temporal O n displaystyle O n es un algoritmo de tiempo lineal y un algoritmo con complejidad de tiempo O n a displaystyle O n alpha por alguna constante a gt 1 displaystyle alpha gt 1 es un algoritmo de tiempo polinomico Indice 1 Tabla de complejidades temporales comunes 2 Tiempo constante 3 Tiempo logaritmico 4 Tiempo poli logaritmico 5 Tiempo sub lineal 6 Tiempo lineal 7 Tiempo cuasilineal 8 Tiempo sub cuadratico 9 Tiempo polinomial 9 1 Tiempo polinomial fuerte y debil 9 2 Clases de complejidad 10 Tiempo superpolinomial 11 Tiempo cuasi polinomial 11 1 Relacion con problemas NP completos 12 Tiempo sub exponencial 12 1 Primera definicion 12 2 Segunda definicion 12 2 1 Hipotesis de tiempo exponencial 13 Tiempo exponencial 14 Tiempo factorial 15 Doble tiempo exponencial 16 ReferenciasTabla de complejidades temporales comunes EditarLa siguiente tabla resume algunas clases de complejidades de tiempo comunmente encontradas En la tabla poly x xO 1 es decir polinomial en x Nombre Clase de complejidad Tiempo de ejecucion T n Ejemplos de tiempo de ejecucion Algoritmos de ejemploTiempo constante O 1 10 Encontrar la mediana en un array ordenado de numeros Tiempo inverso de la funcion de Ackermann O a n Tiempo amortizado por operacion usando un conjunto disjuntoTiempo de logaritmo iterado O log n Coloracion distribuida de grafosLog logaritmico O log log n Tiempo amortizado por operacion usando una cola de prioridades 2 acotada Tiempo logaritimico DLOGTIME O log n log n log n2 Busqueda binariaTiempo polilogaritmico poly log n log n 2Poder fraccional O nc donde 0 lt c lt 1 n1 2 n2 3 Buscando en un arbol kdTiempo lineal O n n 2n 5 Encontrar el item mas grande o mas pequeno en un array desordenado Kadane s algorithmTiempo n log estrella n O n log n Algoritmo de triangulacion de poligonos de SeidelTiempo linealitmico O n log n n log n log n El ordenamiento por comparacion mas rapido posible Transformada rapida de FourierTiempo cuasilineal n poly log n Tiempo cuadratico O n2 n2 Bubble sort Insertion sort Convolucion directaTiempo cubico O n3 n3 Multiplicacion ingenua de dos matrices de n n Calculo decorrelacion parcial Tiempo polinomico P 2O log n poly n n2 n n10 Algoritmo de Karmarkar para programacion lineal Test de primalidad AKS 3 4 Tiempo cuasipolinomial QP 2poly log n nlog log n nlog n O log2 n mejoralgoritmo conocido de aproximacion para el el problema del arbol de Steiner directoTiempo sub exponencial primera definicion SUBEXP O 2ne para todo e gt 0 O 2log nlog log n Tiempo sub exponencial segunda definicion 2o n 2n1 3 Mejor algoritmo conocido para for factorizacion de enteros anteriormente el mejor algoritmo para el problema del isomorfismo de grafosTiempo exponencial con exponente lineal E 2O n 1 1n 10n Resolucion del problema del viajante usando programacion dinamicaTiempo exponencial EXPTIME 2poly n 2n 2n2 Resolucion de multiplicacion de matrices encadenadas via brute force searchTiempo factorial O n n Resolviendo el problema del viajero usando busqueda de fuerza brutaTiempo exponencial doble 2 EXPTIME 22poly n 22n Deciding the truth of a given statement in Aritmetica de PresburguerTiempo constante EditarSe dice que un algoritmo es tiempo constante tambien escrito como tiempo O 1 si el valor de T n esta limitado por un valor que no depende del tamano de la entrada Por ejemplo acceder a cualquier elemento individual en una matriz requiere tiempo constante ya que solo se debe realizar una operacion para localizarlo De manera similar encontrar el valor minimo en una matriz ordenada en orden ascendente tambien es una operacion de tiempo constante ya que el resultado es siempre el primer elemento Sin embargo encontrar el valor minimo en una matriz desordenada no es una operacion de tiempo constante ya que es necesario escanear cada elemento de la matriz para determinar el valor minimo Por lo tanto este caso es una operacion de tiempo lineal que toma tiempo O n Sin embargo si el numero de elementos se conoce de antemano y no cambia aun se puede decir que dicho algoritmo se ejecuta en tiempo constante A pesar del nombre tiempo constante el tiempo de ejecucion no tiene que ser independiente del tamano del problema pero un limite superior para el tiempo de ejecucion tiene que estar limitado independientemente del tamano del problema Por ejemplo la tarea intercambia los valores de a y b si es necesario para que a b se llama de tiempo constante aunque el tiempo pueda depender de si ya es cierto o no que a b Sin embargo hay una constante t tal que el tiempo requerido es siempre como maximo t Estos son algunos ejemplos de fragmentos de codigo que se ejecutan en tiempo constante int index 5 int item lista index if condicion verdadera then realizar alguna operacion que se ejecuta en tiempo constante else realizar alguna otra operacion que se ejecute en tiempo constante for i 1 to 100 for j 1 to 200 realizar alguna operacion que se ejecuta en tiempo constante Si T n es O cualquier valor constante se indica en notacion estandar como T n siendo O 1 Tiempo logaritmico EditarSe dice que un algoritmo toma tiempo logaritmico cuando T n O log n Dado que log a n y log b n estan relacionados por un multiplicador constante y dicho multiplicador es irrelevante para la clasificacion big O el uso estandar para algoritmos de tiempo logaritmico es O log n independientemente de la base del logaritmo que aparece en la expresion de T Los algoritmos que toman tiempo logaritmico se encuentran comunmente en operaciones con arboles binarios o cuando se usa la busqueda binaria Un algoritmo O log n se considera altamente eficiente ya que la relacion entre el numero de operaciones y el tamano de la entrada disminuye y tiende a cero cuando aumenta n Un algoritmo que debe acceder a todos los elementos de su entrada no puede tomar tiempo logaritmico ya que el tiempo necesario para leer una entrada de tamano n es del orden de n Un ejemplo de tiempo logaritmico es la busqueda dentro de un diccionario Considere un diccionario D que contiene n entradas ordenadas por orden alfabetico Suponemos que para 1 k n uno puede acceder a la entrada k del diccionario en un tiempo constante Usemos D k para denotar la k esima entrada Bajo estas hipotesis la prueba de si una palabra w esta en el diccionario se puede hacer en tiempo logaritmico considere D n 2 displaystyle D lfloor n 2 rfloor donde displaystyle lfloor rfloor denota la funcion de piso Si w D n 2 displaystyle w D lfloor n 2 rfloor entonces hemos terminado Si no w lt D n 2 displaystyle w lt D lfloor n 2 rfloor continuamos la busqueda de la misma manera en la mitad izquierda del diccionario de lo contrario continuamos de manera similar con la mitad derecha del diccionario Este algoritmo es similar al metodo utilizado a menudo para encontrar una entrada en un diccionario de papel Tiempo poli logaritmico EditarSe dice que un algoritmo se ejecuta en tiempo poli logaritmico si T n O log n k para alguna constante k Por ejemplo el orden de una matriz de cadena se puede resolver en tiempo poli logaritmico en una maquina paralela de acceso aleatorio 5 Tiempo sub lineal EditarSe dice que un algoritmo se ejecuta en tiempo sub lineal si T n o n En particular esto incluye algoritmos con las complejidades de tiempo definidas anteriormente Los algoritmos tipicos que son exactos y sin embargo se ejecutan en tiempo sub lineal usan el procesamiento paralelo como lo hace el calculo del determinante de una matriz NC1 o alternativamente tienen suposiciones garantizadas en la estructura de entrada como lo hacen la busqueda binaria de tiempo logaritmico y muchos algoritmos de mantenimiento de arboles Sin embargo los lenguajes formales como el conjunto de todas las cadenas que tienen un bit en la posicion indicada por los primeros log n bits de la cadena pueden depender de cada bit de la entrada y sin embargo ser computables en tiempo sub lineal El termino especifico algoritmo de tiempo sublineal generalmente se reserva a algoritmos que son diferentes a los anteriores en el sentido de que se ejecutan sobre modelos de maquinas seriales clasicas y donde no se permiten suposiciones previas en la entrada 6 Sin embargo se les permite ser aleatorizados y de hecho deben ser aleatorizados para todas las tareas excepto las mas triviales Como tal un algoritmo debe proporcionar una respuesta sin leer toda la entrada sus detalles dependen en gran medida del acceso permitido a la entrada Por lo general para una entrada que se representa como una cadena binaria b1 bk se supone que el algoritmo puede solicitar y obtener el valor de bi para cualquier i en tiempo O 1 Los algoritmos de tiempo sub lineal suelen ser aleatorios y solo proporcionan soluciones aproximadas De hecho la propiedad de una cadena binaria que solo tiene ceros puede demostrarse facilmente que no puede ser decidida por un algoritmo de tiempo sub lineal no aproximado Los algoritmos de tiempo sub lineales surgen naturalmente en la investigacion de property testing Tiempo lineal EditarSe dice que un algoritmo toma tiempo lineal o tiempo O n si su complejidad temporal es O n Informalmente esto significa que el tiempo de ejecucion aumenta como maximo linealmente con el tamano de la entrada Mas precisamente esto significa que hay una constante c tal que el tiempo de ejecucion es como maximo cn para cada entrada de tamano n Por ejemplo un procedimiento que suma todos los elementos de una lista requiere un tiempo proporcional a la longitud de la lista si el tiempo de adicion es constante o al menos esta limitado por una constante El tiempo lineal es la mejor complejidad de tiempo posible en situaciones en las que un algoritmo tiene que leer secuencialmente toda su entrada Por lo tanto se ha invertido mucha investigacion en descubrir algoritmos que exhiben tiempo lineal o al menos tiempo casi lineal Esta investigacion incluye metodos de software y hardware Hay varias tecnologias de hardware que explotan el paralelismo para proporcionar esto Un ejemplo es la memoria direccionable por contenido Este concepto de tiempo lineal se utiliza en algoritmos de coincidencia de cadenas como el algoritmo de Boyer Moore y el algoritmo de Ukkonen Tiempo cuasilineal EditarSe dice que un algoritmo se ejecuta en tiempo cuasilineal tambien denominado tiempo log lineal si T n O n log k n para alguna constante positiva k 7 el caso de k 1 se llama tiempo linealitmico 8 Usando la notacion O suave estos algoritmos son O n Los algoritmos de tiempo cuasilineal tambien son O n1 e para cada constante e gt 0 y por lo tanto se ejecutan mas rapido que cualquier algoritmo de tiempo polinomico cuyo limite de tiempo incluye un termino nc para cualquier c gt 1 Los algoritmos que se ejecutan en tiempo cuasilineal incluyen Merge sort in place O n log2 n Quicksort O n log n en su version aleatoria tiene un tiempo de ejecucion que es O n log n en espera de la entrada del peor de los casos Su version no aleatoria tiene un tiempo de ejecucion O n log n solo cuando se considera la complejidad promedio de los casos Heapsort O n log n merge sort introsort binary tree sort smoothsort patience sorting etc en el peor de los casos Transformadas rapidas de Fourier O n log n Calculo de matriz Monge O n log n En muchos casos el tiempo de ejecucion n log n es simplemente el resultado de realizar una operacion 8 log n n veces Por ejemplo el ordenamiento de un arboles binario crea un arbol binario insertando uno por uno los elementos de la matriz de tamano n Dado que la operacion de insercion en un arbol de busqueda binaria auto balanceado toma tiempo O log n todo el algoritmo toma tiempo O n log n El ordenamiento por comparacion requiere al menos W n log n comparaciones en el peor de los casos porque log n 8 n log n por aproximacion de Stirling Esto tiempos tambien surgen con frecuencia de la relacion de recurrencia T n 2T n 2 O n Tiempo sub cuadratico EditarSe dice que un algoritmo es de tiempo subcuadratico si T n O n2 Por ejemplo los algoritmos de ordenamiento simples basados en la comparacion son cuadraticos por ejemplo ordenamiento por insercion pero se pueden encontrar algoritmos mas avanzados que son subcuadraticos por ejemplo ordenamiento shell Ningun algoritmo de ordenamiento de proposito general se ejecuta en tiempo lineal pero la reduccion de un tiempo cuadratico a uno subcuadratico es de gran importancia practica Tiempo polinomial EditarSe dice que un algoritmo es de tiempo polinomico si su tiempo de ejecucion esta limitado por una expresion polinomica en el tamano de la entrada para el algoritmo es decir T n O nk para alguna constante positiva k 1 9 Los problemas para los que existe un algoritmo de tiempo polinomico determinista pertenecen a la clase de complejidad P que es central en el campo de la teoria de la complejidad computacional La tesis de Cobham establece que el tiempo polinomial es sinonimo de manejable factible eficiente o rapido 10 Algunos ejemplos de algoritmos de tiempo polinomiales El ordenamiento por seleccion para n enteros realiza A n 2 displaystyle An 2 operaciones para alguna constante A Por lo tanto corre en el tiempo O n 2 displaystyle O n 2 y es un algoritmo de tiempo polinomico Todas las operaciones aritmeticas basicas suma resta multiplicacion division y comparacion se pueden realizar en tiempo polinomico Las coincidencias maximas en los grafos se pueden encontrar en el tiempo polinomico Tiempo polinomial fuerte y debil Editar En algunos contextos especialmente en la optimizacion uno diferencia entre el tiempo fuertemente polinomial y los algoritmos de tiempo debilmente polinomial Estos dos conceptos solo son relevantes si las entradas a los algoritmos consisten en enteros El tiempo fuertemente polinomico se define en el modelo aritmetico de computacion En este modelo de computacion las operaciones aritmeticas basicas suma resta multiplicacion division y comparacion toman un paso de unidad de tiempo para realizar independientemente de los tamanos de los operandos El algoritmo se ejecuta en tiempo fuertemente polinomico si 11 El numero de operaciones en el modelo aritmetico de computacion esta limitado por un polinomio en el numero de enteros en la instancia de entrada y El espacio utilizado por el algoritmo esta limitado por un polinomio en el tamano de la entrada Cualquier algoritmo con estas dos propiedades se puede convertir en un algoritmo de tiempo polinomico reemplazando las operaciones aritmeticas por algoritmos adecuados para realizar las operaciones aritmeticas en una maquina de Turing Si el segundo de los requisitos anteriores no se cumple entonces esto ya no es cierto Dado el entero 2 n displaystyle 2 n que ocupa un espacio proporcional a n en el modelo de maquina de Turing es posible calcular 2 2 n displaystyle 2 2 n con n multiplicaciones usando exponenciacion binaria Sin embargo el espacio utilizado para representar 2 2 n displaystyle 2 2 n es proporcional a 2 n displaystyle 2 n y por lo tanto exponencial en lugar de polinomico en el espacio utilizado para representar la entrada Por lo tanto no es posible llevar a cabo este calculo en tiempo polinomico en una maquina de Turing pero es posible calcularlo polinomicamente con muchas operaciones aritmeticas Por el contrario existen algoritmos que se ejecutan en varios pasos de la maquina de Turing delimitados por un polinomio en la longitud de la entrada codificada en binario pero no toman una serie de operaciones aritmeticas delimitadas por un polinomio en el numero de numeros de entrada El algoritmo euclidiano para calcular el maximo divisor comun de dos enteros es un ejemplo Dados dos enteros a displaystyle a y b displaystyle b el algoritmo realiza O log a log b displaystyle O log a log b operaciones aritmeticas en numeros con como maximo O log a log b displaystyle O log a log b bits Al mismo tiempo el numero de operaciones aritmeticas no puede estar limitado por el numero de enteros en la entrada que es constante en este caso siempre hay solo dos enteros en la entrada Debido a la ultima observacion el algoritmo no se ejecuta en un tiempo fuertemente polinomico Su tiempo real de ejecucion depende de las magnitudes de a displaystyle a y b displaystyle b y no solo en el numero de enteros en la entrada Se dice que un algoritmo que se ejecuta en tiempo polinomial pero que no es fuertemente polinomial se ejecuta en tiempo polinomial debil 12 Un ejemplo bien conocido de un problema para el que se conoce un algoritmo de tiempo polinomial debil pero no se sabe que admita un algoritmo de tiempo polinomial fuerte es la programacion lineal El tiempo debilmente polinomial no debe confundirse con el tiempo pseudopolinomico Clases de complejidad Editar El concepto de tiempo polinomial conduce a varias clases de complejidad en la teoria de la complejidad computacional Algunas clases importantes definidas usando el tiempo polinomial son las siguientes P La clase de complejidad de los problemas de decision que se pueden resolver en una maquina de Turing determinista en tiempo polinomicoNP La clase de complejidad de los problemas de decision que se pueden resolver en una maquina de Turing no determinista en tiempo polinomicoZPP La clase de complejidad de los problemas de decision que se pueden resolver con cero errores en una maquina de Turing probabilistica en tiempo polinomicoRP La clase de complejidad de los problemas de decision que se pueden resolver con un error unilateral en una maquina de Turing probabilistica en tiempo polinomico BPP La clase de complejidad de los problemas de decision que se pueden resolver con un error de 2 lados en una maquina de Turing probabilistica en tiempo polinomicoBQP La clase de complejidad de los problemas de decision que se pueden resolver con un error de 2 lados en una maquina cuantica de Turing en tiempo polinomicoP es la clase de complejidad temporal mas pequena en una maquina determinista que es robusta en terminos de cambios en el modelo de maquina Por ejemplo un cambio de una maquina de Turing de una sola cinta a una maquina de varias cintas puede conducir a una aceleracion cuadratica pero cualquier algoritmo que se ejecute en tiempo polinomico en un modelo tambien lo hace en el otro Cualquier maquina abstracta tendra una clase de complejidad correspondiente a los problemas que se pueden resolver en tiempo polinomico en esa maquina Tiempo superpolinomial EditarSe dice que un algoritmo toma tiempo superpolinomial si T n no esta limitado por ningun polinomio Usando una notacion omega chica es el tiempo w nc para todas las constantes c donde n es el parametro de entrada tipicamente el numero de bits en la entrada Por ejemplo un algoritmo que se ejecuta durante 2n pasos en una entrada de tamano n requiere tiempo superpolinomial mas especificamente tiempo exponencial Un algoritmo que utiliza recursos exponenciales es claramente superpolinomial pero algunos algoritmos son muy debilmente superpolinomiales Por ejemplo la prueba de primalidad Adleman Pomerance Rumely se ejecuta durante nO log log n en entradas de n bits esto crece mas rapido que cualquier polinomio para una n lo suficientemente grande pero el tamano de entrada debe hacerse tan grande como para volverse impractico si se quiere evitar ser dominado por un polinomio de pequeno grado Un algoritmo que requiere tiempo superpolinomial se encuentra fuera de la clase de complejidad P La tesis de Cobham postula que estos algoritmos no son practicos Dado que el problema P versus NP no esta resuelto actualmente no se sabe de un algoritmo para un problema NP completo que se ejecute en tiempo polinomico Tiempo cuasi polinomial EditarLos algoritmos de tiempo cuasi polinomiales son algoritmos que funcionan mas lentamente que aquellos de tiempo polinomico pero no tan lentos como para ser de tiempo exponencial El peor tiempo de ejecucion de un algoritmo de tiempo cuasi polinomial es 2 O log n c displaystyle 2 O log n c para una constante c gt 0 displaystyle c gt 0 Para c 1 displaystyle c 1 obtenemos un algoritmo de tiempo polinomico para c lt 1 displaystyle c lt 1 obtenemos un algoritmo de tiempo sub lineal Los algoritmos de tiempo cuasi polinomiales generalmente surgen en reducciones de un problema NP hard a otro problema Por ejemplo uno puede tomar una instancia de un problema NP hard digamos 3SAT y convertirlo en una instancia de otro problema B pero el tamano de la instancia se convierte en 2 O log n c displaystyle 2 O log n c En ese caso esta reduccion no prueba que el problema B sea NP hard esta reduccion solo muestra que no existe un algoritmo de tiempo polinomico para B a menos que exista un algoritmo de tiempo cuasi polinomico para 3SAT y por lo tanto todo NP De manera similar existen algunos problemas para los cuales conocemos algoritmos de tiempo cuasi polinomiales pero no de tiempo polinomial Tales problemas surgen en los algoritmos de aproximacion Un ejemplo famoso es el problema del arbol Steiner dirigido para el cual existe un algoritmo de aproximacion de tiempo cuasi polinomial que logra un factor de aproximacion de O log 3 n displaystyle O log 3 n n es el numero de vertices pero la demostracion de la existencia de dicho algoritmo de tiempo polinomial es un problema abierto Otros problemas computacionales con soluciones de tiempo cuasi polinomiales pero ninguna solucion de tiempo polinomial conocida incluye el problema de planted cliques en el que el objetivo es encontrar un clique mayor en la union de una clique y un grafo aleatorio Aunque cuasi polinomialmente solucionable se ha conjeturado que el problema de planted cliques no tiene una solucion de tiempo polinomial Esta conjetura se ha utilizado como un supuesto de dureza computacional para demostrar la dificultad de varios otros problemas en la teoria de juegos computacionales property testing y el aprendizaje automatico 13 La clase de complejidad QP consiste en todos los problemas que tienen algoritmos de tiempo cuasi polinomiales Se puede definir en terminos de DTIME de la siguiente manera 14 QP c N DTIME 2 log n c displaystyle mbox QP bigcup c in mathbb N mbox DTIME 2 log n c Relacion con problemas NP completos Editar En teoria de la complejidad el problema de P versus NP sin resolver pregunta si todos los problemas en NP tienen algoritmos de tiempo polinomial Todos los algoritmos mas conocidos para problemas NP completos como 3SAT etc toman tiempo exponencial De hecho se conjetura para muchos problemas naturales completos de NP que no tienen algoritmos de tiempo sub exponenciales Aqui tiempo sub exponencial se entiende como la segunda definicion presentada a continuacion Por otro lado muchos problemas de grafos representados de forma natural por matrices de adyacencia se pueden resolver en tiempo subexponencial simplemente porque el tamano de la entrada es el cuadrado del numero de vertices Esta conjetura para el problema k SAT se conoce como la hipotesis del tiempo exponencial 15 Dado que se conjetura que los problemas NP completos no tienen algoritmos de tiempo cuasi polinomiales algunos resultados de inaplicabilidad en el campo de los algoritmos de aproximacion suponen que los problemas NP completos no tienen algoritmos de tiempo cuasi polinomiales Por ejemplo vea los resultados de inaplicabilidad conocidos para el problema de la cobertura de conjuntos Tiempo sub exponencial EditarEl termino tiempo sub exponencial se usa para expresar que el tiempo de ejecucion de algun algoritmo puede crecer mas rapido que cualquier polinomio pero aun es significativamente mas pequeno que un exponencial En este sentido los problemas que tienen algoritmos de tiempo sub exponenciales son algo mas manejables que aquellos que solo tienen algoritmos exponenciales Generalmente no hay consenso respecto a la definicion precisa de sub exponencial 16 enumeramos las dos mas utilizados a continuacion Primera definicion Editar Se dice que un problema puede resolverse con un tiempo sub exponencial si se puede resolver en tiempos de ejecucion cuyos logaritmos crecen mas lentamente que cualquier polinomio dado Mas precisamente un problema toma un tiempo sub exponencial si por cada e gt 0 existe un algoritmo que resuelve el problema en el tiempo O 2ne El conjunto de todos estos problemas es la clase de complejidad SUBEXP que se puede definir en terminos de DTIME de la siguiente manera 17 18 19 20 SUBEXP e gt 0 DTIME 2 n e displaystyle text SUBEXP bigcap varepsilon gt 0 text DTIME left 2 n varepsilon right Esta nocion de sub exponencial no es uniforme en terminos de e en el sentido de que e no es parte de la entrada y cada e puede tener su propio algoritmo para el problema Segunda definicion Editar Algunos autores definen el tiempo sub exponencial como tiempos de ejecucion en 2o n 15 21 22 Esta definicion permite tiempos de ejecucion mayores que la primera definicion de tiempo sub exponencial Un ejemplo de dicho algoritmo de tiempo sub exponencial es el algoritmo clasico mas conocido para la factorizacion de enteros la criba general del cuerpo de numeros que se ejecuta en un tiempo de 2 O n 1 3 displaystyle 2 tilde O n 1 3 donde n es la longitud de la entrada Otro ejemplo es el problema del isomorfismo de grafos donde el algoritmo de Luks se ejecuta a tiempo 2 O n log n displaystyle 2 O sqrt n log n En 2015 2017 Babai redujo la complejidad de este problema al tiempo cuasi polinomial Si el algoritmo puede ser sub exponencial en el tamano de la instancia el numero de vertices o el numero de aristas eso hace una diferencia En la complejidad parametrizada esta diferencia se hace explicita considerando pares L k displaystyle L k de problemas de decision y parametros k SUBEPT es la clase de todos los problemas parametrizados que se ejecutan en tiempo sub exponencial en k y en tiempo polinomico en el tamano de entrada n 23 SUBEPT DTIME 2 o k poly n displaystyle text SUBEPT text DTIME left 2 o k cdot text poly n right Mas precisamente SUBEPT es la clase de todos los problemas parametrizados L k displaystyle L k para los cuales hay una funcion computable f N N displaystyle f mathbb N to mathbb N con f o k displaystyle f in o k y un algoritmo que decide L en tiempo 2 f k poly n displaystyle 2 f k cdot text poly n Hipotesis de tiempo exponencial Editar La hipotesis del tiempo exponencial ETH es que 3SAT el problema de satisfaccion de las formulas booleanas en forma conjuntiva normal con como maximo tres literales por clausula y con n variables no puede resolverse en el tiempo 2o n Mas precisamente la hipotesis es que existe una constante absoluta c gt 0 tal que 3SAT no puede decidirse en tiempo 2cn por ninguna maquina determinista de Turing Con m denotando el numero de clausulas ETH es equivalente a la hipotesis de que k SAT no puede resolverse en el tiempo 2o m para cualquier entero k 3 24 La hipotesis del tiempo exponencial implica P NP Tiempo exponencial EditarSe dice que un algoritmo es de tiempo exponencial si T n esta limitado por 2poly n donde poly n es un polinomio en n Mas formalmente un algoritmo es de tiempo exponencial si T n esta limitado por O 2nk para alguna constante k Los problemas que admiten algoritmos de tiempo exponencial en una maquina de Turing determinista forman la clase de complejidad conocida como EXP EXP c N DTIME 2 n c displaystyle text EXP bigcup c in mathbb N text DTIME left 2 n c right A veces el tiempo exponencial se usa para referirse a algoritmos que tienen T n 2O n donde el exponente es como maximo una funcion lineal de n Esto da lugar a la clase de complejidad E E c N DTIME 2 c n displaystyle text E bigcup c in mathbb N text DTIME left 2 cn right Tiempo factorial EditarUn ejemplo de un algoritmo que se ejecuta en tiempo factorial es bogosort un algoritmo de clasificacion notoriamente ineficiente basado en prueba y error Bogosort ordena una lista de n elementos mezclando repetidamente la lista hasta que se encuentre ordenada En el caso promedio cada paso a traves del algoritmo bogosort examinara uno de los n ordenamientos de los n elementos Si los elementos son distintos solo se ordena uno de esos pedidos Bogosort comparte patrimonio con el teorema del mono infinito Doble tiempo exponencial EditarSe dice que un algoritmo es el tiempo exponencial doble si T n esta limitado por 22poli n donde poly n es algun polinomio en n Dichos algoritmos pertenecen a la clase de complejidad 2 EXPTIME 2 EXPTIME c N DTIME 2 2 n c displaystyle mbox 2 EXPTIME bigcup c in mathbb N mbox DTIME left 2 2 n c right Los algoritmos de tiempo doble exponencial bien conocidos incluyen Procedimientos de decision para la aritmetica de Presburger Computacion de una base de Grobner en el peor de los casos 25 La eliminacion del cuantificador en campos cerrados reales requiere al menos un tiempo exponencial doble 26 27 Referencias Editar a b Sipser Michael 2006 Introduction to the Theory of Computation Course Technology Inc ISBN 0 619 21764 2 Mehlhorn Kurt Naher Stefan 1990 Bounded ordered dictionaries in O log log N time and O n space Information Processing Letters 35 4 183 189 doi 10 1016 0020 0190 90 90022 P Tao Terence 2010 1 11 The AKS primality test An epsilon of room II Pages from year three of a mathematical blog Graduate Studies in Mathematics 117 Providence RI American Mathematical Society pp 82 86 ISBN 978 0 8218 5280 4 doi 10 1090 gsm 117 Lenstra Jr H W Pomerance Carl 11 de diciembre de 2016 Primality testing with Gaussian periods Bradford Phillip G Rawlins Gregory J E Shannon Gregory E 1998 Efficient Matrix Chain Ordering in Polylog Time SIAM Journal on Computing Philadelphia Society for Industrial and Applied Mathematics 27 2 466 490 ISSN 1095 7111 doi 10 1137 S0097539794270698 Kumar Ravi Rubinfeld Ronitt 2003 Sublinear time algorithms SIGACT News 34 4 57 67 doi 10 1145 954092 954103 Naik Ashish V Regan Kenneth W Sivakumar D 1995 On Quasilinear Time Complexity Theory Theoretical Computer Science 148 2 325 349 doi 10 1016 0304 3975 95 00031 q Consultado el 23 de febrero de 2015 Sedgewick R and Wayne K 2011 Algorithms 4th Ed p 186 Pearson Education Inc Papadimitriou Christos H 1994 Computational complexity Reading Mass Addison Wesley ISBN 0 201 53082 1 Cobham Alan 1965 The intrinsic computational difficulty of functions Proc Logic Methodology and Philosophy of Science II North Holland Grotschel Martin Laszlo Lovasz Alexander Schrijver 1988 Complexity Oracles and Numerical Computation Geometric Algorithms and Combinatorial Optimization Springer ISBN 0 387 13624 X Schrijver Alexander 2003 Preliminaries on algorithms and Complexity Combinatorial Optimization Polyhedra and Efficiency 1 Springer ISBN 3 540 44389 4 Braverman Mark Ko Young Kun Rubinstein Aviad Weinstein Omri 2015 ETH hardness for densest k subgraph with perfect completeness Bibcode 2015arXiv150408352B Complexity Zoo Class QP Quasipolynomial Time a b Impagliazzo R Paturi R 2001 On the complexity of k SAT Journal of Computer and System Sciences Elsevier 62 2 367 375 ISSN 1090 2724 doi 10 1006 jcss 2000 1727 Aaronson Scott 5 de abril de 2009 A not quite exponential dilemma Shtetl Optimized Consultado el 2 de diciembre de 2009 Babai Laszlo Fortnow Lance Nisan N Wigderson Avi 1993 BPP has subexponential time simulations unless EXPTIME has publishable proofs Computational Complexity Berlin New York Springer Verlag 3 4 307 318 doi 10 1007 BF01275486 Complexity Zoo Class SUBEXP Deterministic Subexponential Time Philippe Moser 2003 Baire s Categories on Small Complexity Classes 2751 pp 333 342 ISBN 978 3 540 40543 6 doi 10 1007 978 3 540 45077 1 31 Miltersen P B 2001 Derandomizing Complexity Classes Handbook of Randomized Computing Combinatorial Optimization Kluwer Academic Pub 9 843 ISBN 978 1 4613 4886 3 doi 10 1007 978 1 4615 0013 1 19 Kuperberg Greg 2005 A Subexponential Time Quantum Algorithm for the Dihedral Hidden Subgroup Problem SIAM Journal on Computing Philadelphia 35 1 188 ISSN 1095 7111 arXiv quant ph 0302112 doi 10 1137 s0097539703436345 A Subexponential Time Algorithm for the Dihedral Hidden Subgroup Problem with Polynomial Space arXiv quant ph 0406151v1 2004 Flum Jorg Grohe Martin 2006 Parameterized Complexity Theory Springer p 417 ISBN 978 3 540 29952 3 Archivado desde el original el 18 de noviembre de 2007 Consultado el 14 de julio de 2020 Impagliazzo R Paturi R Zane F 2001 Which problems have strongly exponential complexity Journal of Computer and System Sciences 63 4 512 530 doi 10 1006 jcss 2001 1774 Mayr E amp Mayer A The Complexity of the Word Problem for Commutative Semi groups and Polynomial Ideals Adv in Math 46 1982 pp 305 329 J H Davenport amp J Heintz Real Quantifier Elimination is Doubly Exponential J Symbolic Comp 5 1988 pp 29 35 G E Collins Quantifier Elimination for Real Closed Fields by Cylindrical Algebraic Decomposition Proc 2nd GI Conference Automata Theory amp Formal Languages Springer Lecture Notes in Computer Science 33 pp 134 183 Datos Q2393193 Obtenido de https es wikipedia org w index php title Complejidad temporal amp oldid 147017444, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos