PDF de programación - Programación II - Tema 4. Introducción a los Algoritmos

Imágen de pdf Programación II - Tema 4. Introducción a los Algoritmos

Programación II - Tema 4. Introducción a los Algoritmosgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.925 visualizaciones desde el 14 de Enero del 2017
77,8 KB
7 paginas
Creado hace 13a (04/04/2011)
Programación II
Bloque temático 1. Lenguajes de programación
Bloque temático 2. Metodología de programación
Bloque temático 3. Esquemas algorítmicos
Tema 4. Introducción a los Algoritmos

Tema 5. Algoritmos voraces, heurísticos y aproximados
Tema 6. Divide y Vencerás
Tema 7. Ordenación
Tema 8. Programación dinámica
Tema 9. Vuelta atrás
Tema 10.Ramificación y poda
Tema 11.Introducción a los Algoritmos Genéticos
Tema 12.Elección del esquema algorítmico

Programación II

Tema 4. Introducción a los Algoritmos

© Mario Aldea Rivas

04/04/11

Tema 4. Introducción a los Algoritmos
4.1. ¿Qué es un algoritmo?
4.2. Eficiencia de los algoritmos
4.3. Un vistazo a la NP-completitud
4.4. Cálculo de tiempos de ejecución
4.5. Diseño de algoritmos
4.6. Bibliografía



1



Programación II

Tema 4. Introducción a los Algoritmos

4.1 ¿Qué es un algoritmo?

© Mario Aldea Rivas

04/04/11

2

4.1 ¿Qué es un algoritmo?

Un algoritmo (de al-Jwarizmi, matemático árabe del siglo
IX) es un conjunto finito de instrucciones o pasos que
sirven para ejecutar una tarea o resolver un problema
Un algoritmo debe ser:

• Preciso: cada paso a seguir tiene un orden
• Finito: tiene un determinado número de pasos, o sea, que tiene

un fin

• Definido: si se sigue el mismo proceso más de una vez

llegaremos al mismo resultado

El primer algoritmo escrito para computador fue el creado
en el siglo XIX por Ada Byron

• cálculo de los números de Bernouilli para la máquina

analítica de Charles Babbage

Programación II

© Mario Aldea Rivas

04/04/11

3

Clásico

Inglés

à la russe

Qué un algoritmo sea mejor que otro podría depender de:

• el número de operaciones que haya que realizar
• de lo compleja que sea cada operación (multiplicación de

números de una cifra, suma, división y multiplicación por 2, ...)

© Mario Aldea Rivas

04/04/11

4

Programación II

Tema 4. Introducción a los Algoritmos

4.1 ¿Qué es un algoritmo?

Problemas y ejemplares
Los algoritmos propuestos para el problema de la multiplicación
no sólo son aplicables al caso 357×27
• sino que constituyen una solución general
El producto 357×27 es un ejemplar (o caso) del problema de la
multiplicación de enteros positivos
• otros ejemplares serían: 12430×841 o 3×8
• cada ejemplar será más o menos difícil de resolver
Los productos 46×7.2 o -7×2 no son ejemplares del problema
• cuando especificamos un problema hay que definir su dominio
Un algoritmo que pretende resolver un problema es incorrecto si
• es posible encontrar un ejemplar dentro dominio para el que el

algoritmo no produce una solución correcta

© Mario Aldea Rivas

04/04/11

5

Programación II

Tema 4. Introducción a los Algoritmos

Tema 4. Introducción a los Algoritmos

Ejemplo de Algoritmos
Un problema se puede resolver utilizando diferentes algoritmos
Algoritmos para la multiplicación con lápiz y papel:

4.1 ¿Qué es un algoritmo?

357
×27
2499
714
9639

357
×27
714
2499
9639

27 357 357
13 714 714
6 1428
3 2856 2856
1 5712 5712
9639

4.2 Eficiencia de los algoritmos

4.2 Eficiencia de los algoritmos
Un algoritmo es más eficiente cuantos menos recursos consuma

• Eficiencia espacial: cantidad de memoria extra requerida
• Eficiencia temporal: tiempo consumido

La eficiencia de un algoritmo resolviendo un ejemplar depende de:

