Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 2. Análisis de
Complejidad
Algorítmica y Complejidad
Introducción
Problemas y Funciones: Ejemplos
2 4 1 3 2 4 1 3
¿Cuánto tarda el algoritmo en
array array
ordenar?
• Dependerá del computador donde
Ordenar ALGORITMO:
se ejecuta.
Ordenación por
la lista
Inserción
ESTUDIAREMOS UNA
MEDIDA INDEPENDIENTE
array array DEL COMPUTADOR
1 2 3 4 1 2 3 4
1. Introducción
1
1
11/9/18
Introducción
Problemas y Funciones: Ejemplos
2 4 1 3 2 4 1 3
¿Cuánto tarda el algoritmo en
array array
ordenar?
• Dependerá de la ENTRADA (lista a
Ordenar ALGORITMO:
ordenar).
Ordenación por
la lista
Inserción • Estudiaremos caracterísCcas de la
ENTRADA que reflejen el tamaño
del problema:
array array
• Número de elementos del
1 2 3 4 1 2 3 4 array (N).
1. Introducción
1
Introducción
Problemas y Funciones: Ejemplos
1 2 3 4 2 4 1 3
¿Cuánto tarda el algoritmo en
array array
ordenar?
• Dependerá de la ENTRADA (lista a
ALGORITMO: ALGORITMO:
ordenar).
Ordenación por Ordenación por
Inserción Inserción • Estudiaremos caracterísCcas de la
ENTRADA que reflejen el tamaño
del problema:
array array
• Número de elementos del
1 2 3 4 1 2 3 4 array (N).
Para arrays con el mismo número de elementos, el algoritmo tarda un Cempo diferente.
1. Introducción
1
2
11/9/18
Introducción
MoKvación
N: Tamaño del Problema
T1 (N)
Tiempo que 1 h
asumimos para Circunstancia
realizar cómputos Coyuntural
N1 N2
N
ALGORITMO 2 es preferible en nuestro
1. Introducción computador
1
Introducción
MoKvación
N: Tamaño del Problema
A medida que
Compramos un computador con doble capacidad de proceso: T2 (N) aumenta la capacidad
de proceso la
t
diferencia aumenta
T2 (N)
T1 (N)
3
11/9/18
Introducción
MoKvación
N: Tamaño del Problema
T2 (N)
Circunstancia t
Coyuntural
T1 (N)
ALGORITMO 2 es
preferible en
T1 (100)
nuestro T2 (100)
computador
100
N
Tamaño del problema actual
1. Introducción
1
Introducción
MoKvación
N: Tamaño del Problema
A medida que
T2 (N) aumenta el tamaño
ALGORITMO 1 es t del problema la
ahora preferible diferencia aumenta
en nuestro T2 (200)
computador T1 (N)
T1 (200)
100 200
N
Tamaño del problema actual
1. Introducción
1
4
11/9/18
Notación AsintóKca
Crecimiento
Notación: O Ω Θ
2 4 1 3
t T (N) ¿Cuánto tarda el algoritmo en
array
ordenar?
Estudiaremos el • Dependerá de la ENTRADA (lista a
crecimiento ALGORITMO:
ordenar).
asintóKco Ordenación por
Inserción • Estudiaremos caracterísCcas de la
ENTRADA que reflejen el tamaño
del problema:
N array
• Número de elementos del
1 2 3 4 array (N).
2. Notación AsintóKca
2
Notación AsintóKca
Notación O: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
c·f (N)
t T (N) Definición de O “Cota asintó/ca Superior”
f (N)
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
2. Notación AsintóKca
2
5
11/9/18
Notación AsintóKca
Notación O: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
c·f (N)
t T (N) Definición de O “Cota asintó/ca Superior”
f (N)
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
n0
2. Notación AsintóKca
2
Notación AsintóKca
Notación O: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
c·f (N)
t f (N) = N2 + 3 T (N)
Definición de O “Cota asintó/ca Superior”
T (N) =2N+3
f (N)
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
n0
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
6
11/9/18
Notación AsintóKca
Notación O: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
t f (N) = N2 + 3
Definición de O “Cota asintó/ca Superior”
T (N) =2N+3
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
c=1
Se puede entender como “T ≤ f”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación O: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
t f (N) = N2 + 3
Definición de O “Cota asintó/ca Superior”
T (N) =2N+3
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
c=1 n0 = 2
Se puede entender como “T ≤ f”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
7
11/9/18
Notación AsintóKca
Notación O: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
Ejemplo 2
t f (N) = N2 + 3
Definición de O “Cota asintó/ca Superior”
T (N) = 2N+1
T (N) =2N+3
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
f (N)=N
Se puede entender como “T ≤ f”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación O: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
c·f (N) = 3N
Definición de O “Cota asintó/ca Superior”
T (N) = 2N+1
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
f (N)=N c=3
Se puede entender como “T ≤ f”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
8
11/9/18
Notación AsintóKca
Notación O: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
c·f (N) = 3N
Definición de O “Cota asintó/ca Superior”
T (N) = 2N+1
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
f (N)=N c=3 n0 = 1
Se puede entender como “T ≤ f”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación O: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
c·f (N)
c·f (N) = 3N
t T (N) Definición de O “Cota asintó/ca Superior”
T (N) = 2N+1
f (N)
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
f (N)=N
Se puede entender como “T ≤ f”
1 n0
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
9
11/9/18
Notación AsintóKca
Notación O: Propiedades
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
c·f (N)
t T (N) Definición de O “Cota asintó/ca Superior”
f (N)
T(N)∈ O( f(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≤ c·f(n)
Reflexividad • f(N)∈O(f(N))
n0
• f(N)∈O(g(N))
TransiKvidad g(N)∈O(h(N)) ⇒ f(N)∈O(h(N))
2. Notación AsintóKca
2
Notación AsintóKca
Notación Ω: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
g (N)
t T (N) Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
c·g (N)
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
2. Notación AsintóKca
2
10
11/9/18
Notación AsintóKca
Notación Ω: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
g (N)
t T (N) Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
c·g (N)
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
n0
2. Notación AsintóKca
2
Notación AsintóKca
Notación Ω: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
g (N)
t T (N)=N2 + 3 T (N)
g (N) = 2N+3 Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
c·g (N)
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
n0
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
11
11/9/18
Notación AsintóKca
Notación Ω: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
t T (N)=N2 + 3
g (N) = 2N+3 Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
c=1
Se puede entender como “T ≥ g”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Ω: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
t T (N)=N2 + 3
g (N) = 2N+3 Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
c=1 n0 = 2
Se puede entender como “T ≥ g”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
12
11/9/18
Notación AsintóKca
Notación Ω: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
t T (N)=N2 + 3
g (N) = 2N+3 Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
c=1 n0 = 2
Se puede entender como “T ≥ g”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Ω: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
Ejemplo 2
t T (N)=N2 + 3
g (N) = 2N+3 Definición de Ω “Cota asintó/ca Inferior”
g (N)=2N+3
T(N)∈ Ω( g(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
13
11/9/18
Notación AsintóKca
Notación Ω: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
t
Definición de Ω “Cota asintó/ca Inferior”
g (N)=2N+3
T(N)∈ Ω( g(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
c=0.5
T (N) = N Se puede entender como “T ≥ g”
c·g (N) = N+3/2
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Ω: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
t
Definición de Ω “Cota asintó/ca Inferior”
g (N)=2N+3
T(N)∈ Ω( g(N) ) si y solo si
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
c=0.5 n0 = 0
T (N) = N Se puede entender como “T ≥ g”
c·g (N) = N+3/2
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
14
11/9/18
Notación AsintóKca
Notación Ω: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
g (N)
t T (N) Definición de Ω “Cota asintó/ca Inferior”
g (N)=2N+3
T(N)∈ Ω( g(N) ) si y solo si
c·g (N)
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
0 n0
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Ω: Propiedades
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
g (N)
t T (N) Definición de Ω “Cota asintó/ca Inferior”
T(N)∈ Ω( g(N) ) si y solo si
c·g (N)
∃c ∃n0 tal que ∀n>n0 T(n) ≥ c·g(n)
2. Notación AsintóKca
2
15
11/9/18
Notación AsintóKca
Notación Θ: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
2. Notación AsintóKca
2
Notación AsintóKca
Notación Θ: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
n0
2. Notación AsintóKca
2
16
11/9/18
Notación AsintóKca
Notación Θ: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
c2·h (N) h (N)
t T (N)=2N2T (N)
Definición de Θ
h (N) = N
c1·h (N) + 1
2
n0
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Θ: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
c2·h (N) = 3N2+ 3
t T (N)=2N2 Definición de Θ
h (N) = N2+ 1
T(N)∈ Θ( h(N) ) si y solo si
∃c1 ∃c2 ∃n0 tal que ∀n>n0 c1·h(n) ≤ T(n) ≤ c2·h(n)
c1=1 c2=3
Se puede entender como “T = h”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
17
11/9/18
Notación AsintóKca
Notación Θ: Ejemplo 1
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
c2·h (N) = 3N2+ 3
t T (N)=2N2 Definición de Θ
h (N) = N2+ 1
T(N)∈ Θ( h(N) ) si y solo si
∃c1 ∃c2 ∃n0 tal que ∀n>n0 c1·h(n) ≤ T(n) ≤ c2·h(n)
c1=1 c2=3 n0 = 1
Se puede entender como “T = h”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Θ: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 1
Ejemplo 2
T (N) = 4N+13
c2·h (N) = 3N2+ 3
t T (N)=2N2 Definición de Θ
h (N) = N2+ 1
h (N)=2N+3
T(N)∈ Θ( h(N) ) si y solo si
∃c1 ∃c2 ∃n0 tal que ∀n>n0 c1·h(n) ≤ T(n) ≤ c2·h(n)
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
18
11/9/18
Notación AsintóKca
Notación Θ: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
c2 h (N)=6N+9 T (N) = 4N+13
t
Definición de Θ
h (N)=2N+3
T(N)∈ Θ( h(N) ) si y solo si
∃c1 ∃c2 ∃n0 tal que ∀n>n0 c1·h(n) ≤ T(n) ≤ c2·h(n)
c1=1 c2=3
Se puede entender como “T = h”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Θ: Ejemplo 2
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
c2 h (N)=6N+9 T (N) = 4N+13
t
Definición de Θ
h (N)=2N+3
T(N)∈ Θ( h(N) ) si y solo si
∃c1 ∃c2 ∃n0 tal que ∀n>n0 c1·h(n) ≤ T(n) ≤ c2·h(n)
c1=1 c2=3 n0 = 2
Se puede entender como “T = h”
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
19
11/9/18
Notación AsintóKca
Notación Θ: Definición
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
Ejemplo 2
c2 h (N)=6N+9 ·h (N) h (N)
c2T (N) = 4N+13
t T (N) Definición de Θ
c1·h (N)
h (N)=2N+3
T(N)∈ Θ( h(N) ) si y solo si
∃c1 ∃c2 ∃n0 tal que ∀n>n0 c1·h(n) ≤ T(n) ≤ c2·h(n)
2 n0
Ejemplo 1 Ejemplo 2
2. Notación AsintóKca
2
Notación AsintóKca
Notación Θ: Propiedades
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
20
11/9/18
Notación AsintóKca
Jerarquía de Ordenes
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Problemas y Funciones: Ejemplos
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
… Algoritmos Eficientes
O(2N)
…
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
Complejidad
O(1) Constante
No depende de la entrada
2. Notación AsintóKca
2
21
11/9/18
Notación AsintóKca
Problemas y Funciones: Ejemplos
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
… Algoritmos Eficientes
O(2N)
…
O(N3)
O(N2)
O(N·log N)
O(N) Complejidad
Logarítmica
O(log N)
Búsqueda en
O(1) Búsqueda Binaria un vector
2. Notación AsintóKca
2
Notación AsintóKca
Problemas y Funciones: Ejemplos
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
… Algoritmos Eficientes
O(2N)
…
O(N3)
O(N2)
Complejidad
O(N·log N)
Lineal
O(N) Máximo de
Algoritmo un array
O(log N)
O(1)
2. Notación AsintóKca
2
22
11/9/18
Notación AsintóKca
Algoritmos Quasi-lineales
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
… Algoritmos Eficientes
O(2N)
…
O(N3)
Complejidad
O(N2) Quasi-Lineal
O(N·log N) Ordenar un
MergeSort array
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Problemas y Funciones: Ejemplos
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
Problemas tratables
O(2N)
… Complejidad
Cuadrá/ca
O(N3)
O(N2) Ordenación
por Selección
O(N·log N) Ordenar un
O(N) array
O(log N)
O(1)
2. Notación AsintóKca
2
23
11/9/18
Notación AsintóKca
Problemas y Funciones: Ejemplos
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
Problemas tratables
O(2N)
Complejidad
… Cúbica
O(N3) Algoritmo MulKplicar
O(N2) tradicional Matrices
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Problemas y Funciones: Ejemplos
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
Orden polinomial Problemas tratables
O(2N)
… Problema de
ALGORITMO Kpo P
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
24
11/9/18
Notación AsintóKca
Cálculo de la complejidad
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
… Orden exponencial
O(2N) ALGORITMO Problema de
“Backtracking” la mochila 0-1
…
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Otros órdenes de complejidad: O(10N), (N!)
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
… O(10N)
O(2N)
…
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
25
11/9/18
Notación AsintóKca
Otros órdenes de complejidad: O(log log N)
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
…
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
O(log log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Otros órdenes de complejidad: O(√𝑵 )
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
…
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N) O(√𝑵 )
O(1)
2. Notación AsintóKca
2
26
11/9/18
Notación AsintóKca
Otros órdenes de complejidad: O(N2·log N)
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
…
O(N3)
O(N2) O(N2·log N)
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Jerarquía de Órdenes
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
…
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
T(N)∈O(N·log N)
O(1)
2. Notación AsintóKca
2
27
11/9/18
Notación AsintóKca
Jerarquía de Órdenes
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
…
O(N3)
O(N2)
O(N·log N)
T(N)∈Ω(N·log N)
O(N)
O(log N)
O(1)
N·log log N
2. Notación AsintóKca
2
Notación AsintóKca
Jerarquía de Órdenes
Notación: O T(N)∈ O( f(N) ) Ω T(N)∈ Ω( g(N) ) Θ T(N)∈ Θ( h(N) )
“T ≤ f” “T ≥ g” “T = h”
…
O(2N)
…
O(N3)
O(N2)
O(N·log N)
T(N)∈ Θ(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
28
11/9/18
Notación AsintóKca
Operaciones con conjuntos
Sea a una constante • Θ(a) = Θ(1)
• a·Θ( f(N) ) = Θ(a·f(N) ) = Θ( f(N) )
• Θ( f(N) ) + Θ( g(N) ) = Θ( f(N) + g(N) ) = Θ(máx {f(N), g(N)} )
• Θ( f(N) ) · Θ( g(N) ) = Θ( f(N) · g(N) )
…
T(N)= 21 + 25·N + 34·ln (N)
O(2N) T(N)= 21 + 25·N + 34·ln (N) ∈ Θ(1) + 25·N + 34·ln (N)
… ∈ Θ(1) + Θ(N) + Θ( log (N) ) ∈ Θ(N)
O(N3)
O(N2)
O(N·log N)
O(N)
O(log N)
O(1)
2. Notación AsintóKca
2
Notación AsintóKca
Ejemplos
… T(N) = N!
29
11/9/18
Notación AsintóKca
AcKvidades
2. Notación AsintóKca
2
Notación AsintóKca
AcKvidades
2. Notación AsintóKca
2
30
11/9/18
Notación AsintóKca
AcKvidades
2 si N<=10
Tk(N) =
Tk(N) ∈ O(N) k N si N>10
Tk(10) = 2
Tk(20) = 20·k
2. Notación AsintóKca
2
Notación AsintóKca
AcKvidades
AcKvidad 2.4. Considérese dos algoritmos:
• El algoritmo A1 Cene orden de complejidad Θ(N).
• El algoritmo A2 Cene orden de complejidad Θ(N2).
¿ El algoritmo A1 tarda siempre menos que A2 ? NO
2. Notación AsintóKca
2
31
11/9/18
… … …
a = 3; a = b; return (b+2)*3-7/3;
… … … …
T(N)= constante
Θ(1)
32
11/9/18
… … …
a = 3; a = b; return (b+2)*3-7/3;
… … … … N: Tamaño de vector[]
…
P1; T1(N)
T(N)
P2; T2(N)
…
T(N)∈ Θ(max {T
T(N)∈ Θ(T1(N)) + Θ(T
1(N), T2(N)} )
(N))
33
11/9/18
…
P1; T1(N)
T(N) N: Tamaño de vector[]
P2; T2(N)
…
int maxValor(int[] vector) {
ordenar(vector); Θ(N·log N)
return vector[0]; Θ(1)
T(N)= T1(N) + T2(N) }
N: Tamaño de vector[]
34
11/9/18
…
if (c) { Tc(N)
P1;
T1(N)
}
else {
P2; T2(N)
} CASO PEOR
…
T(N)= Tc(N) + max{T1(N), T2(N)}
…
if (c) { Tc(N) N: Tamaño de vector[]
P1;
T1(N) int primeroAbs(int[] vector) {
}
else { if (vector[0]<0) Θ(1)
return -vector[0]; Θ(1)
P2; T2(N) else
} CASO PEOR return vector[0]; Θ(1)
… }
T(N)= Tc(N) + max{T1(N), T2(N)}
T(n) ∈ Θ(1) + max{Θ(1), Θ(1)} = Θ(1)
Θ(max {Tc(N), T1(N), T2(N)} )
3. Complejidad en Algoritmos Sencillos
3
35
11/9/18
N: Tamaño de vector[]
CASO PEOR
… …
for (int i=1; i<m(N); i++) { while(c)
P(i); P;
} }
… …
36
11/9/18
int factorial(int n) {
int r=1; Θ(1)
n
for (int i=1; i<=n; i++)
r=r*i; Θ(1) Θ(n) ∑Θ(1) =𝑛·Θ(1)=𝚯(𝒏)
return r; Θ(1) i=1
}
int func1(int n) { n i
int l=0; Θ(1) = ∑∑ Θ(1)
for (int i=1; i<=n; i++)
i=1 j=1
for (int j=1; j<=i; j++) Θ(n2)
l++; Θ(1) n n
n +1
= Θ(1)⋅ n ⋅ ∈ Θ(n 2 )
T(n) ∈ Θ(1)+Θ(n2)+ Θ(1) = Θ(n2) 2
37
11/9/18
int func2(int n) {
int l=0; Θ(1) n i n
int func3(int n) {
int l=0; Θ(1) n−1 n 2 −1 n3 −1
= n ⋅ n 2 ⋅ n 3 ∈ Θ(n 6 )
T(n) ∈ Θ(1)+Θ(n6)+ Θ(1) = Θ(n6)
38
11/9/18
N: Tamaño de vector[]
N: Tamaño de vector[]
39
11/9/18
int min_distancia(int[] x) {
int n=x.length;
n: Tamaño del vector x[]
int d=Integer.MAX_VALUE; Θ(1) n−1 n−1
… …
for (int i=1; i<m(N); i++) { while(c)
P(i); P;
} }
… …
40
11/9/18
41
11/9/18
Θ(N)
Caso Peor Caso Promedio Caso Mejor
boolean contieneValor (int[] vector, int elemento){
boolean encontrado = false;
int i = 0;
Θ(1)
while (i<vector.length && !encontrado) {
Se ejecuta
if (vector[i] == elemento) encontrado = true;
Θ(1)
N veces
i++;
}
return encontrado; Θ(1)
}
N:Tamaño del vector
T(N) ∈ Θ(1) + N·Θ(1) + Θ(1) =Θ(N) (vector.length)
3. Complejidad en Algoritmos Sencillos
3
42
11/9/18
Θ(1)
Caso Peor Caso Promedio Caso Mejor
boolean contieneValor (int[] vector, int elemento){
boolean encontrado = false;
int i = 0;
Θ(1)
while (i<vector.length && !encontrado) {
Se ejecuta
if (vector[i] == elemento) encontrado = true;
Θ(1)
1 vez
i++;
}
return encontrado; Θ(1)
}
N:Tamaño del vector
T(N) ∈ Θ(1) + 1·Θ(1) + Θ(1) =Θ(1) (vector.length)
3. Complejidad en Algoritmos Sencillos
3
43
11/9/18
Θ(N)
Caso Peor Caso Promedio Caso Mejor
boolean contieneValor (int[] vector, int elemento){
boolean encontrado = false;
int i = 0;
Θ(1)
while (i<vector.length && !encontrado) {
Se ejecuta
if (vector[i] == elemento) encontrado = true;
Θ(1)
N/2 veces
i++;
}
return encontrado; Θ(1)
}
N:Tamaño del vector
T(N) ∈ Θ(1) + N/2·Θ(1) + Θ(1) =Θ(N) (vector.length)
3. Complejidad en Algoritmos Sencillos
3
44
11/9/18
45
11/9/18
46
11/9/18
47
11/9/18
48