Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2:...

25
AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos Recursivos. Objetivos. Introducir las bases necesarias para el diseño y análisis de los algoritmos recursivos. Bibliografía. BÁSICA: Brassard, P. Bratley: “Algorítmica: concepción y análisis”. Masson, 1990. Scholl P.C. Algorítmica y Representación de Datos. Tomo 2: Recursividad y Arboles. Ed. Masson, 1986. Casanova A. Programación. Servicio de Publicaciones UPV, València, 1993. OTROS: Aho A.V., Hopcroft J.E., Ullman J.U. The Design and Analysis of Computer Algorithms. Ed.Addison-Wesley, 1974 Balcázar J.L. “Programación Metódica”. McGraw-Hill, 1993 Grimaldi R.P. Matemáticas Discreta y Combinatoria. Ed. Addison Wesley Iberoamericana, 1984 Sahni S. Concepts in Discrete Mathematics. The Camelot Publishing Company, 1985 AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 2 Contenidos. 1. INTRODUCCIÓN : ALGORITMOS RECURSIVOS 2. INDUCCIÓN 2.1 PRINCIPIO DE INDUCCIÓN 2.2 VERIFICACIÓN DE ALGORITMOS RECURSIVOS 3. ETAPAS DEL DISEÑO RECURSIVO. 4. ANÁLISIS DE LA COMPLEJIDAD TEMPORAL DE LOS ALGORITMOS RECURSIVOS

Transcript of Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2:...

Page 1: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

1

Tema 2: Análisis y Diseñode Algoritmos Recursivos.

Objetivos.

� Introducir las bases necesarias para el diseño y análisis delos algoritmos recursivos.

Bibliografía.

BÁSICA:� Brassard, P. Bratley: “Algorítmica: concepción y análisis”.

Masson, 1990.

� Scholl P.C. Algorítmica y Representación de Datos. Tomo2: Recursividad y Arboles. Ed. Masson, 1986.

� Casanova A. Programación. Servicio de PublicacionesUPV, València, 1993.

OTROS:� Aho A.V., Hopcroft J.E., Ullman J.U. The Design and

Analysis of Computer Algorithms. Ed.Addison-Wesley,1974

� Balcázar J.L. “Programación Metódica”. McGraw-Hill,1993

� Grimaldi R.P. Matemáticas Discreta y Combinatoria. Ed.Addison Wesley Iberoamericana, 1984

� Sahni S. Concepts in Discrete Mathematics. The CamelotPublishing Company, 1985

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

2

Contenidos.1. INTRODUCCIÓN : ALGORITMOS RECURSIVOS

2. INDUCCIÓN

2.1 PRINCIPIO DE INDUCCIÓN

2.2 VERIFICACIÓN DE ALGORITMOS RECURSIVOS

3. ETAPAS DEL DISEÑO RECURSIVO.

4. ANÁLISIS DE LA COMPLEJIDAD TEMPORAL DELOS ALGORITMOS RECURSIVOS

Page 2: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

3

1. INTRODUCCIÓN : Algoritmosrecursivos

- Un objeto es recursivo si su definición requiere ladefinición previa del objeto en un caso más sencillo.

Ejemplo: Números Naturales N

(a) el 0 es un número natural.

(b) el sucesor de un número natural es también unnúmero natural.

- Una función es recursiva si su resolución requiere lasolución previa de la función para casos más sencillos.

Ejemplo:

(a) 0!=1

(b) n!=n (n-1)!

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

4

Un algoritmo A que resuelve un problema P es recursivo siestá basado directa o indirectamente en sí mismo.

Problema P con Datos I

���

resuelto

en términos de ...

��������������������������

Problema P con Datos I' �� I

con: I, I' del mismo tipo

I'���I

Cuando I' es lo más pequeña posible, solucióndirecta

Page 3: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

5

ESQUEMA DE UN ALGORITMO RECURSIVOSENCILLO :

f xh x d x

c x f ant x d x( )

( ) ( )

