Por favor, explique la afirmación de que la función an + b pertenece a O (n ^ 2) y Θ (n)?


12

Digamos que tengo una función lineal f(n)= an+b, ¿cuál es la mejor manera de demostrar que esta función pertenece a O (n 2 ) y Θ(n)?

No necesito rigor matemático aquí. Necesito una respuesta de los programadores. Alguna forma lógica de explicar.

Esta es precisamente la razón por la que no publiqué la pregunta en las preguntas y respuestas de matemáticas y en su lugar en las preguntas y respuestas de los programadores.


2
@EmmadKareem En la literatura, a menudo, la notación Big O se usa casualmente para representar límites estrechos, que es básicamente Θ (n). Big O es el límite superior en realidad.
Geek

1
@EmmadKareem "el límite superior de O (n) no es n * n", no hay límite superior de O (n). O (n) en sí mismo define el límite superior. En realidad, puede contener un conjunto de funciones que satisfacen la condición: f (x) ∈ O (g (x)) ya que existe c> 0 (p. Ej. C = 1) y x0 (p. Ej. X0 = 5) tal que f (x ) <cg (x) siempre que x> x0.
Geek

2
@EmmadKareem En realidad O (n) \ subconjunto O (n ^ 2) \ subconjunto O (n ^ 3) y así sucesivamente, por lo tanto f \ in O (n ^ 2) por transitividad de \ subconjunto. Tenga en cuenta que \ subconjunto no es \ subseteq.
scarfridge

66
"Necesito una respuesta de los programadores. Alguna forma lógica de explicar". - Bueno, ¿cómo se define "lógico"? La matemática es lógica. Cualquier cosa menos que un pensamiento riguroso está mal aquí. Puede intentar explicar el tema, pero sin digerir las matemáticas (de lo contrario, no difíciles) detrás de él no lo entenderá realmente, solo tendrá una sensación de lo que significa.
Tamás Szelei

2
@ Geek: ¿Supongo que te refieres a las matemáticas ? cs.SE también sería una buena dirección.
Raphael

Respuestas:


20

La notación Big Oh (O, Theta, Omega) trata sobre las tasas de crecimiento de las funciones.

Cuando implementa un algoritmo, tiene una cierta característica de cómo cambia el tiempo de ejecución cuando aumenta el conjunto de datos. Ahora, puede optimizar el algoritmo para que funcione más rápido en un factor de 100. Claro, esto es genial, pero esencialmente, sigue siendo el mismo algoritmo. Del mismo modo, en unos pocos años, las computadoras pueden ser el doble de rápido que en la actualidad.

La notación de Landau abstrae estos factores constantes. No le importa si un algoritmo fsiempre es dos veces más rápido que otro algoritmo g: tal vez gse pueda optimizar para que se ejecute 4 veces más rápido, o puede comprar hardware más rápido. Si lo miras desde esta perspectiva, podrías decir que son "lo mismo". (Eso no quiere decir que pueda (siempre) ignorar factores constantes en la práctica).

Big oh especifica un límite superior, es similar a la <=relación.

Estarás de acuerdo en que 1 < 2es cierto. ¿Eso significa que 1no puede ser menor que cualquier otro número? Ciertamente no. Hay una cantidad infinita de números que son más grandes que 1.

Con tasas de crecimiento, es similar. O(n)denota el conjunto de todas las funciones, que crecen linealmente (o más lentamente). O(n^2)Por otro lado, denota todas esas funciones, que crecen con la complejidad cuadrática (o más lenta). Estoy seguro de que estará de acuerdo en que una función lineal crece más lentamente que una función cuadrática.

Es por eso que una función puede estar en más de una clase "Big-oh".

Aquí hay una comparación de diferentes funciones con restricciones: (de las matemáticas concretas de Knuth)

comparaciones de tasa de crecimiento

De izquierda a derecha, las funciones crecen más rápido.

Además, ingrese la descripción de la imagen aquísignifica que n ^ 2 crece más rápido que n ^ 1 porque 2> 1.

Definiciones

definición Omega

"f crece más rápido o igual de rápido que g"

definición grande Oh

"f crece más lento o igual de rápido que g"

definición Theta

La combinación de los dos anteriores. Dice que la función fcrece "igualmente rápido" como g. Es una relación de equivalencia.

Interpretación

Digamos que tiene dos algoritmos, fy g.

Omega

Asumir f no en Theta de g, f en Omega de gsignifica que no importa su presupuesto, no hay una cantidad constante de potencia informática que pueda agregar a su sistema, de modo que fsiempre se ejecute tan rápido como sea posible g.

Grande oh

Suponiendo f no en Theta de g, f en Big Oh de gsignifica que si usted tiene datos suficientes, fsiempre se ejecutarán más rápido que g, no importa cuánto poder de cómputo que añadir a su sistema.

