¿Cómo se relacionan O y Ω con el peor y el mejor caso?


33

Hoy discutimos en una conferencia un algoritmo muy simple para encontrar un elemento en una matriz ordenada usando la búsqueda binaria . Se nos pidió determinar su complejidad asintótica para una matriz de elementos.n

Mi idea era que, obviamente, es u para ser más específico porque es el número de operaciones en el peor de los casos. Pero puedo hacerlo mejor, por ejemplo, si golpeo el elemento buscado la primera vez, entonces el límite inferior es .O ( log 2 n ) log 2 n Ω ( 1 )O(logn)O(log2n)log2nΩ(1)

El profesor presentó la solución como ya que generalmente consideramos solo las entradas de peor caso para los algoritmos.Θ(logn)

Pero cuando se consideran solo los peores casos, ¿cuál es el punto de tener notación y cuando todos los peores casos del problema dado tienen la misma complejidad ( sería todo lo que necesitamos, ¿verdad?).Ω ΘOΩΘ

¿Que me estoy perdiendo aqui?


@Smaji: ¿Qué quieres decir con "Pero cuando consideramos solo los peores casos, cuál es el punto de tener una gran notación O y gran Omega cuando todos los peores casos tienen + - la misma complejidad (Theta sería todo lo que necesitamos, ¿verdad?"). por favor aclararlo
Tanmoy

@Smajl: Creo que su pregunta es: ¿Cuál es la necesidad de la notación Big O y Big Omega en el análisis de algoritmos? ¿Estoy en lo correcto?
Tanmoy

55
O(log2n) no es más específico que , denotan la misma clase de funciones. O(logn)
Raphael