( , ( ( )) ( )�

���

{P(x)}

función f(x:T1) devuelve T2

opción

d(x): r:=h(x); /*Casos directos*/

�d(x): v:= f(ant(x)) ; r:=c(x,v);

/*Casos recursivos*/

fopción

devuelve r

ffunción

{Q(x,r)}

� Cada llamada recursiva (activación de la función) posee supropio conjunto de variables locales y parámetros.

Existen tantos objetos con un mismo nombre comoactivaciones de la función estén pendientes de terminar.

� La comunicación entre las sucesivas activaciones debehacerse por medio de parámetros.

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

6

TIPOS DE RECURSIÓN

1.- RECURSIÓN LINEAL : Si cada llamada recursivagenera, como mucho otra llamada recursiva

- FINAL : si la llamada recursiva es la última operaciónque se efectúa, devolviéndose como resultado lo que sehaya obtenido de la llamada recursiva sin modificaciónalguna.

- NO FINAL : El resultado obtenido de la llamadarecursiva se combina para dar lugar al resultado de lafunción que realiza la llamada.

2.- RECURSIÓN MÚLTIPLE : si alguna llamada puedegenerar más de una llamada adicional.

Page 4: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

7

EJEMPLOS :

� RECURSIÓN LINEAL FINAL

{n0 � m0}

función MCD( n,m :entero)devuelve entero

var r :entero ;

opción

n=m : r :=n ;

n>m : r := MCD( n-m, m) ;

n<m : r := MCD( n, m-n) ;

fopción

devuelve r

ffunción

{MCD(n,m) es el m·ximo entero que divide a n y a m}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

8

Supongamos que hacemos la llamada MCD(25,15)

Secuencia de llamadas :

MCD(25,15)

n,m

MCD(n-m,m)

10,15

n,m

MCD(n,m-n)

10,5

n,m

MCD(n-m,m)

5,5

n,m

Traza :

MCD(25,15)

r = MCD(n-m,m)

10,15

n,m

r = MCD(n,m-n)

10,5

n,m

r=MCD(n-m,m)

5,5

n,m

{r=5}

{r=5}

{r=5}

{r=5}

Page 5: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

9

� RECURSIÓN LINEAL NO FINAL :

{n0}

función FACT ( n:entero)devuelve entero

var r,v :entero ;

opción

n=0 : r :=1 ;

n>0 : v := FACT( n-1 ) ;

r :=v*n;

fopción

devuelve r

ffunción

{FACT(n)=n†!}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

10

Supongamos que la llamada inicial es FACT(4)

Secuencia de llamadas :

FACT(4) Llamada inicial n�

FACT(n-1) 3 n�

FACT(n-1) 2 n�

FACT(n-1) 1 n�

FACT(n-1) 0 Caso Directo n

Page 6: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

11

Traza :

FACT(4) n=4

v :=FACT(n-1) ; n=3v :=FACT(n-1) ;

n=2v :=FACT(n-1) ;

n=1v :=FACT(n-1) ;

n=0r :=1 ;

{v=1}r :=v*n{r=1*1=1}

{v=1}r :=v*n{r=1*2=2}

{v=2}r :=v*n{r=2*3=6}

{v=6}r :=v*n{r=6*4=24}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

12

� RECURSIÓN MÚLTIPLE :

{n0}

función Fib ( n:entero)devuelve entero ;

var r :entero ;

opción

n 1 : r:=n ;

n>1 : r:= Fib ( n-1 )+ Fib ( n-2 ) ;

fopción

devuelve r

ffunción

{Fib(n)=Fibonacci(n)}

donde Fibonacci nn n

Fibonacci n Fibonacci n n( )

( ) ( )�

� � � ���

���

1

1 2 1

Page 7: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

13

Supongamos que la llamada es Fib(4) :

Árbol de llamadas :

Fib(4)

Fib(3) Fib(2)

Fib(2) Fib(1) Fib(1) Fib(0)

Fib(1) Fib(0)

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

14

Traza :

Fib(4) � Llamada inicial n

Fib(n-1) n=3

Fib(n-1) n=2

Fib(n-1) n=1

{r=1}Fib(n-2)

n=0{r=0}

{r=1+0=1}Fib(n-2)

n=1{r=1}

{r=1+1=2}Fib(n-2) n=2

Fib(n-1) n=1

{r=1}Fib(n-2)

n=0{r=0}

{r=1+0=1}{r=2+1=3}

Page 8: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

15

2. INDUCCIÓN

Si queremos demostrar la correcciÛn de un algoritmo

recursivo ....

øQU… M…TODO DE DEMOSTRACI”N

PODEMOS USAR?

1. Debemos analizar todas y cada una de las

instrucciones del algoritmo.

2. Pero .... !!! incluye instrucciones que consisten en

ejecutar el mismo algoritmo ("llamadas recursivas") !!

Idea : Suponer que estas llamadas funcionancorrectamente e intentar demostrar que la funciónque hace la llamada también.

� Aplicar el método de demostración por inducción

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

16

Para comprobar que un algoritmo recursivo es correcto hayque analizar los aspectos siguientes :

1.- ¿Hay una salida no recursiva del algoritmo (CasoDirecto) ?, ¿El algoritmo cumple con la especificación eneste caso ?

2.- ¿Cada llamada recursiva se refiere a un caso máspequeño del problema original ?

3.- Suponiendo que la(s) llamada(s) recursivas cumplen laespecificación (son correctas), ¿cumple la especificación elalgoritmo completo ?

Page 9: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

17

2.1 PRINCIPIO DE INDUCCIÓN.

Principio de Inducción Fuerte

FASE 1: BASE INDUCCIÓN

Probar que la propiedad P es cierta para n0 �0, n0 ��N.(Para ello se utilizan las propiedades de los naturales.)

FASE 2: INDUCCIÓN Probar que P es hereditara

2a) HIPÓTESIS DE INDUCCIÓN: Supongo P cierta paran ��N / n �n0

