Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos
Algoritmos
Concepto de algoritmo
Sentido amplio: Secuencia de pasos o etapas que conducen a la
realizacin de una tarea.
Ejemplos de campos de aplicacin de los algoritmos:
Instrucciones de un lavavajillas
Programacin de un vdeo para grabar una pelcula
Construccin de un edificio
Resolucin de un problema matemtico
Realizacin de un programa de computador
#include <iostream.h>
void Permutar(long &x, long &y){
long tmp;
tmp = x;
x = y;
y = tmp;
}
void main(void)
{
long a, b, m, n, r;
cout << "\nTeclee 2 #s enteros: ";
cin >> a >> b;
m=a; n=b;
if (m<n) Permutar(m,n);
while ((r=m%n) != 0) {
//r=resto de m/n
m=n;
n=r;
}
cout << "\nEl m.c.d. de " << a ;
cout << " y "<< b << " es: " << n << endl;
Algoritmos en Informtica
Un algoritmo es un conjunto ordenado, finito y bien definido de etapas, que conducen
a la obtencin de un resultado.
Se considerarn slo algoritmos secuenciales (una operacin a continuacin de otra).
Si son necesarios, deben existir criterios de terminacin claros (por ejemplo, para calcular
seno(x) por desarrollo en serie).
No puede haber etapas imposibles, como "imprimir el conjunto de todos los nmeros enteros".
Representacin de algoritmos:
Detallada: el algoritmo escrito en un determinado lenguaje de programacin (lenguaje de
mquina, ensamblador, fortran, basic, pascal, C++, Java ...).
Simblica: las etapas son descritas con lenguaje prximo al natural, con el grado de detalle
adecuado a la etapa de desarrollo del programa.
La sintaxis (el modo de escribir) debe representar correctamente la semntica (el
contenido). La sintaxis debe ser clara, sencilla y accesible.
Primitivas
"Una estructura semntica bien definida, junto con una sintaxis clara que la represente".
Un lenguaje es una coleccin de primitivas y unas reglas para combinarlas.
Pseudocdigo
Sintaxis intuitiva y menos formal que la de un lenguaje.
Se puede obtener relajando las normas de un lenguaje.
Se utiliza en las etapas iniciales de la programacin.
Escuela Superior de Ingenieros de San Sebastin - Tecnun
Bifurcaciones:
If (condicin) then (actividad)
If (condicin) then (actividad_1)
else (actividad_2)
Bucles:
while (condicin) do (actividad)
repeat (actividad) until (condicin)
Funciones:
procedure
nombre(argumentos)
Diseo modular:
Ejemplos de algoritmos
Pago de impuestos:
if (el artculo paga IVA)
then [if (precio > lmite)
then (pagar x)
else (pagar y)]
else (pagar z)
Algoritmos de bsqueda
Bsqueda lineal:
Se puede utilizar con vectores y con listas vinculadas.
Se recorre el vector o la lista desde el principio, comparando cada elemento con el elemento
buscado. Si se llega al final del vector o de la lista sin encontrarlo, se supone que el elemento
buscado no pertenece al vector o la lista.
No es necesario que el vector o la lista estn ordenados. Ejemplo: Buscar un nombre en un
peridico o en un libro.
Si el vector o la lista estn ordenados, la bsqueda puede detenerse en cuanto se llega a un
elemento posterior al elemento buscado.
Bsqueda binaria:
Slo se puede utilizar con vectores ordenados. Ejemplo: Buscar un nombre en la lista telefnica
Dado el vector de elementos, se determina el elemento central (si el nmero de elementos es
par, el elemento central es el primer elemento de la segunda mitad).
Se compara el elemento buscado con el elemento central
Bsqueda binaria
Versin iterativa y recursiva (la correspondiente al algoritmo mostrado):
first
middle
last
Algoritmos de ordenacin
Bubble sort
Es el mtodo utilizado en las clases y prcticas anteriores.
Cada elemento se compara con todos los posteriores.
Cuando se encuentra un elemento
que debe ser anterior a l,
se permutan.
i
Grficamente:
Si a[i]>a[j], se permutan
j
Elementos ya
El elemento se compara con los siguientes
ordenados
Si a[j-1]>a[j], se permutan
i
Elementos ya
ordenados
10
Algoritmo Mergesort
Mergesort: Est basado en la funcin merge(), que une dos ficheros ya ordenados en uno
tambin ordenado.
1 4 6 9 12 13 16
=
2 3 8 11 14 =
1 2 3 4 6 8 9 11 12 13 14 16
8 12 10 14 3 6 9 11 5 13 4 16 1 15 2 7
agrupar:
k=2
8 12 10 14 3 6 9 11 5 13 4 16 1 15 2 7
ordenar:
8 10 12 14 3 6 9 11 4 5 13 16 1 2 7 15
agrupar:
k=4
8 10 12 14 3 6 9 11 4 5 13 16 1 2 7 15
ordenar:
3 6 8 9 10 11 12 14 1 2 4 5 7 13 15 16
agrupar:
k=8
3 6 8 9 10 11 12 14 1 2 4 5 7 13 15 16
ordenar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Escuela Superior de Ingenieros de San Sebastin - Tecnun
11
k=1 12 8 10 6 3 9 11 5 13 4 1 2 7
k=2 8 12 6 10 3 9 5 11 4 13 1 2 7
k=4 6 8 10 12 3 5 9 11 1 2 4 13 7
k=8 3 5 6 8 9 10 11 12 1 2 4 7 13
1 2 3 4 5 6 7 8 9 10 11 12 13
En cada llamada a merge() hay que pasarle la posicin en la que empieza cada
sub-vector a unir y su nmero de elementos
Escuela Superior de Ingenieros de San Sebastin - Tecnun
12
13
Algoritmo Quicksort
12 8 10 14 6 3 9 11 5 13 4 16 1 15 2 7
right
left
7 8 10 14 6 3 9 11 5 13 4 16 1 15 2 12
left
right
7 8 2 14 6 3 9 11 5 13 4 16 1 15 10 12
left
right
7 8 2 1 6 3 9 11 5 13 4 16 14 15 10 12
left
right
7 8 2 1 6 3 4 11 5 13 9 16 14 15 10 12
left
right
7 8 2 1 6 3 4 5 11 13 9 16 14 15 10 12
left
right
posicin final del pivot;
punto de particin del fichero
14
15
16