• las características del propio algoritmo
• las características ejemplar a resolver

- especialmente su tamaño
• la velocidad del computador

Normalmente nos importaran los tiempos de peor caso:
• T(n): tiempo de peor caso para un ejemplar de tamaño n
• Tavg(n): tiempo promedio para un ejemplar de tamaño n

Programación II

© Mario Aldea Rivas

04/04/11

6

Tema 4. Introducción a los Algoritmos

4.2 Eficiencia de los algoritmos

Tiempo de ejecución de un algoritmo
método busca(entero[1..n] a,entero e) retorna entero
desde i=1 hasta n hacer
si a[i] == e entonces
retorna i
fsi
fdesde
retorna -1
fmétodo
Suponemos que, en un ordenador dado, cada iteración del lazo
tarda t unidades de tiempo
El tiempo de cómputo total T será:
• mejor caso (e==a[1]) ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯→ T=t
• caso promedio (e==a[n/2]) ⎯⎯⎯⎯⎯⎯⎯→ Tavg(n)=t·n/2
• peor caso (e==a[n] ∨ e≠a[i], i∈[1,n]) → T(n)=t·n

Programación II

Tema 4. Introducción a los Algoritmos

© Mario Aldea Rivas

04/04/11

7

4.2 Eficiencia de los algoritmos

Notación asintótica
En el análisis y diseño de algoritmos nos importa el ritmo de
crecimiento del tiempo de cómputo (no su valor exacto)
Para expresar los ritmos de crecimiento se usa la notación O(n):
• decimos que T(n) es O(f(n)) si existen constantes c y n0
tales que T(n)≤c·f(n) para todo n≥n0
La notación O(n) muestra una cota superior al
ritmo de crecimiento de un algoritmo
En el ejemplo anterior:
• T(n)=t·n, luego diremos que T(n) es O(n)
- ya que existen c=2t y n0=0 tales que
T(n)=t·n ≤ 2t·n para todo n≥0
• esto se cumple independientemente del valor de t (es decir,
independientemente de la velocidad del ordenador)

2t·n

T(n)=t·n

Programación II

Tema 4. Introducción a los Algoritmos

© Mario Aldea Rivas

04/04/11

8

4.2 Eficiencia de los algoritmos

Notación asintótica (cont.)

2t·n

La notación Ω(n) nos da una cota inferior al ritmo de crecimiento
• decimos que T(n) es Ω(f(n)) si existen constantes c y n0
tales que T(n)≥c·f(n) para todo n≥n0
Cuando el ritmo de crecimiento es a la vez
O(f(n)) y Ω(f(n)) se dice que es Θ(f(n))
En el ejemplo anterior:
• T(n)=t·n, luego podremos decir que T(n) es Ω(n)
- ya que existen c=t/2 y n0=0 tales que T(n)=t·n ≥ t/2·n
para todo n≥0
• por lo tanto en este ejemplo podemos decir que T(n) es Θ(n)
La notación asintótica sólo proporciona límites a la velocidad de
crecimiento, “ocultando” las posibles constantes multiplicativas:
• T1(n)=n y T2(n)=1000000·n son ambas Θ(n)

T(n)=t·n

t/2·n

Programación II

© Mario Aldea Rivas

04/04/11

9

Tema 4. Introducción a los Algoritmos

4.2 Eficiencia de los algoritmos

Ritmos de crecimiento más habituales
• O(1), o constante
• O(log(n)), o logarítmico
• O(n), o lineal
•O(n·log(n))
• O(n2), o cuadrático
• O(nx), o polinómico
• O(2n), o exponencial
n
constante
1
2
4
8
16
32

n2
1
4
16
64
256
1024
© Mario Aldea Rivas

0
2
8
24
64
160

n log n

0
1
2
3
4
5

1
1
1
1
1
1

log n

n3
1
8
64
512
4096
32768

04/04/11

Programación II

Tema 4. Introducción a los Algoritmos

2n
2
4
16
256
65536

4294967296

10

4.2 Eficiencia de los algoritmos

Importancia de encontrar un algoritmo eficiente
El ritmo de crecimiento se acaba imponiendo para valores de n
suficientemente grandes