2b) PRUEBA: Probar que P es cierta para n+1.(Para ello se utilizan las propiedades de los N y la hipótesis de inducción.)

FASE 3: CONCLUSIÓN Si hemos concluido con éxito lasdos fases anteriores

P es cierta ��n ��N, n �n0, n0 ��N

( P(n0) ����n: ( P(n) ��P(n + 1) ) �����n: P(n))

n0 n n+1 n0

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

18

Principio de Inducción Fuerte

FASE 1: BASE INDUCCIÓN

Probar que la propiedad P es cierta para n0 �0, n0 ��N.(Para ello se utilizan las propiedades de los naturales.)

FASE 2: INDUCCIÓN Probar que P es hereditara

2a) HIPÓTESIS DE INDUCCIÓN: Supongo que P escierta ��x ��[n0, n], n �n0, n0, n, x ��N.

2b) PRUEBA: Probar que P es cierta para n+1.(Para ello se utilizan las propiedades de los N y la hipótesis de inducción.)

FASE 3: CONCLUSIÓN Si hemos concluido con éxito lasdos fases anteriores

P es cierta ��n ��N, n �n0, n0 ��N

( ��n: ((��x: x <n: P(x)) ��P(n))) �����n: P(n))

x n

n0

n0

Page 10: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

19

Ejemplo:

Todo número de la forma 10 n -1 es divisible por 9.

BASE DE INDUCCIÓN:

Probar que 100 - 1 es divisible por 9: 100 - 1 = 0 = 0 * 9

INDUCCIÓN:

2a) HIPÓTESIS DE INDUCCIÓN:

Supongo que 10n - 1 es divisible por 9 ( 10n - 1 = 9 * a)

2b) PRUEBA:

10n+1 - 1 = 10 * (10n - 1) + 9 = 9 * (10 * a + 1)

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

20

PRUEBA POR INDUCCIÓN DE PROPIEDADES DEFUNCIONES RECURSIVAS.

Sea f: D ��R una función recursiva.

Sea P una propiedad de la función, tal como

CORRECCIÓN, TERMINACIÓN, OTRAS

Ejemplo: Dada la función factorial

FACT nn

n FACT n n( )

* ( )�

� ���

���

1 0

1 0

(a) Demostrar que termina.

Como el dominio de FACT es N, utilizaremos el principiode inducción sobre N para la demostración

BASE: FACT(0) origina un número finito de cálculos

INDUCCIÓN :

HIPOTESIS: FACT(n - 1) origina un número finito de cálculos

PRUEBA: ¿FACT(n) origina un número finito?

Por definición , FACT(n) = FACT(n - 1) * n

Por HI , FACT(n - 1) termina

Entonces, FACT(n) también termina.

Page 11: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

21

(b) Demostrar que es correcta, o sea que :

FACT n n( ) !�

donde n ! se define como nn

i nn

! ��

���

���

���

1 0

01

BASE: FACT(0)=1

INDUCCIÓN:

HIPÓTESIS: FACT(n-1) = 1 * 2 * .. * (n - 1) n > 0

PRUEBA: ¿ FACT(n) = 1 * 2 * 3 * .. * n?

Por definición , FACT(n)=n * FACT(n - 1)

Por HI , FACT(n-1) = 1 * 2 * .. * (n - 1)

Entonces,

FACT(n) = n * (1 * 2 * .. * (n - 1))=1 * 2 * .. * (n - 1) * n

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

22

2.2 VERIFICACIÓN DE ALGORITMOSRECURSIVOS. FUNCIÓN LIMITADORA.

Consideremos el siguiente esquema :

{P(x)}

función f(x:T1) devuelve T2

opción

d(x): r:=h(x); /*Casos directos*/

�d(x): v:= f(ant(x)) ; r:=c(x,v);

/*Casos recursivos*/

fopción

devuelve r

ffunción

{Q(x,r)}

Page 12: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

23

Para verificar este esquema consideraremos :

� CASOS DIRECTOS : Tendremos que demostrar

{P(x)�d(x)}r :=h(x){Q(x,r)}

que equivale a demostrar P(x)�d(x) �{Q(x,h(x))}

� CASOS RECURSIVOS :

1.- Garantizar que los parámetros de la llamada recursivacumplen la precondición :

P(x) � � d(x) � P(ant(x))

2.- Demostración por inducción de la corrección :

P(x) � � d(x) � Q(ant(x),v) � Q(x,c(v,x))

H.I

3.- Validación del razonamiento inductivo :

Definir una función limitadora t : T1� Natural

Demostrar que t(x) decrece estrictamente en cada llamada :

P(x) � � d(x) � t(ant(x)) < t(x)

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

24

La función limitadora :

- Valida el razonamiento por inducción

- Garantiza la terminación de la secuencia de llamadasrecursivas, ya que cada una tiene que tener un valornatural t(x) estrictamente inferior al de la anterior y enlos Naturales esto no puede ocurrir indefinidamente

- De hecho es una cota superior del número de llamadasque se realizan a la función (cuando la recursión eslineal).

La verificación no es un argumento a posteriori sino queguia el diseño y explica el algoritmo.

Page 13: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

25

3. ETAPAS DEL DISEÑO RECURSIVO.

Un diseño recursivo constará de las siguientes etapas:

1.- Definición del problema.

2.- Análisis de casos. Identificación de la funciónlimitadora.

3.-Transcripción algorítmica y verificación de cada caso.

4.-Validación de la inducción : la función limitadoradecrece estrictamente en las llamadas.

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

26

DEFINICIÓN DEL PROBLEMA

� Nombre del algoritmo, sus datos y sus resultados� Precondición� Postcondición

ANÁLISIS POR CASOS. IDENTIFICACIÓN DE LAFUNCIÓN LIMITADORA.

Analizar los diferentes casos que se puedan presentar,identificando :

� Uno (o más) CASOS DIRECTOS

� Uno (o mas) CASOS RECURSIVOS

Concretar la FUNCIÓN LIMITADORA

OBSERVACIONES :

1.- Es preciso asegurarse de que se cubren todos los casosque pueden aparecer.

2.- Frecuentemente, la elección de los casos directos puederealizarse antes de decidir la función limitadora, bastacomparar P y Q para ver en qué casos es fácil obtener Q apartir de P. Así los casos directos pueden ayudar a buscar lafunción limitadora : decrementar ésta debe suponeraproximarse al caso directo.

Page 14: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

27

DISEÑO Y VERIFICACIÓN DE CADA CASO

Diseño del fragmento de programa que resuelve cada casojunto con su verificación :

(1) Al programar los casos recursivos es precisosuponer, como Hipótesis de Inducción, que lasllamadas recursivas funcionan correctamente.

(2) Para poder aplicar la inducción ha de garantizarseque, al evaluar la función limitadora sobre losparámetros que aparecen en cada llamada, se obtienenvalores estrictamente menores que los quecorresponden a los recibidos.

