Vous êtes sur la page 1sur 5

Algoritmo 1

Para el primer caso vamos a analizar un algoritmo que permite evaluar un polinomio P(x) de grado
N, Determinando si este presenta una potencia par o impar, el algoritmo se presenta a continuación:

Teniendo presente los siguientes polinomios:

𝐹(𝑥) = 𝑎𝑥 + 𝑏 → 𝑔𝑟𝑎𝑑𝑜 𝑛 = 1

𝑃(𝑥) = 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 → 𝑔𝑟𝑎𝑑𝑜 𝑛 = 2

𝐺(𝑥) = 𝑎𝑥 3 + 𝑏𝑥 2 + 𝑐𝑥 + 𝑑 → 𝑔𝑟𝑎𝑑𝑜 𝑛 = 3

El valor que tomara n va a ser el valor del exponente más grande que acompañe a la variable “x”,
Aunque anteriormente encontramos 3 polinomios de grado uno, dos y tres, debemos resaltar que
el valor de n para el algoritmo presentado puede tomar cualquier valor entre 0 e ∞.

Como entrada para nuestro algoritmo vamos a tomar el grado del polinomio (N). para el polinomio
presentado tenemos que el bucle exterior se ejecuta N veces, mientas que el bucle interior se
ejecuta de la siguiente manera:

1 + 2 + 3 + 4 + ⋯ . . +𝑁 𝑉𝑒𝑐𝑒𝑠
Para analizar la complejidad del algoritmo debemos determinar la complejidad de la anterior suma,
la cual se puede determinar por medio del principio de inducción, el cual nos muestra que:
𝑁(𝑁 + 1)
1 + 2 + 3 + 4 + ⋯ . . +𝑁 =
2
Si determinamos la notación asintótica tenemos que:

𝑂(𝑛2 )
Con esto podemos determinar el tiempo estimado de ejecución, basándonos en la siguiente tabla:

Como podemos observar a medida que aumenta el valor de n, también aumenta el tiempo de
ejecución, para comprender mejor esto se puede observar la siguiente grafico donde muestra la
complejidad del algoritmos n es mucho mayor en comparación con potencias de otro Orden.
Sin embargo, revisando múltiples fuentes de información se pudo evidenciar gran cantidad de
posibles algoritmos que tengan la misma función pero que su complejidad sea menor. Se pudo
encontrar que al analizar la función potencia se debe tener precaución, pues si el exponente es par,
el problema tiende a tener una evolución de forma logarítmica, mientras que si este es impar, su
comportamiento va ser lineal. Lo cual se puede ver en la forma de que si “j” es parr entonces es de
esperarse que “j-1” sea impar. Un posible algoritmo que reduzca la complejidad puede ser:

Como se puede observar:

Para cuando el exponente es impar se tiene: Mientras que cuando el exponente es par, se
tiene:
𝑂(𝑛) 𝑂(log 𝑛)

Habiendo N coeficientes y C distintos, es imposible que se pueda encontrar un algoritmo que nos
presente un orden inferior de complejidad. Sin embargo, se pueden encontrar algoritmos de
complejidad idéntica al de la anterior, como es el caso del siguiente algoritmo:

Se debe tener presente que aunque los logaritmos tienen idéntico orden de complejidad, se debe
tener presente que sus tiempo de ejecución NO son los mismos, pues el ultimo algoritmo ejecuta N
sumas y N multiplicaciones, mientras que el penúltimo requiere N sumas y 2N multiplicaciones. Por
lo cual es de esperar que el ultimo algoritmo se ejecute en la mitad del tiempo que el anterior.
Algoritmo 2

Como se puede observar en la imagen el código corresponde a un algoritmo burbuja de


ordenamiento. Este funciona revisando cada elemento de la lista que va a ser ordenada con el
siguiente, intercambiándolo de posición si están en orden equivocado. Es necesario revisar varias
veces toda la lista hasta que no se necesiten más intercambios, lo cual significa que la lista está
ordenada.

Este procedimiento de la burbuja se realiza de la siguiente manera: inicia comparando desde la


primer casilla (casilla 0), numero tras número hasta que encuentre uno mayor, si este se comprueba
es el mayor de todo el vector entonces se llevara a la ultima casilla, si no es así, será remplazado por
uno mayor que él. Este procedimiento se realizará hasta que se haya ordenado todas las casillas del
vector.

Análisis de la complejidad:

Se puede observar que el for de la 3ra línea itera n veces, por cada iteración del for de la línea 3, el
for de la línea 4 itera n-1 veces, por lo tanto, el número de veces que se ejecuta la línea 5 es (n)(n-
1) y el numero de intercambios que se realizan en la línea 6 no será mayor a (n)(n-1). Luego, el
número de operaciones cada vez que itera el for de la línea 4 es menor o igual que:

2(𝑛)(𝑛 − 1) = 2𝑛2 − 2𝑛

Se puede observar que para 2𝑛2 > 2𝑛2 − 2𝑛 para cualquier valor de n positivo, por lo que se
espera que el tiempo de ejecución desde la línea 3 hasta la línea 7 sea de orden 𝑂(𝑛2 ) o
cuadrático.

Si observamos la tabla y el grafico del algoritmo anterior, podemos observar que el tiempo de
ejecución para este tipo de algoritmos es muy alto. Con lo cual podemos concluir que a pesar de
que este algoritmo es muy sencillo, su orden 𝑂(𝑛2 ) lo hace muy ineficiente para usarlo en listas que
tengan un numero reducido de elementos.
𝑛
Si continuamos analizándolo podemos observar que el for de la línea 8 itera 2 veces, y el número de
𝑛 𝑛
intercambios que se realizan también es 2 , eso significa que cada una de las 2 iteraciones realiza el
mismo número de operaciones. Si denotáramos este numero de operaciones como m tendríamos
que:
𝑛 𝑚
𝑚 = 𝑛
2 2
𝑚
Dado que es una constante, se puede observar que existe una cantidad de tiempo constante, por
2
lo que el tiempo de ejecución entre las líneas 8 y 9 de complejidad 𝑂(𝑛).

Tenemos que primero se ejecuta el algoritmo de complejidad 𝑂(𝑛2 ) el cual va de la línea 1 a la 7


y posteriormente se ejecuta el algoritmo de complejidad 𝑂(𝑛) en cual se corre de la línea 8 a la 9,
teniendo presenta la regla de la suma, podemos concluir que el tiempo de ejecución es de
complejidad:

𝑂(max(𝑛, 𝑛2 )) = 𝑂(𝑛2 )