n=10
0.1 seg
10 seg

n=20
T(n)
10-4·2n
105 seg
10-2·n3
80 seg
• En un día, un computador 100 veces más rápido utilizando el
algoritmo T(n)=10-4·2n
- ¡sólo podría resolver un ejemplar de tamaño n=37!

más que la edad del universo

n=30
un día

4.5 minutos

n=200

un día

10-4·2n

10-2·n3

T(n)

10

20

© Mario Aldea Rivas

04/04/11

n

11

Programación II

Tema 4. Introducción a los Algoritmos

4.3 Un vistazo a la NP-completitud

4.3 Un vistazo a la NP-completitud
Los problemas se pueden agrupar en conjuntos:
• NP problemas para los que la comprobación de que una
solución es correcta puede realizarse en tiempo polinómico
- p.e.: encontrar un subconjunto de suma 0 en un array
- comprobar que la solución es correcta es muy sencillo (O(n))

(5,-3,4,-2,6) (5,-3,-2)

• P problemas que pueden resolverse en tiempo polinómico

- p.e.: buscar el máximo en un array (O(n))
- ya que para comprobar que una solución es correcta
P NP⊆
basta con volver a ejecutar el algoritmo (tiempo polinómico)
• NP-completos problemas para los que “parece” que nunca se
encontrará un algoritmo que los resuelva en tiempo polinómico

- p.e.: encontrar un subconjunto de suma 0 en un array

Programación II

© Mario Aldea Rivas

04/04/11

12

Tema 4. Introducción a los Algoritmos

4.3 Un vistazo a la NP-completitud

Para los problemas NP-completos no se ha encontrado una
solución mejor que recorrer (más o menos inteligentemente) todas
las posibles soluciones

Cálculo de tiempos de ejecución (cont.)

• veremos muchos problemas NP-completos durante el curso:

- mochila, coloreado de grafos, problema del viajante, ...

Todo indica que la relación entre P, NP y NP-completos es:

NP

P

NP-completos

• La pregunta del millón de dólares [4] es: ¿P = NP?
• está demostrado que si se consigue resolver un problema NP-
completo en tiempo polinómico se podrían resolver todos

Programación II

Tema 4. Introducción a los Algoritmos

© Mario Aldea Rivas

04/04/11

13

4.4 Cálculo de tiempos de ejecución

4.4 Cálculo de tiempos de ejecución
• Regla de las sumas:
• si T1(n) es O(f(n)) y T2(n) es O(g(n)), entonces
• T1(n)+T2(n) es O(max(f(n),g(n)))
Es decir: la ejecución de dos algoritmos que se realizan
uno después del otro tiene un ritmo de crecimiento igual al del
máximo de los dos

• Regla de los productos:
• si T1(n) es O(f(n)) y T2(n) es O(g(n)), entonces
• T1(n)·T2(n) es O((f(n)·g(n)))
Es decir: la ejecución de dos algoritmos anidados uno dentro del
otro tiene un ritmo de crecimiento igual al producto de los ritmos
de crecimiento de ambos

Programación II

Tema 4. Introducción a los Algoritmos

© Mario Aldea Rivas

04/04/11

14

4.4 Cálculo de tiempos de ejecución
Cálculo de tiempos de ejecución (cont.)

• Instrucciones simples (asignación y op. aritméticas): O(1)
• Secuencia de instrucciones simples: O(max(1,1,1)) = O(1)
• Instrucción condicional:
• si es un “if” simple y no se conoce el valor de la condición, se
supone que la parte condicional se ejecuta siempre
• si es un “if” con parte “else” y no se conoce el valor de la
condición, se elige la que más tarde de las dos partes

• Lazo: número de veces, por lo que tarden sus instrucciones
• Procedimientos recursivos: número de veces que se llama a sí

mismo, por lo que tarda cada vez

Programación II

© Mario Aldea Rivas

04/04/11

15

Tema 4. Introducción a los Algoritmos

4.4 Cálculo de tiempos de ejecución

Ejemplos de calculo del ritmo de crecimiento
  • Links de descarga
http://lwp-l.com/pdf995

Comentarios de: Programación II - Tema 4. Introducción a los Algoritmos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad