Академический Документы
Профессиональный Документы
Культура Документы
Tema 1: Preliminares
Estructuras de Datos
Grado en Ingeniera de Computadores Universidad Rey Juan Carlos Jos Miguel Buenaposada Biencinto
Agradecimientos: a Ana Pradera y Juan Manuel Serrano por el planteamiento del curso, a Antonio Sanz y a algunos otros profesores del DCC por muchas (o algunas transparencias) segn el caso -.
URJC-ED-Introduccin
URJC-ED-Introduccin
URJC-ED-Introduccin
Normas de estilo
Evitar varias instrucciones en una misma lnea Tabular adecuadamente el anidamiento de sentencias. Evitar escribir:
IF precio>MAXIMO THEN WriteLn(Precio abusivo);
Problema
Atajo tentador
Algoritmo
Programa
Fase de implementacin
Dar nombres nemotcnicos a los identificadores que describan lo mejor posible su cometido o lo que representan (subprogramas y variables). Palabras reservadas: MAYUSCULAS
WHILE, FOR, RECORD,...
5
URJC-ED-Introduccin
URJC-ED-Introduccin
URJC-ED-Introduccin
URJC-ED-Introduccin
{************************************************************************************************* * * * Mdulo: Nombre * * Fichero: ( ) Programa ( ) Espec. TAD ( ) Impl. TAD ( ) Otros * * Autor(es): Nombre(s) * * Fecha: Fecha de actualizacin * * * * Descripcin: * * Breve descripcin del mdulo (prrafo corto) * * * *************************************************************************************************}
URJC-ED-Introduccin
URJC-ED-Introduccin
10
= = = =
URJC-ED-Introduccin
11
URJC-ED-Introduccin
12
Tambin podemos acceder a los campos de un registro abriendo el registro con la sentencia WITH:
WITH nombreVariableRegistro DO Instruccin que con una expresin con nombreCampo
URJC-ED-Introduccin
13
URJC-ED-Introduccin
14
ndice
1.1 Conceptos previos 1.2 Punteros 1.3 Complejidad
URJC-ED-Introduccin
15
URJC-ED-Introduccin
16
Punteros
Una variable puntero sirve para albergar la direccin de memoria de otra variable (es decir, apunta a otra variable). Utilizando punteros podremos:
Pedir (reservar) nueva memoria dinmica al sistema. Liberar la memoria a la que se apunta. Acceder al valor del dato al que se apunta.
Pascal (como C, C++, y otros lenguajes) posee mecanismos para manejar memoria dinmica a travs de punteros.
17
URJC-ED-Introduccin
URJC-ED-Introduccin
18
El compilador de Pascal reservar 2 bytes en una posicin de memoria (podra ser un registro de la CPU) a la que llamar x.
El compilador de Pascal reservar N bytes (los necesarios para almacenar una direccin de memoria) en una posicin de memoria (podra ser un registro de la CPU) a la que llamar p.
URJC-ED-Introduccin
URJC-ED-Introduccin
19
20
Contenido de un puntero p: p^
Se accede a la variable apuntada por el puntero (a su contenido).
?
Grficamente:
21
URJC-ED-Introduccin
22
URJC-ED-Introduccin
23
URJC-ED-Introduccin
24
URJC-ED-Introduccin
25
URJC-ED-Introduccin
26
URJC-ED-Introduccin
27
URJC-ED-Introduccin
28
URJC-ED-Introduccin
29
URJC-ED-Introduccin
30
Ejercicio 1
Qu valores escribe el programa?
PROGRAM Ejer1; VAR a, b: integer; pb: ^integer; BEGIN a := 10; pb := @a; b := pb^; writeln(a, , b); END.
URJC-ED-Introduccin
31
URJC-ED-Introduccin
32
Ejercicio 2
Qu valores escribe el programa?
PROGRAM Ejer2; VAR a: string; pa, pb: ^string; BEGIN a := Hola; pa := @a; pb := pa; writeln(a); pb^ := Adios; writeln(a); END.
Si p es un puntero a integer reserva espacio para contener un integer. Si p es un puntero a char reserva espacio para albergar una valor de tipo char.
URJC-ED-Introduccin
33
URJC-ED-Introduccin
34
URJC-ED-Introduccin
35
URJC-ED-Introduccin
36
Dir. Memoria: p
90 ?
37
URJC-ED-Introduccin
38
Dir. Memoria: p
90 54
54 ?
URJC-ED-Introduccin
39
URJC-ED-Introduccin
40
Dir. Memoria: p
90
URJC-ED-Introduccin
41
URJC-ED-Introduccin
42
Ejercicio 3
Qu hace el programa?
PROGRAM Ejer3; VAR pa, pb: ^string; BEGIN new(pa); pa^ := Hola; pb := pa; writeln(pa^); pb^ := Adios; writeln(pa^); dispose(pb); END.
Cuando se pide memoria con new(p) y se asigna otra direccin a p antes de hacer un dispose(p) se produce una prdida de memoria (la memoria apuntada por p queda ocupada e inaccesible).
URJC-ED-Introduccin
43
URJC-ED-Introduccin
44
Error de acceso
Cada vez que se llama a dispose(p), la memoria ocupada se marca como libre pero p mantiene la direccin anterior al dispose.
Ejercicio 4
Qu hace el programa?
PROGRAM Ejer4; VAR pa, pb: ^string; BEGIN new(pa); pa^ := Hola; new(pb); pb := pa; writeln(pa^); pb^ := Adios; writeln(pa^); dispose(pb); dispose(pa); END.
45
URJC-ED-Introduccin
URJC-ED-Introduccin
46
p1 es copia de p p1 23
47
URJC-ED-Introduccin
48
Ejercicio 5
Qu valores escribe el programa?
PROGRAM Ejer5; TYPE TPuntEnt = ^integer; PROCEDURE X( x: TPuntEnt; y: integer; VAR z: integer ); VAR a, b, c: integer; BEGIN { Ejer5 } a := 2; b := 3; c := 4; X(@a, b, c); writeln(a, ,b, , c); END. { Ejer 5 }
ndice
1.1 Conceptos previos 1.2 Punteros 1.3 Complejidad
URJC-ED-Introduccin
49
URJC-ED-Introduccin
50
Definicin de la complejidad
La complejidad o eficiencia de un algoritmo se define como el orden de magnitud de los recursos informticos que requiere el algoritmo para ser ejecutado.
URJC-ED-Introduccin
51
URJC-ED-Introduccin
52
Recursos informticos
Los recursos informticos a evaluar son el tiempo (de ejecucin) y/o el espacio (de memoria) requeridos por los algoritmos. Ambos dependen del tamao de la entrada. Se trata de calcular las funciones TA y EA:
TA(n) = tiempo requerido para la ejecucin del algoritmo A con una entrada de tamao n. EA(n) = espacio de memoria requerido para la ejecucin del algoritmo A con una entrada de tamao n.
URJC-ED-Introduccin
53
URJC-ED-Introduccin
54
Mtodo terico:
Calcular el nmero de operaciones bsicas que realiza el algoritmo. Ventajas: el resultado no depende ni del programador, ni del lenguaje, ni de la CPU.
Una operacin bsica es aquella cuyo tiempo de ejecucin se puede acotar superiormente por una constante, independientemente del tamao de la entrada, la CPU, el lenguaje de programacin, el compilador, etc.
URJC-ED-Introduccin
55
URJC-ED-Introduccin
56
fin := FALSO; k := 1; MIENTRAS (k<=N) Y (NO fin) HACER SI (V[k] == buscado) fin := true; k := k + 1;
URJC-ED-Introduccin
57
URJC-ED-Introduccin
58
fin := FALSO; k := 1; MIENTRAS (k<=N) Y (NO fin) HACER SI (V[k] == buscado) fin := true; k := k + 1;
Nmero promedio de iteraciones suponiendo igual probabilidad de encontrar buscado en cualquier posicin de V (de tamao N)?
59
fin := FALSO; k := 1; MIENTRAS (k<=N) Y (NO fin) HACER SI (V[k] == buscado) fin := true; k := k + 1;
URJC-ED-Introduccin
URJC-ED-Introduccin
60
El clculo en el peor caso asegura que los recursos reales consumidos, sea cual sea el contenido de la entrada, nunca rebasarn el valor calculado!
Para analizar las funciones TA y EA bastar con estudiar su comportamiento asinttico (cmo se comportan cuando el tamao de la entrada, n, es grande).
URJC-ED-Introduccin
61
URJC-ED-Introduccin
62
URJC-ED-Introduccin
63
URJC-ED-Introduccin
64
c = cn O(n)
i=1
n i =1
n
g(n) = i = g(n) =
i
i =1
URJC-ED-Introduccin
65
URJC-ED-Introduccin
66
complejidad polinmica (p=2: cuadrtica, p=3: cbica) complejidad exponencial complejidad factorial
URJC-ED-Introduccin
67
URJC-ED-Introduccin
68
En resumen
Para calcular la complejidad de un algoritmo A:
Estudiar el comportamiento asinttico de las funciones TA /EA (dependientes del tamao n de la entrada al algoritmo) en el peor caso o en un caso medio. Encontrar una funcin f tal que en el peor caso/caso medio se tenga TA /EAO(f ).
Los conjuntos O(f ) proporcionan cotas superiores. Se tratar de encontrar la menor de todas las funciones f tal que TA /EA O(f ).
69
URJC-ED-Introduccin
URJC-ED-Introduccin
70
[I instruccin
elemental] TI O(1)
71
URJC-ED-Introduccin
72
I I1 ; I 2 TI1 O( f1 ) TI O(mx( f1 , f 2 )) TI 2 O( f 2 )
URJC-ED-Introduccin
73
URJC-ED-Introduccin
74
Ejemplos
PARA i DESDE 1 HASTA n HACER x := x + 1 PARA i DESDE 1 HASTA n HACER PARA j DESDE 1 HASTA n HACER x := x + 1 PARA i DESDE 1 HASTA n HACER PARA j DESDE 1 HASTA i HACER x := x + 1 i := 1 MIENTRAS i <= n HACER x := x + 1 i := i + 2
75
URJC-ED-Introduccin
{1}
{2}
La complejidad de un bucle
{3}
{4}
URJC-ED-Introduccin
76
Ejemplos (cont.)
x := 1 MIENTRAS x <= n HACER x := x*2 PARA i DESDE 1 HASTA n-1 HACER PARA j DESDE i+1 HASTA n HACER x := x + 1 {5}
{6}
[I llamada
a un subprogram a
P ] TI ( n) = Tp (n)
URJC-ED-Introduccin
77
URJC-ED-Introduccin
78
URJC-ED-Introduccin
79
URJC-ED-Introduccin
80
URJC-ED-Introduccin
81
URJC-ED-Introduccin
82
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1);
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
83
URJC-ED-Introduccin
84
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<1 instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
86
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<1 instrucciones_caso_sencillo DEVOLVER 1, con coste O(1) n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<1 instrucciones_caso_sencillo DEVOLVER 1, con coste O(1) n llamadas recursivas 1 reduccin(n) instrucciones_caso_recursivo
88
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<1 instrucciones_caso_sencillo DEVOLVER 1, con coste O(1) n llamadas recursivas 1 reduccin(n) n-1 instrucciones_caso_recursivo
Ejemplo 1
FUNCIN Ejemplo1(num:Natural) DEVUELVE Natural SI num < 1 ENTONCES DEV 1 SI NO DEV num * Ejemplo1(num-1); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<1 instrucciones_caso_sencillo DEVOLVER 1, con coste O(1) n llamadas recursivas 1 reduccin(n) n-1 instrucciones_caso_recursivo multiplicacin, con coste O(1)
90
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1);
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
91
URJC-ED-Introduccin
92
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada num1 es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada num1 es_caso_sencillo(n) n<2 (n=0 n=1) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
94
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada num1 es_caso_sencillo(n) n<2 (n=0 n=1) instrucciones_caso_sencillo multiplicacin y retorno valor, O(1) n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada num1 es_caso_sencillo(n) n<2 (n=0 n=1) instrucciones_caso_sencillo multiplicacin y retorno valor, O(1) n llamadas recursivas 2 reduccin(n) instrucciones_caso_recursivo
96
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada num1 es_caso_sencillo(n) n<2 (n=0 n=1) instrucciones_caso_sencillo multiplicacin y retorno valor, O(1) n llamadas recursivas 2 reduccin(n) n-2 instrucciones_caso_recursivo
Ejemplo 2
FUNCIN Ejemplo2(num1, num2: Natural) DEVUELVE Natural SI num = 0 ENTONCES DEV num2; SI NO SI num1 = 1 ENTONCES DEV num2*num2; SI NO PARA i DESDE 1 HASTA num1 HACER num2 := num2 + i; DEV Ejemplo2(num1-2,num2)*Ejemplo2(num1-2,num2+num1); Tamao de la entrada num1 es_caso_sencillo(n) n<2 (n=0 n=1) instrucciones_caso_sencillo multiplicacin y retorno valor, O(1) n llamadas recursivas 2 reduccin(n) n-2 instrucciones_caso_recursivo bucle O(n) y resto O(1) O(n)
98
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num;
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
99
URJC-ED-Introduccin
100
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
102
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) instrucciones_caso_recursivo
104
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) n/2 instrucciones_caso_recursivo
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) n/2 instrucciones_caso_recursivo multiplicacin, suma, devolucin, O(1)
106
Ejemplo 3
FUNCIN Ejemplo3(num:Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV num SI NO DEV 5 * Ejemplo3(num/2) + num; Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) n/2 instrucciones_caso_recursivo multiplicacin, suma, devolucin, O(1)
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x);
107
URJC-ED-Introduccin
108
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
110
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas reduccin(n) instrucciones_caso_recursivo
112
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) instrucciones_caso_recursivo
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) n/2 instrucciones_caso_recursivo
114
Ejemplo 4
FUNCIN Ejemplo4(num, x: Natural) DEVUELVE Natural SI num < 2 ENTONCES DEV x SI NO PARA i DESDE 1 HASTA num HACER x := x+1; DEV Ejemplo4(num/2,x); Tamao de la entrada parmetro entrada num es_caso_sencillo(n) n<2 instrucciones_caso_sencillo DEVOLVER num, O(1) n llamadas recursivas 1 reduccin(n) n/2 instrucciones_caso_recursivo bucle O(n) y resto O(1) O(n)
115
URJC-ED-Introduccin
116
cn k si 0 n < b T (n)= k aT ( n b) + cn si n b
Donde:
a = nmero de llamadas recursivas que se realizan n - b = tamao de los sub-problemas generados cnk = coste de las instrucciones que no son llamadas recursivas
URJC-ED-Introduccin
117
URJC-ED-Introduccin
118
URJC-ED-Introduccin
119
URJC-ED-Introduccin
120
URJC-ED-Introduccin
121
URJC-ED-Introduccin
122
cn k si 1 n < b T (n)= k aT (n / b) + cn si n b
Donde:
a = nmero de llamadas recursivas que se realizan n /b = tamao de los sub-problemas generados cnk = coste de las instrucciones que no son llamadas recursivas
URJC-ED-Introduccin
123
URJC-ED-Introduccin
124
URJC-ED-Introduccin
125
URJC-ED-Introduccin
126
URJC-ED-Introduccin
127
URJC-ED-Introduccin
128