log2(n) es lo mismo que por lo tanto, el 2 solo indica un factor que se puede eliminar (como otros factores en big-O.log(b)/log(2)×logb(n)
ctrl-alt-delor

Respuestas:


39

La notación de Landau denota límites asintóticos en las funciones . Vea aquí una explicación de las diferencias entre , y .OΩΘ

El peor, el mejor, el promedio o el tiempo de su nombre describe distintas funciones de tiempo de ejecución: una para la secuencia del tiempo de ejecución más alto de cualquier dado , una para la del más bajo, y así sucesivamente.n

Per se, los dos no tienen nada que ver el uno con el otro. Las definiciones son independientes. Ahora podemos seguir adelante y formular límites asintóticos en las funciones de tiempo de ejecución: superior ( ), inferior ( ) o ambos ( ). Podemos hacerlo para el peor, el mejor o cualquier otro caso.Ω ΘOΩΘ

Por ejemplo, en la búsqueda binaria obtenemos un asintótico en tiempo de ejecución del mejor caso de y un asintótico asintótico en el peor de los casos de .Θ ( log n )Θ(1)Θ(logn)


La conclusión clave para mí es que podemos hacer el peor análisis del caso en cualquier cosa de las funciones limitadas asintóticas. Para mí, eso muestra la independencia de Big O vs. peor análisis de caso. ¡Gracias!
Patrick

1
@Patrick No del todo. Primero, usted decide si desea analizar el peor, el promedio o el mejor de los casos. Luego se te ocurre la función de costo (o una aproximación tan buena como puedas). Solo entonces tomas asíntóticos, si es que lo haces.
Raphael

17

Considere el siguiente algoritmo (o procedimiento, o código, o lo que sea):

Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3.    flip a coin
4.    if heads, do something Theta(n)
5.    else if tails, do something Theta(n^2)
6. else if n is odd then
7.    flip a coin
8.    if heads, do something Theta(n^4)
9.    else if tails, do something Theta(n^5)

¿Cuál es el comportamiento asintótico de esta función?

En el mejor de los casos (donde es par), el tiempo de ejecución es y , pero no de nada.Ω ( n ) O ( n 2 ) ΘnΩ(n)O(n2)Θ

En el peor de los casos (donde es impar), el tiempo de ejecución es y , pero no de nada.Ω ( n 4 ) O ( n 5 ) ΘnΩ(n4)O(n5)Θ

En el caso , el tiempo de ejecución es .Θ ( n 3 )n=0Θ(n3)

Este es un ejemplo un poco artificial, pero solo con el propósito de demostrar claramente las diferencias entre el límite y el caso. Podría hacer que la distinción se vuelva significativa con procedimientos completamente deterministas, si las actividades que está realizando no tienen límites conocidos .Θ


1
Para hacer esto determinista, divida a lo largo de casos. nmod4
vonbrand

4

No necesariamente. En este caso, es decir, la búsqueda binaria en una matriz ordenada, puede ver que: (a) la búsqueda binaria toma como máximo pasos; (b) hay entradas que realmente fuerzan estos muchos pasos. Entonces, si es el tiempo de ejecución en una entrada en el peor de los casos para la búsqueda binaria, puede decir que .[logn+1]T(n)T(n)=Θ(logn)

Por otro lado, para otros algoritmos, es posible que no pueda resolver exactamente, en cuyo caso puede tener una brecha entre los límites superior e inferior para el tiempo de ejecución en una entrada de peor caso.T(n)

Ahora, para buscar una matriz ordenada, algo más es cierto, y es que cualquier algoritmo para buscar una matriz ordenada debe inspeccionar . Sin embargo, para este tipo de límite inferior, debe analizar el problema en sí. (Aquí está la idea: en cualquier momento, un algoritmo de búsqueda no ha descartado algún conjunto de posiciones donde puede estar el elemento que está buscando. Una entrada cuidadosamente diseñada puede garantizar que sea reducido como máximo por un factor de )[logn+1]S[n]|S|2


1

Tienes razón, muchas personas usan descuidadamente cuando deberían usar . Por ejemplo, un analista de algoritmos puede terminar con una función de tiempo e inmediatamente concluir que , que es técnicamente correcto , pero una aserción más precisa sería . Atribuyo este comportamiento ajeno a dos razones. Primero, muchos ven a como más popular y aceptable, posiblemente debido a su larga historia. Recuerde que se introdujo hace más de un siglo, mientras que (y ) se introdujeron solo en 1976 (por Donald Knuth). En segundo lugar, podría ser porqueOΘT(n)=n2+n+2T(n)=O(n2)T(n)=Θ(n2)OΘΩOestá disponible en el teclado, mientras que no lo está.Θ

Sin embargo, desde un punto de vista técnico, la razón principal por la que los analistas cuidadosos prefieren usar sobre es que el primero cubre "un territorio mayor" que el segundo. Si tomamos su ejemplo de búsqueda binaria y queremos usar , tendremos que hacer dos afirmaciones: \ una para el mejor caso, a saber, , y otra para el peor de los casos, a saber, . Con , hacemos solo una afirmación, a saber, . Matemáticamente, las funciones cubiertas por también están cubiertas por , mientras que lo contrario no es necesariamente cierto.OΘΘΘ(1)Θ(logn)OO(logn)ΘO


¡Bienvenido y gracias por tomarse el tiempo para publicar una respuesta! Sin embargo, no puedo decir cuál es su punto aquí. En el primer párrafo, ofreces algunas especulaciones. En el segundo, propone un punto de vista que es "descuidado" en sí mismo: decir "es el caso promedio " no dice nada sobre el mejor caso, excepto que está en la misma clase. Decir "es el caso promedio " implica el mismo límite superior. Si desea impartir información adicional sobre el mejor caso, deberá proporcionarla explícitamente de cualquier manera. Por lo tanto, no veo cómo estás haciendo un punto para usar O sobre Θ. O(logn)Θ(logn)
Raphael

@Raphael Te remito a las definiciones de las dos notaciones. Además, tenga en cuenta que se utilizan para clasificar la "tasa de crecimiento" asintótica del tiempo de ejecución, no el tiempo de ejecución en sí mismo como lo propagan sus diversas respuestas y comentarios.
Hamed Nassar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.