Prueba

Si realmente está tratando de demostrar esto, debe mostrar utilizando las definiciones de la notación de Landau que su función cumple las condiciones necesarias.

Por lo que necesita para encontrar valores para c, d, n_0de tal manera que la condición se cumple.

Aquí es cómo puede hacer eso para el límite inferior con c:

prueba

Es importante darse cuenta de que me define arbitrariamente ccomo ser más pequeño de lo que a-1está perfectamente bien. La definición de Theta (g) dice que "existe un c". Puede ser cualquier valor siempre que sea mayor que 0. ( aSin embargo, si es un número real positivo, deberá cambiar ligeramente la prueba, ya que a - 1podría ser negativa)

(Supongo aque es positivo, de lo contrario, la función siempre será negativa para valores grandes de n, lo que no tiene sentido para una función que denota el tiempo de ejecución).

Puedes intentar hacerlo para el límite superior, es bastante similar. Si no sabe cómo, puedo proporcionarle una prueba.

Sugerencia: comience con d > a + 1

Atención

Es importante que no lo demuestres al revés. Si asume que (an + b) está en O (n) y avanza desde allí, no ha demostrado lo que quería. Usted tendrá que verificar que todos sus pasos van en ambas manera, es decir, en lugar de =>que tenga <=>.


2
Eso es. Lástima que la gente se asuste por las matemáticas, en realidad es muy simple.
Tamás Szelei

Estados pregunta: "No necesitan rigor matemático aquí necesito una respuesta programadores ...." La notación utilizada en esta respuesta no se ve como una buena opción para la pregunta
mosquito

1
@gnat Hmm, pensé que la pregunta decía "probar" en un punto. De todos modos, he agregado interpretaciones para las definiciones matemáticas.
phant0m

@ phant0m gran respuesta. Exactamente lo que estaba buscando . Las matemáticas en la respuesta lo hicieron más sólido, a pesar de que "matemáticas" no se solicitó específicamente en la pregunta original. Gracias una tonelada.
Geek

@ Geek, me alegra que te guste. Si tiene más preguntas, no dude en preguntar y puedo aclarar / ampliar mi respuesta.
phant0m

5

Cuando se trata de polinomios, solo te importa el grado del polinomio. Es decir, an + bsolo te importa n. Si lo fuera an^3 + bn^2 + cn + d, solo te importaría n^3.

Por lo tanto , siempre habrá un polinomio con grado dΘ(n^d) . Sencillo.

Ahora necesitamos hablar sobre la diferencia entre Θ y O. Esencialmente, es la misma diferencia entre ==y <=respectivamente. Entonces Θ(n)significa que siempre está dentro de un factor constante de n. O(n)significa que siempre está dentro de un factor constante de no menor que n.

Esto significa que cualquier función en Θ(s), para cualquiera s, también estará en O(s). Además, si una función está en Θ(s)y ssiempre es menor que alguna otra función t, esa función está en O(t)pero no Θ(t).

En aras de la integridad, también hay Ω(n). Si Θrepresenta ==y Orepresenta <=, Ωrepresenta >=. Así an + bes en Ω(1), Θ(n)y O(n^2).

Como dije antes, es realmente fácil descubrir en qué clase de polinomios se encuentran: solo se mira el grado. Hay algunas otras funciones con las que también es fácil trabajar.

Cualquier función en forma de a^bnpara arbitraria ay bestá en Θ(a^n). Por cualquier valor c >= a, están en O(c^n). Cada polinomio está adentro O(2^n). Esencialmente, esto solo dice que las funciones exponenciales siempre superan a los polinomios y que la base de la función exponencial es importante.

Los logaritmos son lo opuesto. Por un lado, log_b nestá en Θ(log n)cualquier b. Esto significa que la base no importa para los logaritmos. Esto tiene sentido porque cambiar entre diferentes bases en logaritmos es simplemente multiplicar por una constante. Las funciones logarítmicas también están en O(n), es decir, una función logarítmica es más pequeña que cualquier polinomio (al menos de grado 1).

Dada una suma de estas funciones, la más grande "gana". Así n + log nes Θ(n)porque el ntérmino domina el log ntérmino. La multiplicación es más complicada. Para CS, lo único que necesita saber es que nlog nestá entre ny n^2.


1
bastante bueno. Según mi recuerdo anterior, la explicación es lo más cercana al Manual de Diseño de Algoritmo clásico que puede ser
mosquito

1
@Tikhlon agradable escribir Así que +1. Pero el que acepté fue aún mejor.
Geek

-2

Sin usar muchas matemáticas, tomas la función f (n) = an + b y sueltas todas las constantes, por lo que se ve así f (n) = n, luego tomas la "n" con el grado más alto como respuesta QED Θ (n)

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.