Вы находитесь на странице: 1из 24

ALGORTMICA(o ALGORITMIA)

Introduccin
1. Definicin y propiedades
2. Anlisis y diseo de algoritmos
3. Heursticas para una buena programacin

1. Definicin y propiedades
Algoritmo:
Conjunto de reglas para resolver un
problema.
Propiedades
Definibilidad: el conjunto debe estar bien
definido, sin dejar dudas en su interpretacin.
Finitud: debe tener un nmero finito de pasos
que se ejecuten en un tiempo finito.
0 ms
entradas

ALGORITMO

1 ms
salidas

1. Definicin y propiedades
Algoritmos deterministas: para los mismos datos
de entrada se producen los mismos datos de
salida.
Algoritmos no deterministas: para los mismos
datos de entrada pueden producirse diferentes de
salida.
ALGORITMIA: ciencia que estudia tcnicas para
construir algoritmos eficientes y tcnicas para
medir la eficacia de los algoritmos.
Objetivo: dado un problema concreto encontrar la
mejor forma de resolverlo.

1. Definicin y propiedades

Recordemos:
Objetivo de la asignatura
Ser capaces de analizar, comprender y
resolver una amplia variedad de
problemas de programacin, diseando
soluciones eficientes y de calidad.
Pero ojo!, los algoritmos no son el nico
componente en la resolucin de un problema de
programacin.

1. Definicin y propiedades

PROBLEMA

Algoritmos
+
Estructuras
de datos

PROGRAMA

Algoritmos + Estructuras de Datos = Programas


Estructura de datos: parte esttica, almacenada.
Algoritmo: parte dinmica, manipulador.

1. Definicin y propiedades

Resolver problemas
Cmo se resuelve un problema?
Cundo se dice que la solucin es
eficiente y de calidad?
Qu clase de problemas?

1. Definicin y propiedades
Cmo
construye un puente
un arquitecto?
ARQUITECTO
INFORMTICO
1. Estudio de viabilidad,
anlisis del terreno,
requisitos pedidos, etc.
2. Disear los planos del
puente y asignar los
materiales.
3. Poner los ladrillos de
acuerdo con los planos.
4. Supervisin tcnica del
puente.

1. Anlisis del
problema
2. Diseo del
programa
(alg. y estr.)
3. Implementacin
(programacin)
4. Verificacin y
pruebas

1. Definicin y propiedades
MTODO CIENTFICO

1.Observacin.
2.Hiptesis.
3.Experimentacin.
4.Verificacin.

INFORMTICO

1. Anlisis del
problema
2. Diseo del
programa
(alg. y estr.)
3. Implementacin
(programacin)
4. Verificacin y
pruebas

1. Definicin y propiedades
Otras ideas...
Refinamiento por pasos sucesivos.
Escribir la estructura de la solucin en
pseudocdigo, de manera muy genrica.
Especificar los pasos de forma cada vez ms
detallada, y precisa.
Repetimos el refinamiento hasta llegar a una
implementacin.

1. Definicin y propiedades
Proceso de resolucin propuesto por Aho.

Modelo
Modelo
matemtico
matemtico

Tipos
Tiposde
dedatos
datos
abstractos
abstractos

Estructuras
Estructuras
de
dedatos
datos

Algoritmo
Algoritmo
informal
informal

Programa
Programaen
en
pseudolenguaje
pseudolenguaje

Programa
Programa
en
enPascal
Pascal

Ms en las asignaturas de Ingeniera del


Software...

2. Anlisis y diseo de
algoritmos
ALGORITMIA = ANLISIS + DISEO
Anlisis de algoritmos: estudio de los recursos
que necesita la ejecucin de un algoritmo.
No confundir con anlisis de un problema.
Diseo de algoritmos: tcnicas generales para la
construccin de algoritmos.
Por ejemplo, divide y vencers: dado un
problema, divdelo, resuelve los subproblemas y
luego junta las soluciones.

2. Anlisis y diseo de algoritmos


Anlisis de algoritmos. Normalmente estamos
interesados en el estudio del tiempo de ejecucin.
Dado un algoritmo, usaremos las siguientes
notaciones:
t(..): Tiempo de ejecucin del algoritmo.
O(..): Orden de complejidad.
o(..): O pequea del tiempo de ejecucin.
(..): Cota inferior de complejidad.
(..): Orden exacto de complejidad.

