¿Tenemos clases de complejidad con respecto a, digamos, la complejidad del caso promedio? Por ejemplo, ¿hay una clase de complejidad (con nombre) para los problemas que toman el tiempo polinómico esperado para decidir?
Otra pregunta considera la mejor complejidad del caso , ejemplificada a continuación:
¿Existe una clase de problemas (naturales) cuya decisión requiera al menos un tiempo exponencial?
Para aclarar, considerar algunos EXP lenguaje -Complete . Obviamente, no todas las instancias de requieren tiempo exponencial: hay instancias que se pueden decidir incluso en tiempo polinómico. Entonces, la mejor complejidad de caso de no es el tiempo exponencial.
EDITAR: Dado que surgieron varias ambigüedades, quiero intentar aclararlo aún más. Por "mejor de los casos", me refiero a una clase de complejidad cuya complejidad de problemas está limitada por alguna función. Por ejemplo, defina BestE como la clase de lenguajes que no puede decidirse en el tiempo por debajo de un exponencial lineal. Simbólicamente, dejar que denota una máquina arbitraria Turing, y , , y ser números naturales:c n 0 n
donde denota los tiempos que toma antes de que detenga en la entrada .M x
Acepto que definir esa clase de problemas es muy extraño, ya que estamos exigiendo que cada máquina de Turing , independientemente de su poder, no pueda decidir el lenguaje a tiempo menos que un exponencial lineal.
Sin embargo, observe que la contraparte del tiempo polinomial ( BestP ) es natural, ya que cada máquina de Turing requiere tiempoal menos leer su entrada.
PD: Tal vez, en lugar de cuantificar como "para todas las máquinas Turing ", tenemos que limitarlo a alguna clase de máquinas Turing previamente especificadas, como las máquinas Turing de tiempo polinómico. De esa manera, podemos definir clases como , que es la clase de lenguajes que requieren al menos tiempo cuadrático para decidirse en máquinas de Turing de tiempo polinómico.B e s t ( n 2 )
PS2: También se puede considerar la contraparte de complejidad de circuito, en la que consideramos el menor tamaño / profundidad de circuito para decidir un idioma.
fuente
Respuestas:
Aunque no puedo analizar tus definiciones, debes saber que se conocen jerarquías de tiempo mucho más fuertes, en particular las jerarquías de tiempo "en casi todas partes".
Aquí está la afirmación formal: por cada vez que está vinculado , existe un lenguaje L ∈ T I M E [ T ( n ) ] con la propiedad de que cada algoritmo determinista que reconoce correctamente L debe ejecutarse en el tiempo asintóticamente mayor que t ( n ) en todas las entradas menos finitas, durante un tiempo suficientemente pequeño t ( n ) .T(n) L∈TIME[ T( n ) ] L t ( n ) t ( n )
"Suficientemente pequeño" significa .t ( n ) logt ( n ) ≤ o ( T( n ) )
Supongamos que elegimos para un ejemplo, y obtener una lengua difícil L . Entonces, cualquier algoritmo que reconozca correctamente L debe tomar al menos 2 n / n 2 veces en todas las entradas que pasen una cierta longitud. Esto parece ser lo que estás buscando en tu clase BestE.T( n ) = 2norte L L 2norte/ n2
Referencia:
fuente
Hay una serie de clases que intentan abordar varias nociones de complejidad de caso promedio. En el complejo zoológico, algunas clases que pueden interesarle son:
AvgP
HeurP
DistNP
(NP, muestra de P)
Arora / Barak cubre muchas clases similares (en el capítulo 18), definiendo distP, distNP y sampNP.
La relación exacta entre todas estas clases se caracteriza por los Cinco Mundos de Impagliazzo, sobre los cuales se preguntó anteriormente en otra pregunta .
En cuanto a la pregunta de complejidad del "mejor caso", no estoy seguro de entender lo que quieres decir. ¿Estás buscando EXP ?
Si te refieres a clases de complejidad definidas en términos del mejor tiempo de ejecución de casos en todas las instancias, esta no es una muy buena medida de complejidad a priori, ya que solo estarías viendo los casos triviales de cualquier problema dado.
fuente
[Ampliando la respuesta de Ryan Williams y agregando algunos términos de búsqueda para usted] Su noción de la mejor complejidad del caso ya tiene un nombre: dureza en casi todas partes (ae), o bi-inmunidad. (El ejemplo de Ryan es de -bi-inmunity). Si C es una clase de complejidad, a continuación, un lenguaje L es C inmune a si no hay un subconjunto infinito L ' ⊆ L tal que L ' ∈ C . L es C -bi-inmune si tanto L como su complemento ¯ LTyoMETROmi[ T( n ) ] C L C L′⊆L L′∈C L C L son C- inmunes. Por ejemplo, no es difícil demostrar que su definición de B e s t E es equivalente a la clase de conjuntos E -bi-inmunes.L¯¯¯¯=Σ∗∖ L C B e s t E mi
(Histórico aparte: la noción de inmunidad fue desarrollada por primera vez por Post en 1944 en la teoría de la computabilidad, mucho antes incluso de que se definiera P. Post realmente se consideró "conjuntos simples": un conjunto es simple si su complemento es inmune. Para un teórico de la computabilidad, la palabra "inmune" generalmente significa "inmune a conjuntos computables". En ese contexto, la inmunidad es equivalente a "conjuntos inmunes a ce" ya que cada conjunto ce infinito contiene uno infinito computable. Creo que el artículo de Post también fue el primero en introducir el noción de reducción de muchos, pero no podría jurarlo).
fuente
Diferentes casos tienen más sentido cuando se habla de algoritmos, no de problemas. Por otro lado, las clases de complejidad son sobre problemas, no algoritmos. Por lo tanto, la clase de complejidad siempre es el peor de los casos para cualquier algoritmo debido a la definición.
En complejidad, su objetivo es conocer la cantidad de recursos necesarios para resolver cualquier instancia de un problema determinado. Por lo tanto, sabe que para cualquier instancia y algoritmo dado, necesitará esos recursos y nada más.
En el análisis de algoritmos, su objetivo es garantizar que su algoritmo tenga un límite superior para un recurso, en cualquier caso del problema. Un límite trivial es la clase de complejidad del problema, ya que ningún algoritmo útil (uno que haga pasos innecesarios) lleva más tiempo que eso. Sin embargo, puede mejorar ese límite dados los detalles del algoritmo.
En cuanto al mejor de los casos, es trivial para cada problema encontrar la menor cantidad de recursos necesarios. Suponga que la entrada es de longitud O (n) y la salida de longitud O (m). Entonces el siguiente TM M siempre se ejecuta en O (n) + O (m) para el mejor caso:
M {Entrada, Instancia, Solución}
fuente
fuente