Como subproducto de (2) queda demostrado que larecursión es finita, ya que no puede haber infinitasllamadas recursivas tales que cada una de ellas tengaasociado un número natural estrictamente inferior alde la anterior.

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

28

PROBLEMA 1: MULTIPLICACIÓN DE NATURALES

Supongamos que el repertorio de instrucciones disponiblessobre los naturales se reduce a la suma y la diferencia.Queremos diseñar un algoritmo recursivo para realizar lamultiplicación de naturales.

Definición :

algoritmo MULT (Datos a,b :entero

Resultado p :entero)

Precondición {a0 � b 0}

Postcondición {p=a*b}

Análisis de casos. Función limitadora.

Hemos de distinguir al menos un caso directo y otrorecursivo, éste nos ha de permitir hacer decrecer losparámetros en algún sentido.

Tomemos como función limitadora “a” e intentemosdecrementarla de 1 en 1 :

Caso DIRECTO : a=0

Casos RECURSIVOS : a>0

Page 15: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

29

Solución al Caso Directo :

{a=0}

? ? � p :=0

{p=a*b}

Solución a los Casos recursivos :

Obsérvese que a*b=(a-1+1)*b=(a-1)*b+b

{a>0}

p :=MULT(a-1,b)

{p=(a-1)*b)} H.I

? ? � p :=p+b

{p=a*b}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

30

El algoritmo queda :

{a 0 � b 0}

función MULT(a,b:entero)devuelve entero;

var p :Natural

opción

a=0 : p :=0 ;

a>0 : p :=MULT(a-1,b) ;

{p=(a-1)*b}

p :=p+b ;

fopción

{p=a*b}

devuelve p

ffunción

{MULT(a,b)=a*b}

¿Cuántas llamadas recursivas hace MULT(a,b) ? a

PRIMERA MEJORA : Hacer decrecer el menor de a y b

Page 16: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

31

SEGUNDA MEJORA :

Suponiendo que además de las operaciones + y - se puedenusar ciertas multiplicaciones y divisiones (por 2).

Intentemos decrementar a de otra manera : dividiendo por 2

Hemos de garantizar que a div 2 < a (en el caso recursivo):

Caso DIRECTO : a=0

Casos RECURSIVOS : a>0

Solución al Caso directo : igual que antes

Solución a los Casos recursivos :

{a>0}

p :=MULT2(a div 2,b)

{p=(a div 2)*b)} H.I

? ?

{p=a*b}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

32

Diseño de ? ?

Si a es PAR : 2*(a div 2)*b=a*b

Si a es impar :

(a div 2)=(a-1) div 2

2*(a div 2)*b=2*((a-1) div 2)*b=(a-1)*bluego a*b=2*(a div 2)*b+b=MULT2(a div 2,b)+b

Algoritmo resultante :

{a 0 � b 0}

función MULT2(a,b:entero)devuelve entero;

var p :entero

opción

a=0 : p :=0 ;

a>0 : p :=MULT(adiv2,b);

{p=(a div 2)*b}

opción

par(a): p:=p*2;

�par(a): p:=p*2+b

fopción

{p=a*b}

devuelve p

ffunción

{MULT2(a,b)=a*b}

¿Cuántas llamadas recursivas se realizan en este caso ? log a

Page 17: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

33

PROBLEMA 2: Cálculo del cociente y el resto de ladivisión entera. Dados dos enteros a �0 y b > 0 se deseaobtener q, r tales que

a = b * q + r � q �0, 0 �r < bSolo usaremos +, - y multiplicaciones y divisiones por 2.

DEFINICIÓN :

algoritmo DIVIDIR (Datos a,b :entero

Resultados q,r :entero)

Precondición {a0 � b>0}

Postcondición {a=b*q+r � 0 r<b � q0}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

34

ANALISIS POR CASOS Y FUNCIÓN LIMITADORA :

Observemos que :

a - b = b * (q - 1) + r, � 0 �r < b ���q - 1 �0

donde “q-1” es el cociente de “(a-b) div b” y “r” es el resto

Esto nos da una pista para tomar como función limitadora ay reducir su valor en la forma a-b. Esto requiere comoguarda que ab, quedando a<b como caso directo :

Casos directos : a<b

Casos recursivos : ab

Solución de los Casos Directos :