2. Anlisis y diseo de algoritmos


Ejemplo. Analizar el tiempo de ejecucin y el orden de
complejidad del siguiente algoritmo.
Hanoi (N, A, B, C: integer)
if N=1 then
Mover (A, C)
else begin
Hanoi (N-1, A, C, B)
Mover (A, C)
Hanoi (N-1, B, A, C)
end

Mecanismos:

Conteo de instrucciones.
Uso de ecuaciones de recurrencia.

2. Anlisis y diseo de algoritmos

Diseo de Algoritmos. Tcnicas generales,


aplicables a muchas situaciones.
Esquemas algortmicos. Ejemplo:

ALGORITMO Voraz (C: ConjuntoCandidatos ; var S: ConjuntoSolucin )


S:=
Insertar
Insertar
mientras (C ) Y NO SOLUCION(S) hacer
tipos
tiposAQU
AQU
x:= SELECCIONAR(C)
C:= C - {x}
Insertar
Insertar
cdigo
cdigoAQU
AQU
si FACTIBLE(S, x) entonces
INSERTAR(S, x)
finsi
finmientras

2. Anlisis y diseo de algoritmos

Qu clase de problemas?

2. Anlisis y diseo de algoritmos

O
T
L
E
U
S
RE

2. Anlisis y diseo de algoritmos


Planificador de rutas

O
T
L
E
U
S
RE
Calcular
ruta

2. Anlisis y diseo de algoritmos


EL JUEGO DE LAS CIFRAS.
Dado un conjunto de 6 enteros,
encontrar la forma de conseguir otro
entero, utilizando las operaciones de
suma, resta, producto y divisin entera
(y sin usar cada nmero ms de una
vez).

2. Anlisis y diseo de algoritmos


Caso 1.

5
990

10

Caso 2.

10
835

75

Implementacin muy rpida.

2. Anlisis y diseo de algoritmos


PROBLEMA DEL BALN DE FTBOL. Se
pinta una regin (conexa) del baln
colorando de verde algunos hexgonos
o pentgonos del baln.
La regin se describe
movindose por el contorno
de la misma, poniendo 1 2 segn
el vrtice tenga al lado 1 2 trozos de
verde.
A partir de la descripcin, calcular el
nmero de trozos verdes, blancos y negros.

2. Anlisis y diseo de algoritmos


Caso 1. 1, 1, 1, 1, 1
Resultado: 1 verde
11 negros, 20 blancos
Caso 2. 2, 1, 1, 2, 1, 1,
1, 2, 1, 1, 1
Resultado: 3 verdes
11 negros, 18 blancos

2. Anlisis y diseo de algoritmos


Caso 3. 2, 1, 1, 2, 1, 1,
1, 1, 2, 2, 2, 1, 1, 1, 1,
2, 1, 1
Resultado: 4 verdes
12 negros, 16 blancos
Caso 4. 2, 2, 2, 2, 2, 2
Resultado: 31 verdes
0 negros, 1 blanco

3. Consejos para una buena programacin


1. Proceso de anlisis/diseo. No empezar
tecleando cdigo como locos/as.
2. Usar abstracciones, respetando los dos
principios bsicos:
Encapsulacin: las funciones relacionadas
deben ir juntas (clases, mdulos, paquetes,
etc.).
Ocultacin de la implementacin: Los
aspectos de implementacin no son visibles
fuera del mdulo, clase, etc.

3. Consejos para una buena programacin


3. Reutilizar programas, libreras, tipos, etc.
existentes. Y programar pensando en la posible
reutilizacin futura. Un nuevo programa no debe
partir desde cero.
4. No resolver casos concretos, sino el problema
en general. Si no se requiere un esfuerzo
adicional, el algoritmo debe resolver un caso
genrico.
5. Repartir bien la funcionalidad. Repartir la
complejidad del problema de forma uniforme. No
crear procedimientos muy largos: usar subrutinas.
De esta forma se mejora la legibilidad del
cdigo.

Вам также может понравиться