Sunteți pe pagina 1din 15

Programación Dinámica

Maximo Amancio Montalvo Atco


Objetivos
 Comprender los conceptos básicos de la programación dinámica.
 Efectuar programas estructurados, auto recursivos y dinámicos
básicos.
 Comparar programas estructurados, auto recursivos y dinámicos.
 Resolver programas con diferentes enfoques.
Serie de Fibonacci en su forma recursiva:

Fibof(n)
 Función fib(n)
Si
 SI: n < 2 entonces y =n n<2
 Si no: y = fib(n-1)+fib(n-2) No
 Como funciona: Y = Fibof(n-1)
Y=n
 F(4) +Fibof(n-2)

 F(3) + F(2)
 F(2) + F(1) + F(2) + F(1)
Serie de Fibonacci en su Inicio

forma matricial:
Ingrese n

Crear A(n)
 Definimos una matriz de n A(1)=0
elementos: A(2)=1
i=3
 Creamos los dos primero
elementos: A(i)=A(i-1)+A(i-2)
i=i+1
 F(1)=0
si
 F(2)=1 i<n+1

no
 F(n) = F(n-1)+F(n-2)
A

Fin
Inicio
Serie de Fibonacci
dinámica
Ingrese n

 Es parecido al matricial F1=1


F2=1
con la salvedad de que no i=2
se guarda en memoria los
resultados, siendo mas F=F1+F2
F2 = F1
dinámica. F1 = F
 Demuestre usted que es
si
mas rápida que la i<n+1
recursiva. no
Return F

Fin
Programación estructurada:
 % === Maximo Montalvo ===
 % Programación estructurada
 % usamos bucle for para resolver.
 disp('=== Serie de Fibonacci===')
 % Ingrese el elemento a calcular:
 n = input('Ingrese en numero mayor que 2')
 % inicializamos las variables:
 A(1)=0;
 A(2)=1;
 I(1)=1;
 I(2)=2;
 % Bucle for para el calculo de la serie:
 for i=3:n
 A(i)=A(i-1)+A(i-2);
 I(i)=i;
 end
 % Displayamos los resultados:
 disp('Elemento Serie')
 AF =[I' A']
Programación dinámica.
 % === Maximo Montalvo ===
 % Aplicamos programación dinámica:
 n = input('Ingrese un numero')
 if n<3
 f = n-1;
 else
 f1 = 0;
 f2 = 1;
 for i =3:n+1
 f = f1 + f2;
 f2 = f1;
 f1 = f;
 end
 end
 fprintf('Fib de %d es % d\n', n,f)
Scilab programación estructurada
 // === Maximo Montalvo ===
 // Programación estructurada
 // usamos bucle for para resolver.
 disp('=== Serie de Fibonacci===')
 // Ingrese el elemento a calcular:
 n = input('Ingrese en numero mayor que 2')
 // inicializamos las variables:
 A(1)=0;
 A(2)=1;
 I(1)=1;
 I(2)=2;
 // Bucle for para el calculo de la serie:
 for i=3:n
 A(i)=A(i-1)+A(i-2);
 I(i)=i;
 end
 // Displayamos los resultados:
 disp('Elemento Serie')
 AF =[I A];
 disp(AF)
Scilab programación Dinámica
 // === Maximo Montalvo ===
 // Aplicamos programación dinámica:
 n = input('Ingrese un numero')
 if n<3
 f = n-1;
 else
 f1 = 0;
 f2 = 1;
 for i =3:n+1
 f = f1 + f2;
 f2 = f1;
 f1 = f;
 end
 end
 A = [n, f]
 disp('Elemento serie')
 disp(A)
Búsqueda

Algoritmos de ordenación.
i=1
 Recuerde que n es el tamaño del vector:
i>n-1 FIN
i=i+1
 Entrada: 9 2 1 4

 2 9 1 4

 2 1 9 4 j=1
j>n-1
 2 1 4 9
j=j+1
 1 2 4 9

 1 2 4 9
NO
A(j)>A(j+1)
 1 2 4 9

 1 2 4 9 SI

 1 2 4 9
Aux = A(j)
A(j) = A(j+1)
 1 2 4 9 A(j+1) = Aux
 1 2 4 9
Ordenación Scilab
 // Metodo de la burbuja:
 clear
 A = input ('ingrese en vector')
 n = length(A);
 for i=1:n-1
 for j=1:n-1
 if A(j)>A(j+1)
 Aux = A(j);
 A(j)=A(j+1);
 A(j+1)=Aux;
 end
 end
 end
 disp(A)
Explicación del método
 Como el tamaño de A es
de 4, el bucle for va de 1
a 3 tres veces en total 9
pasadas.
 Vemos como va
ordenando pasada a
pasada con simples
comparaciones.
Ordenación en Matlab
 % Método de la burbuja:
 clear
 A = input ('ingrese un vector')
 n = length(A);
 for i=1:n-1
 for j=1:n-1
 if A(j)>A(j+1)
 Aux = A(j);
 A(j)=A(j+1);
 A(j+1)=Aux;
 end
 disp(A)
 end
 end
 disp(A)
Tarea
 Elaborar diagramas de flujo y programas para ordenamiento de pequeñas matrices usando los
siguientes métodos:
 Burbuja 2, incluyendo un for anidado con menor numero de ejecuciones.
 Uso de banderas.
 Método de inserción.
 Elaborar un programa del factorial que sea mejor que el auto recursivo usando programación
dinámica, como el caso de la serie de Fibonacci.

S-ar putea să vă placă și