El documento explica los conceptos básicos de análisis de complejidad de algoritmos, incluyendo notación Big O y Θ. Define las funciones de tiempo de ejecución asintótico para diferentes tipos de bucles anidados y explica que la complejidad de un algoritmo depende del caso más común o lento.
En la ciencia de la computación los algoritmos son más importantes que los LP o que las computadoras; la solución de un problema haciendo uso de las computadoras requiere por una parte un algoritmo o método de resolución y por otra un programa o codificación del algoritmo en un LP. Ambos componentes tienen importancia; pero la del algoritmo es absolutamente indispensable; sabemos que un algoritmo es una secuencia de pasos para resolver un problema.
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
En la ciencia de la computación los algoritmos son más importantes que los LP o que las computadoras; la solución de un problema haciendo uso de las computadoras requiere por una parte un algoritmo o método de resolución y por otra un programa o codificación del algoritmo en un LP. Ambos componentes tienen importancia; pero la del algoritmo es absolutamente indispensable; sabemos que un algoritmo es una secuencia de pasos para resolver un problema.
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Tecnológico Nacional de México
Ingeniería en Sistemas Computacionales
Programación orientada a objetos
Unidad 1: introduccion al paradigma de la POO
Programación en C++
Algoritmos de Ordenamiento Externo.
Programacin 3. Universidad de Cuenca.
Abad F.,Munoz C.,Fajardo P.
Marco Teorico: Ordenamiento Directo, Polifase, Natural, Balanceada.
Tecnológico Nacional de México
Ingeniería en Sistemas Computacionales
Programación orientada a objetos
Unidad 1: introduccion al paradigma de la POO
Programación en C++
Algoritmos de Ordenamiento Externo.
Programacin 3. Universidad de Cuenca.
Abad F.,Munoz C.,Fajardo P.
Marco Teorico: Ordenamiento Directo, Polifase, Natural, Balanceada.
análisis a priori, a posteriori, costo de algoritmos, análisis iterativo, análisis recursivo, complejidad del algoritmo, orden de complejidad, notación asintótica
Esta presentación es parte del contenido del curso de Estructuras de Datos I impartido en la Universidad Rafael Landívar durante el año 2017.
Incluye los temas:
1.1 Complejidad de un algoritmo
• Espacial
• Temporal
1.2 Análisis asintótico
• Notaciones
• Clasificación de algoritmos
Creado por Ing. Alvaro Enrique Ruano
Tema 1 de la asignatura "Introducción a la programación".
Asignatura de 6 ECTS obligatoria del Grado de Ingeniería del Software de la Universidad Rey Juan Carlos de Madrid.
Grupo 2 de mañana impartido por Oriol Borrás Gené
ROMPECABEZAS DE ECUACIONES DE PRIMER GRADO OLIMPIADA DE PARÍS 2024. Por JAVIE...JAVIER SOLIS NOYOLA
El Mtro. JAVIER SOLIS NOYOLA crea y desarrolla el “ROMPECABEZAS DE ECUACIONES DE 1ER. GRADO OLIMPIADA DE PARÍS 2024”. Esta actividad de aprendizaje propone retos de cálculo algebraico mediante ecuaciones de 1er. grado, y viso-espacialidad, lo cual dará la oportunidad de formar un rompecabezas. La intención didáctica de esta actividad de aprendizaje es, promover los pensamientos lógicos (convergente) y creativo (divergente o lateral), mediante modelos mentales de: atención, memoria, imaginación, percepción (Geométrica y conceptual), perspicacia, inferencia, viso-espacialidad. Esta actividad de aprendizaje es de enfoques lúdico y transversal, ya que integra diversas áreas del conocimiento, entre ellas: matemático, artístico, lenguaje, historia, y las neurociencias.
Instrucciones del procedimiento para la oferta y la gestión conjunta del proceso de admisión a los centros públicos de primer ciclo de educación infantil de Pamplona para el curso 2024-2025.
2. Repaso de comportamiento asintótico
• El eliminar todas estas constantes
ornamentales hacen más sencillo identificar el
comportamiento asintótico de una función
contadora-de-instrucciones de un programa.
• Cualquier programa que carezca de bucles
tendrá una f(n) = 1, ya que el número de
instrucciones que requiere es simplemente
una constante (a menos que utilice recursión).
3. Repaso de comportamiento asintótico
• Cualquier programa con un único bucle que
vaya desde 1 a n tendrá f(n) = n, ya que
ejecutará un número fijo de instrucciones
antes del bucle, un número fijo de
instrucciones después del bucle y un número
constante de instrucciones dentro del bucle
que corre n veces.
4. Regla General 1
• El análisis de programas sencillos se puede
hacer contando los bucles anidados que
contiene el programa.
– Un sólo bucle sobre n ítems genera f(n)=n.
– Un bucle dentro de otro bucle f( n ) = n2.
– Un bucle dentro de un bucle que está dentro de
otro bucle genera f( n ) = n3.
5. Regla General 2
• Dado un conjunto de bucles que son
secuenciales, el más lento de ellos determina
el comportamiento asintótico del programa.
• Dos bucles anidados, seguidos por un solo
bucle, asintóticamente es lo mismo que los
bucles anidados por sí solos, ya que los bucles
anidados dominan el bucle individual.
6. Notación Theta
• Ahora, enfoquémonos en la sofisticada
notación que los científicos computacionales
utilizan.
• Cuando hayamos encontrado la f asintótica
exacta, diremos que nuestro programa es
Θ(f( n )).
7. Notación Theta
• Por ejemplo, los programas anteriores son
• Θ( 1 ), Θ( n2 ) y Θ( n2 ) respectivamente.
• Θ(n) se pronuncia "theta de n".
• A veces diremos que f(n), la función original
que cuenta las instrucciones que incluyen las
constantes es Θ(algo)
8. Notación Theta
• Por ejemplo, podremos decir que f( n ) = 2n es
una función que es Θ( n ) - nada nuevo en
esto.
• También podremos escribir 2n ∈ Θ( n ), lo cual
se pronuncia " dos n es theta de n”.
9. Notación Theta
• No se confunda con esta notación: Todo lo
que está diciendo es que si hemos contados el
número de instrucciones que un programa
requiere y que si esa cantidad es 2n, entonces
el comportamiento asintótico de nuestro
algoritmo es descrito por n, a lo cual llegamos
al eliminar las constantes.
10. Notación Theta
• Dada esta notación, los siguientes son algunos
enunciados puramente matemáticos.
n6 + 3n ∈ Θ( n6 )
2n + 12 ∈ Θ( 2n )
3n + 2n ∈ Θ( 3n )
nn + n ∈ Θ( nn )
11. Notación Theta
• Llamamos esta función, esto es, lo que
colocamos dentro de Θ (aquí) como
complejidad temporal, o simplemente
complejidad de nuestro algoritmo.
12. Notación Theta
• Entonces, un algoritmo con Θ(n) es de
complejidad n.
• También tenemos nombres especiales para
Θ(1), Θ(n), Θ(n2) y Θ(log(n)) ya que aparecen
bastante seguido.
• Decimos que un algoritmo Θ(1) es un
algoritmo temporalmente-constante, Θ(n) es
linear, θ(n2) es cuadrático y Θ(log(n)) es
logarítmico
13. Notación Big O
• Para evaluar la complejidad de programas
complicados es modificarlos mentalmente
para empeorarlos de manera que sean más
fáciles de analizar y luego encontrar la
complejidad de este nuevo programa que
generamos.
14. Notación Big O
• Si podemos encontrar la complejidad del
programa peor, entonces sabremos que
nuestro programa original es como máximo
así de malo, o mejor que eso.
15. Notación Big O
• De esta forma, si encontramos una buena
complejidad en nuestro programa modificado,
el cual es peor que el original, podremos saber
que nuestro programa original también tendrá
una complejidad bastante buena, tan buena
como la del programa alterado, o incluso
mejor.
16. Notación Big O
• Si esto es así, diremos que el algoritmo original es
O( complejidad peor ).
• Por ejemplo O( n2 ) se pronuncia "O-Grande de n
cuadrado".
• Lo que esto nos dice es que asintóticamente
nuestro programa no es peor que n2.
• Puede que sea mejor que eso, o quizá es igual
que eso.
• Dicho sea de paso, si de hecho nuestro programa
es Θ( n2 ), aún podemos decir que es O( n2 ).
17. Notación Big O
• Para ayudarle a entenderlo, imagine que
alteramos el programa original de un modo
que no cambie tanto, pero que aún así lo hace
algo peor.
• Por ejemplo podemos añadir instrucciones
insignificantes al comienzo del programa.
18. Notación Big O
• Haciendo esto alteraremos la función
contadora-de-instrucciones mediante una
simple constante, la cual se ignora en el
comportamiento asintótico.
• Por esto, un programa que es Θ( n2 ) también
será O( n2 ).
19. Notación Big O
• Pero, a la inversa, un programa que es O( n2 )
podría no ser Θ( n2 ). Por ejemplo, cualquier
programa que es Θ( n ) también es O( n2 )
además de ser O( n ).
20. Notación Big O
• Si nos imaginamos que un programa Θ( n ) es
un bucle sencillo “for” que se repite n veces,
podremos empeorarlo al envolverlo en otro
bucle “for” que también se repita n veces,
generando así un programa con f( n ) = n2.
21. Notación Big O
• Si generalizamos esto, cualquier programa que
sea Θ( a ) es O( b ) cuando b es peor que a.
• Note que nuestra alteración al programa no tiene
porqué darnos un programa que sea equivalente
o comparable a nuestro programa original.
• Solamente tiene realizar más instrucciones que el
original para un n dado, ya que simplemente lo
estaremos usando para contar instrucciones, no
para resolver nuestro problema concreto.
22. Notación Big O
• Por tanto, afirmar que nuestro programa es
O( n2 ) es quedarse a resguardo: Hemos
analizado nuestro algoritmo y hemos
encontrado que nunca es peor que n2.
• Pero podría darse el caso de que de hecho sea
n2.
• Esto nos entrega un buen estimativo de qué
tan rápido corre nuestro programa.
23. Tarea MRR 7
• De los programas de ordenamiento que
hemos visto (inserción y burbuja), modifiquen
su análisis asintótico para que encuentren una
notación Big O adecuada para dichos
algoritmos.
• En tu cuaderno MRR explica cuál es tu
propuesta de modificación de los algoritmos
de ordenamiento para obtener una notación
Big O de los mismo. Justifica tu respuesta.