{b>0 �a<b}

? ? � q :=0 ; r :=a ;

{a=b*q+r � r<b � q0}

Solución de los Casos Recursivos :

{b>0 �ab}

DIVIDIR(a-b,b,q,r) ;

{a-b=b*q+r} {a=b*(q+1)+r}

q :=q+1 ;

{a=b*q+r � r<b � q0}

Page 18: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

35

ALGORITMO RESULTANTE :

{a 0 � b>0}

acción dividir(ent a,b:entero;

sal q,r :entero)

opción

a<b: q :=0;r :=a ;

ab: dividir(a-b,b,q,r);

q :=q+1 ;

fopción

ffunción

{a=b*q+r �q0�0 r<b � q 0}

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

36

Ejercicios propuestos :

(1) ¿Podríamos basar el diseño en reducir a en 1 ?

(2) Diseñar un algoritmo reduciendo el parámetro “a”mediante una división por 2.

(3) Diseñar un algoritmo incrementando el parámetro “b”duplicándolo.

Page 19: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

37

PROBLEMA 3 : SUMAR LAS “i” PRIMERASCOMPONENTES DE UN VECTOR “v”.

Supongamos definido :

tipo TipoVector=vector [1..N] de entero ;

DEFINICIÓN :

algoritmo SUMAV (Datos v :TipoVector ;i :entero

Resultado s : entero)

Precondición : {0 i N}

Postcondición : {SUMAV(v)=�j=1..i v[j] }

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

38

ANÁLISIS DE CASOS Y FUNCIÓN LIMITADORA :

CASO DIRECTO : i=0, anula el dominio del cuantificadorde Q. La solución es s :=0

CASOS RECURSIVOS : i>0

Como función limitadora elegiremos el valor de “i”

{i N � i>0}

s :=SUMAV(a,i-1) ;

{s=�j=1..i-1 v[j] }

? ? � s :=s+a[i]

{s=�j=1..i v[j] }

Page 20: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

39

Algoritmo resultante :

función SumaV(v:TipoVector;i:entero)

devuelve entero

var s :entero ;

opción

i=0 : s :=0 ;

i>0 : s :=SumaV(v,i-1) ;

s :=s+v[i] ;

fopción

devuelve s

ffunción

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

40

4. ANÁLISIS DE LA COMPLEJIDAD TEMPORAL DELOS ALGORITMOS RECURSIVOS.

Si la definición recursiva es:

f xh x si d x

c x f ant x f ant x si d xm

( )( ) ( )

( , ( ( )),..., ( ( ))) ( )�

��� 1

el coste del algoritmo asociado vendrá frecuentementedado por:

coste(n) = m coste( F(n) ) + g(n) si n > n0

coste (n) = no importa si n n0

donde:

� F es la función de reducción de la talla (n) en cadallamada recursiva. Normalmente F(n)<n, y másconcretamente: F(n) = n–c ó F(n) = n/c.

� m es el número de llamadas recursivas que generacada llamada a f(x), suponiendo que en todas ellas latalla se reduzca de la misma forma.

� g(n) es el coste de f(x) excluidas las llamadasrecursivas.

Page 21: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

41

Resolveremos las relaciones de recurrencia por elmétodo de sustitución .

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

42

EJEMPLO (Aplicación del método de sustitución).

función máximo(a: vector; i : entero)

devuelve entero;opción

i=1: devuelve a[1];i>1: devuelve mayor(máximo(a, i-1 ),a[i]));

fopciónffunción

La primera llamada es máximo(a,n), siendo n el nºde elementos del vector.

• La talla del problema es n.

• No hay diferentes instancias; en cualquier casose recorre todo el vector.

Las relaciones de recurrencia serán:

coste( 1 ) = K1

coste( n ) = coste( n-1 ) + K2 n>1.

Page 22: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

43

El método de sustitución consiste en ir desarrollando lafunción, tomando valores decrecientes de n ysustituyendo en coste(n) hasta llegar al caso en quecesa la recurrencia (caso directo).

En el ejemplo anterior:

coste(1) = K1

coste(n) = coste(n-1) + K2 n>1,

luego

coste(n)

= coste(n-1) + k

= coste(n-2) + 2k

= coste(n-3) + 3k

