Академический Документы
Профессиональный Документы
Культура Документы
Anlisis de
Algoritmos.
1.1- Introduccin.
El objetivo de la presente unidad es realizar una introduccin acerca de los
usos de los algoritmos para resolver problemas y poder utilizar los mismos
en los distintos casos de uso.
Definicin de algoritmo.
Ser preciso: esto significa que los pasos u operaciones del algoritmo
deben desarrollarse en un orden estricto.
1
Ser finito: el nmero de pasos de un algoritmo, por grande y complicado
que sea el problema que soluciona, debe ser limitado. Todo algoritmo
incluye los pasos inicio y fin.
Ejemplos de algoritmos.
Supongamos que tenemos un problema en el auto, qu debemos hacer?
2
Hacer una receta de cocina.
Qu entradas se requieren?
Cmo puedo obtener la solucin deseada si mi error
est en el planteo del problema?
procesamiento de la informacin
3
Cualquier programa bien diseado consta de un programa principal (el
mdulo de nivel ms alto) que llama a sub-programas (mdulos de nivel
ms bajo) que a su vez puede llamar a otros sub-programas.
1. Programar el mdulo.
2. Comprobar el mdulo.
4
1. Anlisis del problema
2 Disear el algoritmo
DIFERENCIA:
CAMPO: estructura
definida en el algoritmo Tipos de Objetos.
y que servir para
realizar las operaciones Los algoritmos trabajan con datos de la realidad, esta informacin que
requeridas. recibe, deber procesarla, por lo cual puede generar nuevos datos a partir
de la informacin ingresada, transformar directamente lo que ingreso al
DATO: valor de la proceso y actualizar o informar a partir de las condiciones que le
informacin a manejar definamos.
dentro de mi algoritmo.
Esa relacin de comunicacin, ya sea de entrada al mismo o de salida
desde el algoritmo lo realiza mediante DATOS, que en nuestro proceso los
El valor del DATO se conocemos como CAMPOS.
mueve dentro de un
CAMPO
5
Podemos dar como primera definicin, que un CAMPO es el elemento que
nosotros identificamos mediante un nombre, por lo cual una de las
caractersticas fundamentales del CAMPO es su nombre; ese nombre que
declaramos es el que permite que el algoritmo lo identifique unvocamente
y que mediante el mismo lo utilizare en el proceso en las operaciones que
desarrollemos. Mientras que el DATO es el valor que ese campo tiene.
El exterior
Segn lo cual un nmero que utilicemos como tal, es decir que nos permita
usarlo en operaciones matemticas pude ser o bien un NMERO REAL o un
NMERO ENTERO.
6
ENTERO: son slo nmeros enteros: 1, 0, 28, 30, 5, tambin los
enteros negativos (-1, -40, etc.), pero siempre sin decimales.
Ahora bien, tambin existen otros tipos de datos, como vimos antes, que
son los caracteres alfabticos, con la aclaracin de los nmeros que en caso
de ser definidos de esta manera no podemos usarlos para operaciones
matemticas.
Por Ej.: a; 2; !
Por Ej.: eof / no eof (es el indicador de fin de archivo) (O est en eof o
est en no eof)
Constantes:
1. Normales:
a. Enteros
7
b. Reales
c. Alfanumricas
d. Carcter
e. Lgica
2. Figurativas:
a. Enteros
b. Reales
c. Alfanumrica
d. Carcter
e. Lgica
Variables
Podramos diferenciar:
Enteros
Reales
Alfanumrica
Lgica
Carcter
8
La variable tiene un valor determinado, de forma que el tipo de variable,
debe de ser uno en concreto, por lo tanto el primer dato de la variable
condicionar los posteriores datos que almacenar despus.
- Nombre
- Tipo
- Valor
Ejemplo:
Carcter+alfabtico+nica A carcter
Carcter+alfabtico+cadena Anala alfanumrico
Cantidad: entero
Nombre: alfanumrico
Sueldo: real
9
Resumiendo
Real
Entero
Alfanumrico
Lgico
Expresiones.
Dentro de nuestros algoritmos podemos hacer una separacin, un tanto
parcial, diciendo que tendremos instrucciones y expresiones.
Suma = 4+8
Sueldo = Bsico+Bsico*0.50
Sueldo = 500+500*0.50
Finalmente
Sueldo = 750
Operaciones Fundamentales
Vamos a definir a continuacin estructuras que nos permitirn interactuar
con el ambiente y determinar la forma en que podemos resolver los
clculos matemticos y operaciones con caracteres.
Asignacin
La utilizamos cuando a un campo determinado le queremos mover un valor
especfico, ya sea producto de una operacin matemtica o no.
Por ejemplo al campo VARI, le movemos el valor que tiene el campo A, eso
quiere decir que a VARI le asigno el valor de A
Vari = A
Ej.: Nombre=Ana
11
Debemos tener especial cuidado de moverle a un campo, un tipo de dato
igual al que usamos para definir al campo, es decir, moveremos caracteres
a un campo definido como tal, y podremos mover nmeros a utilizar en
operaciones aritmticas si previamente al campo lo definimos como entero
o como real.
Operaciones Numricas
Las operaciones ms comunes son la de contar o la de acumular en un
campo. Para ello, se utilizan dos estructuras:
Acumuladores
Contadores.
Acumuladores
Importe, entera
Acumulo, entera
12
Ejemplo de esto, podra ser sumar las ventas de todo un da, donde en una
variable se acumulara los importes de todas las facturas. Ms adelante
pondremos en prctica ejemplos de este tipo.
Contadores
Cantidad = Cantidad + 1
Cada vez que el programa pase por esta instruccin incrementar en uno el
valor de Cantidad.
Operacin
1. Parntesis
2. Funciones
3. Concatenacin
A=LEN(Variable)
Ejemplo:
13
A, alfanumrica
B, entera
A=Juan Perez
Ejemplo:
En este caso a cada valor que quiero mover lo debo colocar entre por ser
caracteres (ese es el caso de Juan y de Perez),
A=Buenos
B=Das
14
Entrada de Datos
INGRESAR
La estructura es la siguiente:
INGRESAR(variable)
Ejemplo
En este caso:
INGRESAR(variable)
15
Vale aclarar, que en este caso debemos preguntar al operador que ingresa
la info si quiere seguir ingresando ms informacin, como forma de saber
cundo termina el proceso; volveremos ms adelante con este tema al
referirnos a estructuras repetitivas y a sus clusulas de escape.
Tambin podemos utilizar otra instruccin para el ingreso de datos que es:
LEER
Leer(campo1,campo2,campon)
En caso de no definir otra condicin, el fin del proceso se dar con el fin del
fichero, es decir cuando all ledo toda la info, eso se da por la condicin de
fin de archivo o:
Eof
Por lo que el campo eof, que es del tipo lgico o booleano, es quien me
avisa si tengo o no registros del archivo secuencial para seguir leyendo.
Salida de Datos
MOSTRAR
IMPRIMIR
ESCRIBIR
16
La forma de las tres instrucciones es la misma, por lo que usar una como
ejemplo.
Formalicemos:
Ejercicio 1
Algoritmo Ejemplo
Var
NUM1,entera
NUM2,entera
SUMA, entera
RESTA, entera
Inicio
Ingresar(Ingrese un nmero, NUM1)
Ingresar(Ingrese otro nmero, NUM2)
SUMA=NUM1+NUM2
RESTA=NUM1-NUM2
Mostrar(La suma es:, SUMA)
Mostrar(La resta es:, RESTA)
Fin
17
Veamos en detalle el proceso de este algoritmo:
La suma es:
La resta es:
Prueba de Escritorio
Este mtodo se utiliza para probar el algoritmo diseado, a fin de
corroborar que el mismo funciona y alcanza el objetivo deseado.
Debemos indicar en el papel el valor que toman las distintas variables del
proceso en cuestin y nosotros debemos actuar como la CPU que recorre
secuencialmente al algoritmo haciendo cumplir cada una de las
instrucciones y condiciones indicadas.
18
Indicar el valor en la hoja una vez que estamos seguros del mismo.
Representacin de Algoritmos
Existen diversas formas de representar algoritmos; dentro de las ms
comunes se encuentran los diagramas de flujo y el pseudocdigo. Cada uno
tiene sus ventajas y desventajas, todo depende del gusto de la persona que
realiza el algoritmo.
Pseudocdigo
Algoritmo:nombre
Debe tener una sentencia nica de FIN, que indica la finalizacin del
proceso.
Diagramas de flujo
19
Esta tcnica muestra los algoritmos de una manera clara y comprensible.
Definicin de variables:
20
- Directa: Asignar un valor directamente que ya conocamos a
priori.
2x + y 7x
2x + 3y = 10
Expresiones Aritmticas:
Mdulo ( MOD )
Multiplicacin ( * )
Divisin ( / )
21
Suma ( + )
Resta ( - )
22
El valor previo de la variable es destruido por el que se le asigna.
Variable Contador:
C=C+1
C=C+5
Variable Acumulador:
A=A+B
B es una variable que cambia de valor en cada pasada por esta instruccin,
por tanto cada vez que se ejecuta esta instruccin, la variable A aumenta
de manera NO constante.
23
Variable Bandera ( Flag):
Este tipo de variables, no tienen por qu ser de tipo lgico, ya que pueden
indicar ms de un estado. Ej.:
Estado_civil = C (Casado)
V (Viudo)
S (Soltero)
Estructuras
Existen tres estructuras bsicas:
Selectiva
Iterativa
Estructuras Selectivas
Posibilidad de tomar distintos caminos en la ejecucin de las acciones.
1. Selectiva simple
2. Selectiva doble
24
1. Selectiva Simple:
Dentro del rombo se expresa una condicin lgica que se reduce a un valor
lgico, verdadero o falso.
si [condicin]
entonces
operacin
sino
fin si
25
si [condicin]
entonces
operacin
fin si
Dado que produce el mismo resultado que poner SINO sin colocar ninguna
operacin.
2. Selectiva Doble:
si [condicin]
entonces
operacion 1
sino
operacion 2
fin si
26
Ejemplo:
EJERCICIO 2
Algoritmo: prueba 1
VAR
A:ENTERA
B:ENTERA
INICIO
INGRESAR ( Ingrese un Nro., A)
INGRESAR (Ingrese otro Nro., B)
SI (A > B)
ENTONCES MOSTRAR( El mayor es , A)
SINO MOSTRAR( El mayor es , B)
FIN SI
FIN
Prueba de escritorio
3. Selectiva Mltiple:
27
En pseudocdigo , su representacin sera:
Si tras chequear todas las condiciones dentro de los rombos, todas resultan
ser falsas, se ejecutara la instruccin que tiene asignada la ltima rama del
SINO, aunque tambin puede ocurrir que dicha rama no tenga asignada
ninguna instruccin, por lo que el programa seguira el flujo normal del
programa.
28
EJERCICIO 3
VAR
Edad:entero
INICIO
INGRESAR ( edad del paciente, edad)
SEGUN (edad) HACER
Entre 0 y 5 aos hacer
MOSTRAR (No tomar aspirina)
Entre 6 y 10 aos hacer
MOSTRAR( tomar 1 aspirina)
Entre 11 y 60 aos hacer
MOSTRAR( tomar 2 aspirinas)
SINO IMPRIMIR (ERROR)
FIN SEGUN
FIN
Pide por pantalla que se le indique la edad del paciente, por eso usamos la
instruccin INGRESAR.
En esta clusula puede ser que no haga nada, pero no puedo dejar de
ponerla. Esto es debido a que si alguna condicin no estuviera
contemplada y faltara esta clusula provocara un error no esperado del
proceso, que es distinto a que si yo le indico al proceso que, en el caso que
29
deba cumplir la clusula SINO, imprima la leyenda ERROR, es decir puede
hacer una accin.
Cada vez que cumple una de las condiciones, al terminar la misma, se sita
en la sentencia inmediatamente posterior a la clusula FIN SEGN.
Prueba de escritorio
EJEMPLO 1.
30
1, 1+2, 1+2+3, etc.
EJERCICIO 4
Algoritmo: Contarcien
Var
Contador: entero
Suma: entero
Inicio
Contador = 1.
Suma = 0.
Mientras (contador sea menor al nmero 100) Hacer
Suma = Contador
or + Suma
Contador = Contador + 1.
Fin mientras.
Mostrar(Suma)
Fin
31
1. Definimos dos campos, SUMA y CONTADOR como enteros.
Operacion1
Operacin2
..
Operacin
Fin Mientras
Resolucin:
32
Se leern los valores de entrada, horas, tarifa, tasa. La salida estar
dada por los valores calculados como Pagabruta, Impuestos
(retenciones hechas) y Paganeta.
En pseudocdigo:
EJERCICIO 5
Algoritmo:Calcularpago
Var
Horas: entero
Tarifa: entero
Tasa: entero
Pagabruta: entero
Impuestos: entero
Paganeta:entero
Inicio
Pagabruta= 0
Impuestos = 0
Paganeta = 0
Ingresar(" Ingrese cantidad de horas", Horas)
Ingresar(" Ingrese Tarifa por hora", Tarifa)
Ingresar(" Ingrese Tasa de descuentos por impuestos", Tasa)
Pagabruta= Horas*Tarifa
Impuestos= Pagabruta*Tasa
Paganeta=Pagabruta-Impuestos
Imprimir(" La paga bruta ser de ", Pagabruta)
Imprimir(Impuestos)
Imprimir(Paganeta)
Fin
En Diagrama de flujo:
33
Analicemos los ejemplos:
34
Ahora bien, una vez solicitado un dato, en este caso las horas trabajadas,
se guarda para luego utilizarlo.
Definimos entonces una instruccin que nos permita guardar los nuevos
datos en una variable.
Almacenar
variable= expresin
Ejemplo:
Horas * Tarifa.
Incrementar Contador en 1.
35
El cual lo expresamos en el lenguaje de algoritmos como:
Contador = Contador +1
Imprimir(Paganeta)
Escribir(Paganeta)
Mostrar (Paganeta)
Write (Paganeta)
36
Atencin: ...dados 2 nmeros cualquiera... significa que nuestro
algoritmo tiene que servir para cualquier par de nmeros.
EJERCICIO 6
Algoritmo ejemplo
Var
Suma:real
Resta:real
Inicio
Suma= 0
Resta = 0
Ingresar(Ingrese un nmero, NUM1)
Ingresar(Ingrese otro nmero, NUM2)
SUMA=NUM1+NUM2
RESTA=NUM1-NUM2
Escribir (La suma es:, SUMA)
Escribir (La resta es:, RESTA)
Fin
Nota:
En nuestro ejemplo definimos dos campos, cada uno como real, pero
tambin podamos hacer lo mismo de la siguiente forma:
SUMA, RESTA:real
37
Al terminar el algoritmo escribimos Fin.
Indentacin
inicio
leer(nombre_pieza,cantidad_de_piezas)
mientras(no sea eof) hacer
si (cantidad_de_piezas =0)
entonces imprimir(reponer : ,nombre_pieza)
sino
finsi
leer(nombre_pieza,cantidad_de_piezas)
fin mientras.
Fin
inicio
leer(nombre_pieza,cantidad_de_piezas)
mientras(no sea eof) hacer
si (cantidad_de_piezas =0)
entonces imprimir(reponer : ,nombre_pieza)
sino
finsi
leer(nombre_pieza,cantidad_de_piezas)
fin mientras
fin
38
En los lenguajes de Computacin, la indentacin se utiliza para mejorar la
legibilidad del cdigo por parte de los programadores, teniendo en cuenta
que raramente se consideran los espacios en blanco como sentencias de un
programa. Sin embargo, en ciertos lenguajes de programacin como
Haskell, Occa, y Python, la indentacin se utiliza para delimitar la
estructura del programa permitiendo establecer bloques de cdigo.
Estructuras Iterativas
Bien, ahora que profundizamos un poco ms en la forma en que
manejamos los datos, podemos ver en ms detalle las estructuras
repetitivas o iterativas.
REPETIR MIENTRAS
REPETIR HASTA
DESDE HASTA
1. Repetir Mientras:
Dentro del Rombo se usa una condicin. El bucle no tiene ramas (aunque
en la representacin pueda parecerlo), se produce una entrada de bucle o
una salida. Se representa de la siguiente forma:
39
Pseudocdigo:
...
mientras [condicin]
hacer
operacin
fin mientras
Ejemplo:
EJERCICIO 7
Inicio
Continua=S
MIENTRAS (Continua=S) hacer
INGRESAR (Ingresar Edad , EDAD)
SI (EDAD >= 21) ENTONCES
Mayores = Mayores + 1
SINO
Menores = Menores + 1
FIN SI
Suma = Suma + EDAD
INGRESAR (Continua S/N:, Continua)
FINMIENTRAS
Promedio=Suma/(Mayores+Menores)
40
MOSTRAR (La Cantidad de Personas Mayores de edad es ,
Mayores)
MOSTRAR (La Cantidad de Personas Menores de edad es ,
Menores)
MOSTRAR (El Promedio de edades es , Promedio)
FIN
Prueba de Escritorio
Repetir Hasta:
Pseudocdigo:
....
repetir operacin
hasta [condicin]
fin repetir
41
Pseudocdigo: Siendo el rectngulo una instruccin, y el rombo una condicin, la
... instruccin se repetir hasta que la condicin de un valor de FALSO,
Para entonces se romper la estructura y se volver al flujo del programa.
x(desde=1hasta10)hacer
Desde Hasta:
operacin
Caso particular. El nmero de repeticiones de una o ms instrucciones
vendr marcado por una variable de control. Se puede utilizar dentro de
fin mientras otra sentencia mayor por ejemplo la sentencia PARA ..HACER
Expresiones Condicionales
Son las expresiones que utilizamos en los rombos, para deducir si dichas
expresiones tienen un valor Verdadero o un valor falso.
EXPRESIONES DE RELACIN
EXPRESIONES LGICAS
Expresiones de Relacin:
= Igual que
42
Una expresin relacional obtiene un valor lgico (VERDADERO O FALSO).
Expresiones Lgicas:
Vamos a tener valores lgicos operados por operadores lgicos. stos son:
NOT ( No )
AND ( Y )
OR ( O )
Operador NOT:
Operador que acta sobre un solo valor. Este operador tiene la cualidad de
invertir el valor lgico. Ej. :
Operador AND:
La operacin AND vale VERDADERO cuando los dos valores son verdaderos,
de lo contrario vale FALSO. Ej. :
Operador OR:
1. NOT
2. AND
3. OR
43
Dado un nmero, imprimir o si es mayor o igual que 9 y 1 si es menor que
9.
EJERCICIO 8
Algoritmo Ej. A
var
NUM: entero
Inicio
Ingresar("Ingrese un nmero", NUM)
Si (NUM >= 9)
Entonces Mostrar("0")
Sino Mostrar ("1")
Fin si
Fin
Prueba de escritorio
EJERCICIO 9
Algoritmo Ej. B
var
A,B,RESUL:ENTERO
Inicio
44
Preguntar("Ingrese el nmero A", A)
Preguntar ("Ingrese el nmero B", B)
RESUL = A*A + 2 * B
Si (RESUL > 100) entonces
Mostrar ("El resultado es mayor que 100")
Fin si
Fin
Prueba de escritorio
Otro ejemplo:
Dada una caja con pelotas de color rojas, azules y blancas, contar cuntas
pelotas hay de cada color y determinar la cantidad total de pelotas que
existen en la caja.
EJERCICIO 10
Algoritmo Ej. E
var
CONTINUA,cadena
CANTVERDES,ENTERO
CANTROJAS,ENTERO
CANTAZULES,ENTER
COLOR,cadena
Inicio
CONTINUA=S
Cantverdes= 0
Cantrojas= 0
Cantazules=0
Mientras (CONTINUA=S) hacer
Ingresar (Ingrese color de la pelota, COLOR)
Segn (COLOR) sea
Igual a Verde
45
CantVerdes= CantVerdes+1
Igual a Rojo
CantRojas= CantRojas+1
Igual a Azul
CantAzules= CantAzules+1
SINO IMPRIMIR(ERROR)
Fin segun
PREGUNTAR (Continua ingresando pelotas,CONTINUA)
Fin Mientras
Mostrar(La cantidad de pelotas verdes es de :,CantVerdes)
Mostrar (La cantidad de pelotas rojas es de :,CantRojas)
Mostrar (La cantidad de pelotas azules es de :,CantAzules)
FIN
Prueba de escritorio
Se realiza una encuesta entre 100 personas que votan por los candidatos A
o B. Se pide comunicar los porcentajes obtenidos por los candidatos.
EJERCICIO 11
Algoritmo f
Var
X,entera
VOTO,cadena
CANT_A,entera
CANT_B,entera
SUMA, entera
PORCE_A,real
46
PORCE_B,real
Inicio
Cant_a= 0
Cant_b=0
Para X (desde 1 hasta 100) hacer
Ingresar (Indique el candidato votado, VOTO)
Si (VOTO=A)
Entonces CANT_A= CAN_A+1
Sino CANT_B= CANT_B+1
Fin Si
Fin Para
SUMA=CANT_A+CANT_B
PORCE_A=(CANT_A*100)/SUMA
PORCE_B=(CANT_B*100)/SUMA
Mostrar (El % del candidato A fue ,PORCE_A)
Mostrar (El % del candidato B fue ,PORCE_B)
Fin
Resumiendo
Hemos visto los conceptos de algoritmos, cmo se relacionan con los datos
y el uso de las instrucciones para poder operar con los mismos. Ahora
veremos una serie de ejercicios para utilizar los conceptos que hemos
visto:
47
Ejercicio 12:
Ejercicio 13:
Ejercicio 14:
Cada dato tiene una relacin con un tipo especfico de dato, cules son los
tipos de datos que hemos visto?
Ejercicio 15:
Existen instrucciones que nos permiten operar con los datos dentro de los
algoritmos, algunos de ellos necesitan clusulas de escape. Qu significa
esta clusula? Cundo se utiliza? Indica un ejemplo de la misma.
Ejercicio 16:
Arma un algoritmo que indique la cantidad total que nos compraron los
clientes y el nombre y apellido de aquellos clientes que compraron ms de
de 500 unidades del producto.
EJERCICIO 17:
EJERCICIO 18:
EJERCICIO 19:
48
COMPENSA EN DICIEMBRE Y FEBRERO si el promedio es menor que 4
EJERCICIO 20:
EJERCICIO 21:
EJERCICIO 22:
EJERCICIO 23:
Dadas las tres notas de cada uno de los 30 alumnos de un curso, informe:
49
el nmero de alumnos reprobados, teniendo en cuenta que la calificacin
final es:
EJERCICIO 24
el ms grande,
el ms pequeo,
la media de N nmeros.
EJERCICIO 25
EJERCICIO 26
50
1.2- Ejemplos de
tiempo de ejecucin de
algoritmos.
Clasificacin de algoritmos
Segn el comportamiento del algoritmo con sus datos de entrada podemos
clasificarlos como:
Caractersticas
Todo algoritmo tiene una serie de caractersticas, que impactan sobre su
eficiencia, la cual es dependiente de la forma y uso de una serie de
recursos.
51
El tiempo: perodo transcurrido entre el inicio y la finalizacin del
algoritmo.
Principio de Invarinza
Definicin del Principio de Invarianza
52
c pertenece a los nmeros reales y n suficientemente grande.
Tmin(n) = Mejor caso Ahora bien, como cada programa puede contener diferentes sentencias
condicionales, esto quiere decir que la dependencia del tiempo estar dada
Tmax(n)= Peor caso por las condiciones que indiquen los datos ingresados. Por lo que
entendemos que segn esas condiciones, con alguna combinacin de datos
T(n) = Valor promedio tendremos el tiempo mnimo de ejecucin, Tmin (N) y por otro lado
tendremos otra combinacin de datos dando por resultado el tiempo
mximo de ejecucin, Tmax (N)
Ahora bien, existirn una serie mayoritaria de casos que estarn entre
ambos extremos, definiendo un valor promedio o ms frecuente.
53
Otro factor es que en aquellos problemas chicos, el impacto de su tiempo
de ejecucin no es un factor crtico de los mismos.
1.3- Notacin O
El impacto se profundiza a medida que crecemos en el problema a
resolver, por lo cual consideraremos a N tendiendo a infinito.
Orden de Complejidad
Podemos decir que:
54
N-logN : complejidad cuasi-lineal, el tiempo de ejecucin es N LogN. Si N
se duplica, el tiempo de ejecucin es ligeramente mayor del doble, un
ejemplo es el quicksort.
2- Algoritmo Exponencial
55
Veamos qu ocurre si tenemos el doble de tiempo, es decir 2 horas o que
tenemos un procesador el doble de rpido y analicemos si adems
queremos resolver un problema de complejidad 2N
Vemos que los logaritmos de complejidad O(N) como O(N log N) tienen un
comportamiento directo entre el tiempo y los datos procesados, al crecer
al doble los datos lleva prcticamente al doble el tiempo de ejecucin.
56
Un programa que nicamente va a trabajar con datos pequeos (valores
bajos de N), el orden de complejidad del algoritmo que usemos suele ser
irrelevante, pudiendo llegar a ser incluso contraproducente.
Clculo de la complejidad
Los algoritmos bien estructurados combinan las sentencias de alguna de las
formas siguientes:
1. sentencias sencillas
2. secuencia (;)
3. decisin (if)
4. bucles
5. llamadas a procedimientos
Sentencias sencillas
Son las indicadas al principio de esta unidad, como ser, entre otras:
Sentencias de asignacin
Entrada/salida
Secuencia (;)
Decisin (si)
57
La condicin suele ser de O(1), complejidad a sumar con la peor posible,
bien en la rama ENTONCES, o bien en la rama SINO
Bucles
Llamadas a procedimientos
58
Notacin (Big-Theta)
Cuando las cotas superior e inferior son la misma, indicamos esto usando la
notacin (big-Theta).
Reglas de simplificacin
Una vez que se determina la ecuacin del tiempo de ejecucin para un
algoritmo, es relativamente sencillo derivar las expresiones para: O-
grande, y .
Esta regla nos dice que si alguna funcin g(n) es una cota superior para una
funcin de costo, entonces cualquier cota superior para g(n), tambin es
una cota superior para la funcin de costo.
2. Si f(n) est en O(k g(n)) para cualquier constante k>0, entonces f(n) est
O(g(n))
59
Esta regla se emplea para simplificar ciclos simples en programas. Si alguna
accin es repetida un cierto nmero de veces, y cada repeticin tiene el
mismo costo, entonces el costo total es el costo de la accin multiplicado
por el nmero de veces que la accin tuvo lugar.
a = b;
sum=0;
sum += n;
for es (n). Por la regla (3), el costo por el entero fragmento de cdigo es
tambin (n).
sum=0;
sum++;
A[k]= k-1;
60
Este cdigo tiene tres partes:
Como el ciclo interno es ejecutado j veces, por la regla (4), tiene un costo
de c3j. El ciclo exterior es ejecutado n veces, pero cada vez el costo del
ciclo interior es diferente.
sum1=0;
sum1++;
sum2=0;
sum2++;
61
Resumiendo
Hemos visto los conceptos de eficiencia y los factores que inciden en el
mismo. Tambin identificamos distintas familias de algoritmos segn su
comportamiento. Conocimos que existen cotas o lmites en cada caso.
1.4- Logaritmos.
Definiciones
Un algoritmo de un nmero, en una base dada, es el exponente al cual se
debe elevar la base para obtener dicho nmero
62
a: es la base
y: es el exponente
x: es el nmero
Desarrollo
Ahora intentemos profundizar con los conceptos vistos anteriormente en el
tem referido a la NOTACIN O.
Comportamiento
El algoritmo logartmico
tiene un comportamiento
que lo asemeja al
logaritmo secuencial
63
Ahora apliquemos lo visto en algunos casos concretos:
DUPLICACIONES SUCESIVAS
2k >= n
k = log n
log n
64
Si tomamos el siguiente ejemplo donde n=4
1.5- Problema de la
bsqueda esttica
Definicin: Una de las aplicaciones naturales de una computadora es la realizacin
Una bsqueda esttica de bsquedas, generalmente sobre estructuras del tipo vectores.
accede a datos Si los datos que tenemos en la estructura no se pueden modificar, decimos
estticos que la bsqueda es esttica.
Tipos de Bsquedas
Podemos identificar 2 tipos de bsquedas:
2. Externa: Cuando los datos entre los que buscamos estn almacenados
en un dispositivo externo; en este caso la bsqueda se realiza a partir de un
determinado campo denominado campo clave.
- secuencial o lineal
- binaria o dicotmica
65
- por transformacin de claves o HASHING
Bsqueda secuencial
Sea A un vector con N elementos, para localizar el valor del elemento
buscado dentro de A, se comparar dicho valor con los diferentes
miembros de A hasta encontrar el valor buscado o bien llegar hasta el final
del vector, en el caso de que el elemento no se encuentre en dicho vector.
EJERCICIO 33
Algoritmo SECUENCIAL
inicio
K 1
LUG 0
mientras ((K <= N) y (LUG=0)) hacer
si (A(k)=ELEMENTO)
entonces
LUG K
fin_si
K=K+1
fin_mientras
si (LUG=0)
entonces escribir(NO ENCONTRADO)
sino escribir( ELEMENTO ESTA EN,LUG)
fin_si
fin
66
EJERCICIO 34
PASOS
EJERCICIO 35
Algoritmo BUSQUEDA_BINARIA
inicio
PRIN Li(1)
FINAL Ls(n)
MIT (PRIN+FINAL) DIV 2
mientras ((A(MIT) <> ELEMENTO) y (PRIN < FINAL)) hacer
si (ELEMENTO < A(MIT))
entonces FINAL MIT - 1
sino PRIN MIT + 1
fin_si
67
MIT (PRIN+FINAL) DIV 2
fin_mientras
si (PRIN > FINAL)
entonces escribir(No encontrado)
sino escribir(Esta en, MIT)
fin_si
fin
2 k = N + 1.
K = log 2 (N + 1)
El caso ms favorable sera aquel en el que slo tuviera que hacer una
comparacin, porque el elemento buscado coincidiese con la primera
mitad del array
A + log 2 (N + 1) = log 2 (N + 1)
2 2
1<K<N
68
El inconveniente de este mtodo es que si el rango de claves es muy
grande no sera eficiente reservar espacio para todo el rango de claves (a
veces no sera ni posible). Teniendo en cuenta que cada elemento puede
tener cualquier clave del rango, si reservo menos posiciones de las que
tiene ese rango puede darse el caso de que a ms de un elemento la
funcin de conversin le haga corresponder la misma posicin en el array;
esto se conoce como colisin.
Se tiene un listado con los DNI de los alumnos que pueden estar entre el
nmero 20.000.000 y 22.000.000 y un nmero mximo de alumnos de 50.
Se tiene una variable denominada DNI que fue ingresada por pantalla.
69
Se recomienda ampliar este punto consultando la
bibliografa bsica, tem 5.8
Bibliografa Bsica
Weiss, M.A. (2000). Estructura de Datos en Java. Adisson Weasley.
Bibliografa Ampliatoria
Lage Fernando. (ao de edicin) Fundamentos de algoritmo y programacin.
Nueva Librera.
70
Joyanes Aguilar. (2005) Algoritmo y estructura de datos una perspectiva en C.
Mc Graw Hill.
www.uesiglo21.edu.ar
71