Crecimiento Asintotico
Crecimiento Asintotico
Crecimiento Asintotico
1
Clase pasada
Preferencias de
mujeres
0 1 2 3 4
Erika y Diseño
Análisis Yancey William
de Algoritmos, Zeus Soriano
Aurea Xavier Victor
Vargas (2020) 9
Hoy
● ¿Qué es la eficiencia?
● Herramientas:
○ Análisis del peor caso
○ Analizar el crecimiento asintótico de funciones
● Notación asintótica
● ¿Qué es la eficiencia?
● Herramientas:
○ Análisis del peor caso
○ Analizar el crecimiento asintótico de funciones
● Notación asintótica
¿Problemas?
¿Efectos del lenguaje de programación?
¿Efectos del procesador?
¿Efectos de la cantidad de memoria?
¿Efectos de otras cosas que se ejecutan
en la computadora?
¿Efectos de los valores de entrada?
¿Efectos del tamaño de entrada?
¿Problemas?
¿Efectos del lenguaje de programación?
¿Efectos del procesador?
¿Efectos de la cantidad de memoria?
¿Efectos de otras cosas que se ejecutan
en la computadora?
¿Efectos de los valores de entrada?
¿Efectos del tamaño de entrada?
Preferencias de
mujeres
0 1 2 3 4
Erika y Diseño
Análisis Yancey William
de Algoritmos, Zeus Soriano
Aurea Xavier Victor
Vargas (2020) 25
Gale-Shapley
Preferencias de
hombres
0 1 2 3 4
Preferencias de
mujeres
0 1 2 3 4
Erika y Diseño
Análisis Yancey William
de Algoritmos, Zeus Soriano
Aurea Xavier Victor
Vargas (2020) 26
Fuerza Bruta
Preferencias de
hombres
0 1 2 3 4
Preferencias de
mujeres
0 1 2 3 4
Erika y Diseño
Análisis Yancey William
de Algoritmos, Zeus Soriano
Aurea Xavier Victor
Vargas (2020) 27
Fuerza Bruta
Preferencias de
hombres
0 1 2 3 4
Preferencias de
mujeres
0 1 2 3 4
Preferencias de
mujeres
0 1 2 3 4
Preferencias de
mujeres
0 1 2 3 4
Implementación Implementación
“ingenua” (GS) eficiente(GS)
Operaciones n3 n2
Operaciones n3 n2 n!*n2
Operaciones n3 n2 n!*n2
Con un truco de
visualización: log2
● Estas cosas son muy importantes, pero no son el objetivo de esta clase.
● Estas cosas son muy importantes, pero no son el objetivo de esta clase.
● Queremos una forma de hablar sobre el tiempo de ejecución de un
algoritmo, independiente de estas consideraciones.
Ventajas
Abstrae sin considerar las
especificaciones de hardware y
lenguaje de programación.
Ventajas
Abstrae sin considerar las
especificaciones de hardware y
lenguaje de programación.
Ventajas Desventajas
Abstrae sin considerar las
especificaciones de hardware y Solo tiene sentido si n es
lenguaje de programación. grande (en comparación con
los factores constantes).
Hace que el análisis de algoritmos
sea mucho más manejable.
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020) 51
Crecimiento asintótico:
Objetivo: crear
herramientas para
ayudar a clasificar de
forma aproximada
los tiempos de
ejecución del
algoritmo
● ∃: “Existe”
● ∃: “Existe”
● ∀: “Para todo”
● ∃: “Existe”
● ∀: “Para todo”
● Ejemplo:
○ ∀ estudiante de ADA, ∃ un problema de algoritmos que
realmente emociona al estudiante.
● ∃: “Existe”
● ∀: “Para todo”
● Ejemplo:
○ ∀ estudiante de ADA, ∃ un problema de algoritmos que
realmente emociona al estudiante.
● Declaración mucho más fuerte:
● ∃: “Existe”
● ∀: “Para todo”
● Ejemplo:
○ ∀ estudiante de ADA, ∃ un problema de algoritmos que
realmente emociona al estudiante.
● Declaración mucho más fuerte:
○ ∃ un problema de algoritmos de manera que, ∀
estudiantes de ADA, cada estudiante se emociona por el
problema.
● ∃: “Existe”
● ∀: “Para todo”
● Ejemplo:
○ ∀ estudiante de ADA, ∃ un problema de algoritmos que
realmente emociona al estudiante.
● Declaración mucho más fuerte:
○ ∃ un problema de algoritmos de manera que, ∀
estudiantes de ADA, cada estudiante se emociona por el
problema.
● Formalmente,
𝑇(𝑛) = 𝑂(𝑓(𝑛))
⟺
∃𝑐, 𝑛0 > 0 𝑠. 𝑡. ∀𝑛 ≥ 𝑛0,
Análisis y Diseño de Algoritmos, Aurea0 ≤ 𝑇(𝑛)
Soriano 𝑐 ⋅𝑓(𝑛)
Vargas≤(2020) 72
O (…) significa un límite superior
● Formalmente,
𝑇(𝑛) = 𝑂(𝑓(𝑛))
⟺
∃𝑐, 𝑛0 > 0 𝑠. 𝑡. ∀𝑛 ≥ 𝑛0,
Análisis y Diseño de Algoritmos, Aurea0 ≤ 𝑇(𝑛)
Soriano 𝑐 ⋅𝑓(𝑛)
Vargas≤(2020) 73
Big O
T(n) es O (f(n)) si
● g(n) = 2, f(n) = 1.
● g(n) = O(f(n)) (y también also f(n) = O(g(n)))
● g(n) = 2, f(n) = 1.
● g(n) = O(f(n)) (y también also f(n) = O(g(n)))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
Vamos a probar que f(n) es O(g(n))
● f(n) = n+7
● g(n) = n
3. ⇔ n>= 7/(c-1)
● f(n) = n+7
● g(n) = n
3. ⇔ n>= 7/(c-1)
4. Seleccionamos c=2 y n0=7.
● f(n) = n+7
● g(n) = n
3. ⇔ n>= 7/(c-1)
4. Seleccionamos c=2 y n0=7.
5. Por tanto, se sostiene que existen dos constantes positivas c y n0 tales
que n + 7 <= cn para n> = n0.
(n>=7) y (n>=n0)<=> (n>=7)
● f(n) = n+7
● g(n) = n
3. ⇔ n>= 7/(c-1)
4. Seleccionamos c=2 y n0=7.
5. Por tanto, se sostiene que existen dos constantes positivas c y n0 tales
que n + 7 <= cn para n> = n0.
(n>=7) y (n>=n0)<=> (n>=7)
6. Como la afirmación se sostiene, podemos concluir que n+7 es O(n).
● f(n) = n2
● g(n) = n
Vamos a probar que f(n) NO es O(g(n))
● f(n) = n2
● g(n) = n
Vamos a probar que f(n) NO es O(g(n))
● f(n) = n2
● g(n) = n
Vamos a probar que f(n) NO es O(g(n))
● f(n) = n2
● g(n) = n
Vamos a probar que f(n) NO es O(g(n))
● f(n) = n2
● g(n) = n
Vamos a probar que f(n) NO es O(g(n))
● f(n) = n2
● g(n) = n
Vamos a probar que f(n) NO es O(g(n))
● f(n) = 4n
● g(n) = 8n
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
4. 4n <= c*8n
4n <= 1/4*8n
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
4. 4n <= c*8n
4n <= 1/4*8n
4n <= 1/4*(2n * 4n)
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
4. 4n <= c*8n
4n <= 1/4*8n
4n <= 1/4*(2n * 4n)
4n/4n <= 1/4*(2n * 4n)/4n
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
4. 4n <= c*8n
4n <= 1/4*8n
4n <= 1/4*(2n * 4n)
4n/4n <= 1/4*(2n * 4n)/4n
1 <= 1/4*(2n)
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
4. 4n <= c*8n
4n <= 1/4*8n
4n <= 1/4*(2n * 4n)
4n/4n <= 1/4*(2n * 4n)/4n
1 <= 1/4*(2n)
1 <= 1/22*(2n)
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
3. seleccionamos n0 = 2
c = 1/22= ¼
4. 4n <= c*8n
4n <= 1/4*8n
4n <= 1/4*(2n * 4n)
4n/4n <= 1/4*(2n * 4n)/4n
1 <= 1/4*(2n)
1 <= 1/22*(2n)
1 <= (2n-2) para todo n0 = 2
Análisis y Diseño de Algoritmos, Aurea Soriano Vargas (2020)
Ejemplo 6
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
● f(n) = 4n
● g(n) = 8n
Vamos a probar que f(n) es O(g(n))
T(n) = O(f(n))
–No transitiva:
•f(n) = 5n3; g(n) = 3n2
•f(n) = O(n3) = g(n)
pero
T(n) = O(f(n))
–No transitiva:
•f(n) = 5n3; g(n) = 3n2
•f(n) = O(n3) = g(n)
pero
–Notación alternativa:
1) Descartar constantes
1) Descartar constantes
1) Descartar constantes
O(2n) => O(n)
O(1 + n/2 + 100) => O(n)
2) Eliminar términos menos significativos
1) Descartar constantes
O(2n) => O(n)
O(1 + n/2 + 100) => O(n)
2) Eliminar términos menos significativos
Decimos "T(n) es Ω(f (n))" si f(n) crece como máximo tan rápido como T(n) cuando n
aumenta.
Decimos "T(n) es Ω(f (n))" si f(n) crece como máximo tan rápido como T(n) cuando n
aumenta.
Formalmente:
● Formalmente,
𝑇(𝑛) = 𝑂(𝑓(𝑛))
⟺
∃𝑐, 𝑛0 > 0 𝑠. 𝑡. ∀𝑛 ≥ 𝑛0,
Análisis y Diseño de Algoritmos, Aurea0 ≤ 𝑇(𝑛)
Soriano 𝑐 ⋅𝑓(𝑛)
Vargas≤(2020) 139
O(…) significa un límite superior, y
Ω(…) significa un límite inferior
Decimos "T(n) es Ω(f (n))" si f(n) crece como máximo tan rápido como T(n) cuando n
aumenta.
Formalmente:
Decimos "T(n) es Ω(f (n))" si f(n) crece como máximo tan rápido como T(n) cuando n
aumenta.
Formalmente:
Decimos "T(n) es Ω(f (n))" si f(n) crece como máximo tan rápido como T(n) cuando n
aumenta.
Formalmente:
T(n) es Ω(f(n)) si
T(n) = O(f(n))
-y-
T(n) = Ω(f(n))
● O () - límite superior
○ T (n) ≤ c · f (n), donde c ≥ 0 para todo n ≥ n0
● Ω () - límite inferior
○ T (n) ≥ c · f (n), donde c ≥ 0 para todo n ≥ n0
● Θ () - límite ajustado
○ Tanto O () como Ω ()
● O () - límite superior
○ T (n) ≤ c · f (n), donde c ≥ 0 para todo n ≥ n0
● Ω () - límite inferior
○ T (n) ≥ c · f (n), donde c ≥ 0 para todo n ≥ n0
● Θ () - límite ajustado
○ Tanto O () como Ω ()
Afirmación:
Afirmación:
(b) Si f1, f2, ..., fk son cada una O(h), entonces f1 + f2 + ...+ fk es O(h)
Por ejemplo:
𝑇(𝑛) = o(𝑓(𝑛))
⟺
∃𝑐, 𝑛0 > 0 𝑠. 𝑡. ∀𝑛 ≥ 𝑛0,
0 ≤ 𝑇(𝑛) < 𝑐 ⋅𝑓(𝑛)
¿Cuál es el patrón?!?!?!?!
Tres parámetros:
a: número de subproblemas
b: factor por el cual se reduce el tamaño de entrada
d: necesidad de nd trabajos para crear todos los
subproblemas y combinar sus soluciones.
Muchos símbolos
aquellos son...
Tres parámetros:
a: número de subproblemas
b: factor por el cual se reduce el tamaño de entrada
d: necesidad de nd trabajos para crear todos los
subproblemas y combinar sus soluciones.
Supongamos que
LISTA DE EJERCICIOS 1
189