You are on page 1of 38

Figure:

Algoritmos
Conceptos bsicos.
Programacin:

1. Establecer una secuencia de acciones que:


puedan ser ejecutadas por el procesador
realicen una determinada tarea

2. Fases:
Resolucin del problema propuesto => determinacin de
un algoritmo.
Adaptacin del algoritmo al computador => codificar el
algoritmo en un lenguaje que el computador pueda
comprender.
Conceptos bsicos.

1. Accin: Etapa en la realizacin de un trabajo


2. Accin primitiva: Accin que el procesador puede ejecutar
sin necesidad de informacin adicional.
3. Algoritmo: Secuencia ordenada de acciones primitivas que
realizan un trabajo. Ejemplos:
Ir al trabajo Clculo de la media aritmtica de
1.Levantarse dos nmeros con una calculadora
2.Darse una ducha 1.Pulsar la tecla AC
3.Vestirse 2.Teclear el primer nmero
4.Desayunar 3.Pulsar la tecla +
5.Tomar locomocin 4.Teclear el segundo nmero
5.Pulsar la tecla +
6.Pulsar la tecla /
7.Teclear el nmero 2
8.Pulsar la tecla =
Confeccin de un pjaro a partir de un papel cuadrado
Confeccin de un pjaro a partir de un papel cuadrado
Primitivas Origami
Primitivas Origami
Conceptos bsicos.
Aspectos que se deben considerar a la hora de escribir un algoritmo:
Determinacin de las primitivas de las que partimos
Lenguaje simblico a utilizar para desarrollar el algoritmo
Representacin de los datos
Establecer datos de entrada
Establecer datos de salida
Establecer las relaciones entre los datos de entrada y los de salida

Condiciones que debe cumplir un algoritmo:


Ser finito: El algoritmo debe acabar tras un nmero finito de pasos
Estar bien definido: Todas las ejecuciones del algoritmo con los mismos datos de
entrada deben devolver los mismos datos de salida.

Diferencias entre un algoritmo y un programa:


Los algoritmos no son directamente interpretables por el computador => deben ser
traducidos a un lenguaje de programacin concreto.
Definition de algoritmo

Es un procedimiento computacional bien definido que


toma un conjunto de valores como entrada y produce
otro conjunto de valores como salida.
Representacin de algoritmos

Mtodos para representar un algoritmo:


Pseudolenguaje
Diagramas de flujo

Pseudolenguaje
Es un lenguaje especfico de descripcin de algoritmos
La traduccin de un algoritmo escrito en pseudolenguaje a un programa en un
lenguaje de programacin determinado es relativamente simple

Herramientas de un pseudolenguaje para representar un algoritmo


Conjunto de palabras clave que proporcionan:
las estructuras de control
declaraciones de variables
caractersticas de modularidad
Sintaxis libre de un lenguaje natural que describe las caractersticas del proceso
Elementos para la definicin y llamada a subprogramas
Metodologa de diseo

Un problema => muchos algoritmos para resolverlo


Cmo elegir el ms adecuado? Basndonos en las siguientes
caractersticas:
Legibilidad Eficiencia
Portabilidad Modularidad
Modificabilidad Estructuracin
Metodologa de diseo

Programacin estructurada
Conjunto de tcnicas que aumentan la productividad de un programa,
reduciendo el tiempo para:
Escribir Depurar
Verificar Mantener

Utiliza un nmero limitado de estructuras de control que minimizan la


complejidad de los problemas

Teorema de BOHM-JACOPINI: cualquier programa, por complejo


que sea, puede escribirse utilizando slo tres estructuras de control:
Secuencial
Selectiva
Repetitiva
Secuencial

Actividad 1

Actividad 2

Actividad n
Seleccin Doble:
Simple:
s
Condicin s no
condicin

actividad Actividad 1
no Actividad 2

Mltiple:
sino sino
Condicin Condicin Condicin

s s s
Actividad 1 Actividad 2 Actividad n-1 Avtividad n
Repeticin

Test false
condition

true
activity
Estratgia: Dividir para conquistar

Dividir el problema en subproblemas

En la resolucin de un problema complejo, se divide en


varios sub problemas y seguidamente se vuelven a
dividir los sub problemas en otros mas sencillos,
hasta que puedan implementarse en el computador.
Ordenamiento

