Professional Documents
Culture Documents
Faccois de la Rochefoucald
(1613-1680) Escritor francés
Objetivos de aprendizaje
I INDUCCION MATEMATICA
Consideremos que la proposición P(n) definida en un dominio. Se desea
demostrar que P(n) es verdadera para todo n en el dominio. Si verificamos que:
Quiere decir que si se cumple los pasos 1 y 2 entonces por el principio de inducción
afirmamos que se cumple el paso 3, es decir P(n) es verdadera para todo n.
Ejemplo 1
i = 1 + 2 + 3 +... n = n . (n + 1)
2
sea el enunciado
P(n) = 1 + 2 + 3 +... n = n . (n + 1)
2
1 para n = 1 P(1) = 1 = 1 . 2 = 1
2
= (1 + 2 + 3 +... h) + h+1
= h.(h + 1)+h+1
2
= (h+1) . (h+2)
2
por el principio de inducción matemática se sigue que P(n) es verdadera para todo n 1.
Ejemplo 2
Probar i3 = ( i )2
sea el enunciado
3 3 3 3 2
P(n) = 1 + 2 + 3 +...n =(1 + 2 + 3 +... n)
3 2
1 para n = 1 P(1) = 1 = 1 = 1
por el principio de inducción matemática se sigue que P(n) es verdadera para todo n1.
Ejemplo 3
FUNCION CUADRADO(A)
Inicio
B 0
S 0
MIENTRAS (B < A)
A A2
S S + A
B B + 1
FIN MIENTRAS
RETORNAR(S)
Fin
para n = 0
P(0) : S0 = 0 = A x B0 = A * 0
porque S e B no han pasado aún por el ciclo MIENTRAS
Para n = h 0
Sh = A x Bh hipotesis inductiva
para n = h+1 se tiene:
Sh+1 = Sh + A ............(a)
Bh+1 = Bh + 1 .............(b)
II Recursion
La recursión es un método que, directa o indirectamente, se hace una llamada así
mismo. Esto puede parecer un circulo vicioso: ¿cómo un método F puede resolver un
problema llamándose a si mismo?
La clave esta en que el método F se llama así mismo pero en instancias diferentes, mas
simples, en algún sentido adecuado
Ejemplo
Ejemplo 4
Definicion recursiva de tren
Ejemplo 5
Sea S(N) : suma de los N primeros números. S(N) puede definirse :
Forma recursiva
Algoritmo iterativo
S(1) = 1
S(N) = S(N-1) +N Entero S(Entero N)
Inicio
S=0
Para i desde 1 hasta N
Forma explicita
S = S +i
S(N) = N*(N+1) /2 FinPara
Retornar( S)
Fin
Algoritmo recursivo
Entero Suma()
Inicio
Leer N Entero S(Entero N)
Algoritmo
Inicio recursivo
Escribir S(N)
Fin Si N = 1
Retornar 1
Sino
Retornar( S(N-1)+N)
Fin si
Fin
La función Suma lee N y luego escribe
S(N) que es la suma de los N primeros números
Ejemplo 6
El objetivo del programa recursivo, es realizar una serie de llamadas hasta que la
secuencia se define en un punto.
Ejemplo 7
La función Factorial puede ser desarrollada iterativamente o recursivamente.
Matemáticamente de define como:
Ejemplo 8:
la secuencia de fibonacci son 1, 1, 2, 3, 5, 8, ... los cuales se determinan por la función:
fib(int n)
{
if(n==0 || n==1) return 1; /* condición básica */
else
return (fib(n-1)+fib(n-2)); /* doble llamada */
}
Fib(int i)
{ int i,j,k;
if(n>0) {
i=0;
j=1;
for(k=2; k<=n; k++)
{
j=j+i;
i=j-i;
}
return(j);
else return(0);
}
Relación de recurrencia
Mientras que
an+1 = 3 an n ≥ 0 donde a0 = 3 define 3, 19, 27, 81….
Ejemplo 9
an = a n – 1 + a n–2
Donde K = 2, a0 = 1 a1 = a2 = -1
n
Podemos remplazar tn por x
donde x es uma constante desconocida por el momento
Las raíces de esta ecuación están en alguno de los tres casos siguientes:
Ejemplo 10
Con raices r1 = 2 y r2 = -3
an = c1 r1 n + c2 r2 n = c1 2 n + c2 (-3) n
cuando n = 0
a0 = 1= c1 20 + c2 (-3)0 = c1 + c2 (a)
cuando n = 1
a1 = 2 = c1 21 + c2 (-3)1 = 2c1 - 3 c2 (b)
c1 = 1 y c2 = 0
por tanto
an = 2 n para n 0
Recurrencia no homogénea
Una recurrencia es no homogénea cuando la combinación lineal no es igual a
cero, es decir, no es cierto que toda la combinación lineal de las soluciones sea
una solución
Ejemplo 11
3an-1 – 6 a n – 2 = 3 n (c)
an – 5 a n – 1 + 6 a n-2 = 0 (d)
Ejemplo 12
Solucion iterativa
Accion Principal()
Inicio
Leer N Accion SUMA(K)
Escribir SUMA(N) Inicio
S=2
V=5
Fin
Para i desde 1 hasta K-1
S=S+V
V=V +3
FinPara
Retornar S
Fin
Solucion recursiva
Accion Principal()
Inicio
Leer N Accion SUMA(K)
S=0 Inicio
Para i desde 1 hasta N Si k=1
S = S + SUMA(i) Retornar 2
FinPara Sino
Escribir S Retornar SUMA(K-1) + 3
Fin FinSi
nuevamente
si remplazamos n con n-1 en (a) tenemos
an-2 = a- n – 3 +3 (d)
an = a n – k +k * 3
si hacemos K = n-1 tenemos
an = a 1 +(n-1) * 3
y como a1 = 2
tenemos finalmente
an = 2 +3 * (n-1)
MERGESORT
Accion Merge_Sort(S,i,j)
Inicio
Si i = j retornar
M=(i+j)/2
Merge_Sort(S, i, m)
Merge_Sort(S , m+1, j)
Merge(S, i , m, j, C)
Para k dese i hasta j
Sk = Ck
FinPara
Fin
Para afirmar que el algoritmo es O(N Log N), es suficiente demostrar que la mezcla
ordenada de dos vectores ordenados puede realizarse en tiempo lineal. En la siguiente
subsección veremos como mezclar dos vectores A y B, colocando el resultado en un
tercer vector. Después mostraremos una implementación sencilla de mergesort. La
rutina de mezcla es la piedra angular de muchos algoritmos de ordenación externa.
private static void mergesort (int [] a, int [] Temp, int izq, int der)
{ if(izq < der )
int centro (izq + der ) / 2;
mergesort (a , temp , izq, centro)
mergesort (a , temp , centro +1 , der)
mezclar (a, temp, izq, centro+1, der)
}
private static void mezclar (int [] a , int [] temp, int posizq, int posder, int posfin )
{ int finizq = posder -1
int posaux = posizq
int numelem = posfin – posder +1
// ciclo principal
While( posizq <=finizq && posder <= posfin)
if(a[posizq].menorque(a[posder]))
temp[posaux++] = a[posizq++];
else
temp[posaux++] = a[posder++];
// copia el resto de la primera mitad
While( posizq <=finizq )
temp[posaux++] = a[posizq++];
// copia el resto de la segunda mitad
While( posder <=posfin )
temp[posaux++] = a[posder++];
// copia el vector temporal en el original
for(int i = 0; i < numelem ; i++ , posfin--)
a[i] = temp[i]
Augusto
} Cortez Vásquez Pag. 14/18
Algoritmica III – Inducción, recurrencias y Divide y Venceras 2009-I
El algoritmo realiza dos llamadas recursivas de orden T(n/2), y una llamada a intercala
de orden O(n), por tanto
TEOREMA
Ejercicios Propuestos
1 Proporcione 3 ejemplos de proposiciones matemáticas.
Demuéstrelas por el método de inducción matemática
a) FUNCION ABC(Q, Y; A)
INICIO
A 1
MIENTRAS Y > 0
A A *Q
Y Y - 1
FIN MIENTRAS
RETORNAR
Y
El algoritmo recibe como entrada Q y Y, y devuelve A = Q
Y Y
Sea la proposición P(n) : An * Q n = Q
b) FUNCION COMPARA(N, B; A)
INICIO
A N
D B
MIENTRAS D > 0
A A + B
D D - 1
FIN MIENTRAS
RETORNAR
RECURSION
a) an = 2a n – 1 a0 = 1
b) an = 2a n – 1 +5 a0 = 2
a. Algoritmo de Hanoi
b. Suma dicotómica de un vector
REFERENCIAS BIBLIOGRAFICAS
1. [HERNANDEZ 2001] Hernández, R.; Lázaro, J.C.; Dormido, R.; Ros, S.
“Estructura de Datos y Algoritmos”; Prentice Hall 2001, Madrid España.