¿Cómo es posible este gráfico Big-theta para un algoritmo de búsqueda lineal?

Notación Big-O (que es un término general que abarca [matemáticas] O (f (n), \ Theta (f (n)), \ omicron (f (n)), \ Omega (f (n)) [/ math ], etc.) se refiere al crecimiento de la función cuando [math] n [/ math] es grande. Decir que [math] f (n) = \ Theta (g (n)) [/ math] significa que hay son dos constantes (positivas) [matemáticas] a, b [/ matemáticas] tales que para algunas [matemáticas] N [/ matemáticas], si [matemáticas] n> N, ag (n) \ leq f (n) \ leq bg (n) [/ matemáticas].

Como ejemplo, considere [math] f (n) = 45n + 100 \ sin n [/ math]. Esta función fluctúa enormemente, pero puedo afirmar con certeza que cuando [matemáticas] n> 200, 44n <45n -100 <45n – 100 \ sen n <45n + 100 <46n [/ matemáticas], por lo tanto, puedo afirmar que [ matemáticas] 45n + 100 \ sin n = \ Theta (n) [/ matemáticas]. Las dos constantes son [matemáticas] a = 44, a = 46 [/ matemáticas].

Para tomar un ejemplo más realista, considere el tipo de selección:

[código]

int [] SelectionSort (int [] array) {

var n = array.Length;

para (var i = 0; i <n; i ++) {

var más grande = i;

para (var j = i; j <n; j ++) {

if (matriz [j]> matriz [más grande])

mayor = j;

}

var temp = matriz [i]; matriz [i] = matriz [más grande]; matriz [más grande] = temp;

}

matriz de retorno;

}

[/código]

Este código hace [math] \ frac {n (n-1)} {2} [/ math] comparaciones, y [math] n [/ math] intercambios. Si cada intercambio lleva tiempo [math] s [/ math] y cada tiempo de comparación [math] c [/ math], y hay tiempo [math] d [/ math] sobrecarga que se realiza una vez cada vez que se llama a esta función, independientemente de qué tan grande es la matriz, entonces el tiempo total utilizado es [matemática] T (n) = \ frac {n (n-1)} {2} c + sn + d = \ frac {c} {2} n ^ 2 + \ frac {2s-c} {2} n + d = \ Theta (n ^ 2) [/ math]. Puedo decir que, para grandes [matemáticas] n [/ matemáticas], el primer término será el término dominante. En cualquier momento cuando [matemáticas] n> \ frac {2s} {c} [/ matemáticas] el primer término será mayor que el segundo, y cuando [matemáticas] n> \ frac {d} {| 2s-c | } [/ math] el segundo término va a ser más grande que el tercero. Entonces, para grandes [matemáticas] n [/ matemáticas], puedo decir que [matemáticas] \ frac {c} {4} n ^ 2 <T (n) <cn ^ 2 [/ matemáticas], entonces [matemáticas] T ( n) = \ Theta (n ^ 2) [/ matemáticas].

En realidad, en este análisis no me importa cuál debe ser el valor exacto de [matemáticas] N [/ matemáticas], ni cuáles son los valores exactos de [matemáticas] a, b [/ matemáticas]. Puedo calcularlo, pero como puede ver, depende de la naturaleza exacta de la implementación.

¡Buenas tardes!

Se desprende de la definición de orden asintótico (Big Oh y Big Omega). Tiene que ser eventualmente no decreciente. Eventualmente, no decreciente significa que puede haber caídas, pero existe un valor (estos serían valores de n en la línea discontinua o después de él) donde se satisface para cualquier n y no ocurren más caídas de esa manera.

Las constantes no tienen que ser nada prácticas, solo tienen que satisfacer la definición. Solo necesita una constante real positiva y el valor para el que se mantiene la desigualdad. Tenga en cuenta que para Big-Theta, necesita satisfacer a Big-Oh y Big-Omega, no necesita mostrarlos al mismo tiempo como en el diagrama. Pueden tener diferentes constantes.


En cuanto a la caída, podría ser que la función de crecimiento tenga para casos base (valores pequeños de n) que trabaje más (por alguna extraña razón). Sugiere que dos cosas se hacen de manera diferente en el tiempo de ejecución del algoritmo. Típicamente, las funciones de crecimiento crecen con respecto al tamaño de entrada (en este caso, n).

¡Espero que esto ayude!

More Interesting

¿De cuántas maneras podemos dividir una cadena de 10 caracteres en más de 2 subcadenas consecutivas no vacías?

¿Cómo los operadores matemáticos mapean objetos de un punto a otro en el espacio?

¿Existe un algoritmo generalizado para convertir una malla de superficie triangular 3D en una malla de volumen tetraédrico?

Si [math] \ mathbf F [/ math] no es un campo vectorial conservador, ¿eso significa que no hay una función [math] f [/ math] tal que [math] \ nabla f = \ mathbf F [/ math] ?

¿Cuál es el método para encontrar el valor aproximado de la potencia de dos (2 ^ x) sin usar una calculadora?

¿Cuál es la complejidad computacional de la satisfacción de resolución de restricciones sobre enteros? He leído que es polinomial para las igualdades y NP-duro para las desigualdades, pero, ¿no puedes convertir siempre una restricción de desigualdad en una igualdad agregando vars de holgura?

¿Cuánto se puede ocultar una imagen antes de que sea irreconocible?

¿No fue [math] flag [B] [/ math] modificado por thread [math] B [/ math] antes de [math] read_ {B} (flag [A] == false) [/ math]? ¿Por qué es una contradicción?

¿Por qué es importante la teoría de grafos?

Cómo resolver este problema matemático discreto

¿Cómo se crean los rompecabezas de sudoku a gran escala?

¿Qué es el helecho Barnsley?

¿Para qué se utiliza una serie de Fourier?

¿Pueden los lenguajes naturales ser completamente modelados por las máquinas de Turing?

¿Puedo ingresar una máquina Turing en otra máquina Turing? Si es así, ¿cómo? Y si no, ¿por qué?