Entrada:
secuencia de n nmeros <a1, a2,..,an>
Salida:
Una permutacin <a'1, a'2,..,a'n>
reordenamiento de la secuencia, tal que:
a'1 < a'2 < ... < a'n
Ejemplo instancia:
Entrada: <5,3,1,6,0>
Salida: <0,1,3,5,6>
Ordenando una lista en forma alfabtica
Ordenando una lista en forma alfabtica (cont.)
Ordenando una lista en forma alfabtica (cont.)
Algoritmo de sort por insercin en pseudocdigo
Bsqueda
Entrada:
secuencia de n nmeros <a1, a2,..,an>
Un nmero b
Salida:
un entero i, tal que b == ai (igual)
0 si b != ai, para i = 1,...,n
Ejemplo instancia:
Entrada: <5, 6, 9, 12> y 9
Salida: 3
Bsqueda binaria en pseudocdigo
Buscando en una lista

Copyright 2003 Pearson Education, Inc. Slide 4-24


Ordenamiento por insercin
situacin de peor caso
Insertion-Sort(A)
1 for i <- 2 to n do
2 temp <- A[i]
3 j <- i-1
4 while j>0 and A[j] > temp do
5 A[j+1] <- A[j] Se ejecutan: (n-1)*(n)/2 veces
6 j <- j-1
7 A[j+1] <- temp => O(n2)
Grfico del anlisis del peor caso
ordenamiento por insercin O(n2)
Grfico del anlisis del peor caso
bqueda binaria O(log2 n)
Algoritmos
recursivos
Recursividad

Son funciones que se llaman a s mismas.


Requisitos:
Deben retornar un valor.
Deben tener expresiones en las que se llaman a s mismas:
ciclo activo.
Deben incluir, en una sentencia de seleccin, una opcin en
la cual terminen la ejecucin y no se llamen a s mismas:
caso base.
Si no poseen un opcin que les permita terminar su
ejecucin, se producirn llamadas hasta agotar los recursos
de memoria del sistema.
Si se alcanza el caso base en una llamada del ciclo
activo, entonces se inicia el ciclo pasivo o de retorno.

29
Recursividad cdigo C

tipo_de_retorno nombre_funcion(tipo argumentos){


if ( caso_base ) return valor_base;
else {
................
return nombre_funcion(argumentos');
}
}

30
Recursividad (ejemplo)

Obtener el factorial de un nmero


Casos base:
- el factorial de cero es uno
- factorial de uno es uno
- factorial de un nmero negativo lo hacemos cero.
Ciclo activo:
- llamar a partir del nmero en forma descendente
hasta llegar al caso base.

31
Recursividad (Ejemplo cont.)
#include <stdio.h>

int factorial(int n){


if (n<0) return 0;
if (n==0) return 1;
else if (n==1) return 1;
else return n*factorial(n-1);
}

int main(){
int x,fac;
printf("Ingrese un nmero para calcularle el factorial = );
scanf("%d",&x);
fac=factorial(x);
printf("%d!=%d\n",x,fac);
return 0;
}

32
Simulacin: ciclo activo

main(){
int x = 3;
factorial(3){
fac = factorial(3);
factorial(x);
if (3==0) return 1;
else if (3==1) return 1;
else return 3*factorial(3-1);
factorial(2){
3*factorial(2);
if (2==0) return 1;
else if (2==1) return 1;
factorial(1){
else return 2*factorial(1);
2*factorial(2-1);
if (1==0) return 1;
else if (1==1) return 1
1;

Caso Base alcanzado!!

33
Simulacin: ciclo pasivo

main(){
int x = 3;factoria
factorial(3){
l(3);
fac =
if (3==0) return 1;
factorial(x);
else if (3==1) return 1;
3*factorial(2
factorial(2){
else return 3*factorial(3-1);
);
if (2==0) return 1;
else if (2==1) return 1;
2*1
else return 2*factorial(2-1);

34
Simulacin: ciclo pasivo

main(){
int x = 3;factoria
factorial(3){
l(3);
fac =
if (3==0) return 1;
factorial(x);
else if (3==1) return 1;
3*factorial(2
factorial(2){
else return 3*factorial(3-1);
);
if (2==0) return 1;
else if (2==1) return 1;
else return 2;

35
Simulacin: ciclo pasivo

main(){
int x = 3;factoria
factorial(3){
l(3);
fac =
if (3==0) return 1;
factorial(x);
else if (3==1) return 1;
3*2
else return 3*factorial(3-1);

36
Simulacin: ciclo pasivo

main(){
int x = 3;factoria
factorial(3){
l(3);
fac =
if (3==0) return 1;
factorial(x);
else if (3==1) return 1;
else return 6;

37
Simulacin: ciclo pasivo

main(){
int x = 3;
6;
fac =
factorial(x);

38