= coste(n-4) + 4k = ....

= coste(n-(n-1)) + (n-1)k

= coste(1) + (n-1)k

= k' + (n-1)k ���(n).

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

44

Para obtener el orden de las relaciones máshabituales, se puede aplicar el siguiente teorema.

TEOREMA. Sean a 1, b � R+, n, c ��N.Supóngase que f verifica para n c las relacionesindicadas. Entonces:

Caso 1

f(n) = a f(n-c) + b a = 1 � �(n)

a > 1 � �(an/c)

Caso 2

f(n) = a f(n-c) + bn + d a = 1 � �(n2)

a > 1 � �(an/c)

Caso 3

f(n) = a f(n/c) + b a = 1 � �(logcn)

a > 1 � �(nlogca)

Caso 4

f(n) = a f(n/c) + bn + d a < c � �(n)

a = c � �(n logcn)

a > c � �(nlogca)

Page 23: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

45

Ejemplo : Las torres de Hanoi , en el que se debenmover n discos de uno en uno desde una pila inicial aotra destino haciendo uso de una tercera pila auxiliar,con la restricción de que cualquier disco, en cualquiermomento, sólo puede tener por debajo de él discos demayor diámetro.

Procedimiento hanoi(n: natural; ini, dest, aux:

pila de discos) es si n>0 entonces hanoi(n-1,ini,aux,dest);

mueve_disco_sup(ini,dest);hanoi(n-1,aux,dest,ini)

fsifprocedimiento,

donde mueve_disco_sup(a,b � tiene coste �(1).

Talla del problema: n. No hay instancias diferentes.

Relaciones de recurrencia de la función de coste:

coste(n) = 2 coste(n-1) + K1 n>0

coste(n) = K2 n=0

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

46

Al resolver por sustitución:

coste(n) = 2 coste(n-1) + K1 n>0

coste(n) = K2 n=0

coste(n)

= 2coste(n-1) + K1

= 2(2coste(n-2) + K1) + K1

= 4coste(n-2) +2 K1 + K1

= 4(2coste(n-3) + K1) + 2 K1+ K1

= 8coste(n-3) + 4 K1 + 2 K1 + K1 =......

= 2ncoste(0) +2

n-1 K1 + 2

n-2 K1 + ... + 2 K1 + K1

= 2n K2 + K1(2

n-1) � �(2

n).

Page 24: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

47

EJEMPLO: Búsqueda dicotómica. (Aplicación de lasrelaciones de recurrencia a algoritmos iterativos.)

{ v está ordenado }procedimiento dicotómica

(v: vector �1..n � de entero; n, x: entero; sal está: lógico; sal m: entero) es

var i,j: entero fvar;i:=1 ; j:=n; está := falso;repetir

m := (i+j) div 2;opciónv[m] > x: j := m - 1;v[m] < x: i := m + 1;v[m] = x: está := verdadero;

fopciónhasta que i>j está

fprocedimiento{1 �m�n�((está � v �m�=x) �

( �está � �k:1 �k�n:v �k �x)}

La talla del problema es n = j-i+1 �j-i

Caso peor (x no está en v): como tras cada iteración latalla del problema disminuye aproximadamente a lamitad, se tiene que:

coste(n) = K1 + coste(n/2) n>1

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

48

(Caso peor)

costep(n) = K1 + costep(n/2)) n>1

costep(1) = K2

Si se resuelve la recurrencia por sustitución:

costep(n)

= K1 + costep(n/2)

= K1 + K1 + costep(n/22)

= 2 K1 + costep(n/22)

= 2 K1 + K1 + costep(n/23)

= 3 K1 + K1 + costep(n/24) = ....

= (log2n) K1 + costep(n/2log n

))

= (log2n) K1 + costep(n/n)

= (log2n) K1 + K2 ���( logn ).

Page 25: Objetivos. de Algoritmos Recursivos. Tema 2: Análisis …erodri/tema2.pdfAD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos 1 Tema 2: Análisis y Diseño de Algoritmos

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

49

Caso mejor: x se encuentra en la primera iteración.

Resumen:

coste(n) ���( logn )

coste(n) ��!( 1 )

AD2 98/99. Tema 2: Análisis y Diseño de Algoritmos Recursivos

50