2. 2
Algoritmos
a) Algoritmos de
búsqueda.
1. Lineal.
2. Binaria.
b) Algoritmos de
clasificación
1. Inserción directa.
2. Selección directa.
3. Intercambio directo.
c) Algoritmos
recursivos.
1. Introducción
2. Ejemplos de
programas
recursivos.
3. 3
Algoritmos.
El término algoritmo, no está exclusivamente relacionado con
las matemáticas o informática. En realidad, en la vida cotidiana
empleamos algoritmos en multitud de ocasiones para resolver
diversos problemas.
Un algoritmo, es un método para resolver un problema, más
formalmente, podemos decir que es un conjunto de reglas o
instrucciones bien definidas para la resolución de problemas.
Esta definición puede ser extendida a: Un algoritmo es
cualquier procedimiento computacional bien definido, junto con
un conjunto especifico de datos con un margen de error
permitido, que produce un valor o conjunto de valores como
salida.
Con las definiciones anteriores, podemos decir que un
algoritmo debe producir una salida válida para todas las
entradas permitidas.
4. 4
Propiedades de los
algoritmos
Todo algoritmo es independiente del lenguaje de
programación, así como de la máquina que lo ejecuta.
Las características fundamentales de los algoritmos, son:
1. Deben ser precisos e indicar el orden de realización de
cada paso.
2. Debe estar definido, es decir, si se ejecuta dos veces, esas
dos veces se debe de obtener el mismo resultado.
3. Debe ser finito, este debe terminar en algún momento.
La definición de un algoritmo, debe describir tres partes
importantes para procesar la información en la computadora,
tal como lo muestra la figura.
Entrada Proceso Salida
5. 5
Estructura Básica:
inicio
constantes (datos inalterables)
variables (datos alterables)
ingresar datos (datos ingresados por el usuario que
se guardarán en las variables)
proceso de operaciones (ejecución de algoritmo
sobre las variables y constantes)
mostrar resultados (resultados de la operación
algorítmica)
fin
7. 7
Algoritmos de Búsqueda
La tarea de búsqueda es una de las
operaciones más frecuentes en la
programación.
Existen muchos algoritmos de búsqueda.
En los algoritmos que se estudiarán a
continuación se supondrá que la colección de
datos, entre los cuales se buscará un elemento,
es fija.
8. 8
Supondremos que este
conjunto fijo tiene n
elementos y lo
representaremos como
un arreglo, por ejemplo:
a: array[0..n-1] of item
Es usual que el tipo
item tenga una
estructura de registro
con un campo que
actúa como una llave.
Algoritmos de
Búsqueda
9. 9
La tarea consiste en hallar un elemento del
arreglo a cuyo campo clave sea igual a un cierto
argumento de búsqueda x.
El índice resultante i, que cumple la igualdad
a[i].Llave = x, permite el acceso a otros campos
del registro localizado.
Para concentrarnos únicamente en la tarea de
búsqueda, supondremos que el tipo item consta
sólo de la llave, es decir, es la llave.
Algoritmos de Búsqueda
10. 10
Cuando no se tiene más información sobre los
datos en los que se busca, lo más sencillo es
proceder de manera secuencial a través del
arreglo en busca del elemento deseado.
Este enfoque se llama búsqueda lineal.
Existen dos condiciones que terminan la
búsqueda:
1. Si se halla el elemento, es decir, si ai = x.
2. Si se ha rastreado todo el arreglo sin encontrar a
x.
Algoritmos de Búsqueda
12. 12
Búsqueda lineal
Lo anterior produce el siguiente algoritmo:
i := 0;
while (i < n) and (a[i] < > x) do
i := i + 1
0 1 2 3 4 5 6
a b c d e f g
i
x =
El símbolo de mayor es >
El símbolo de menor es <
i := 0;
mientras (i < n) y (a[i] < > x) haz
i := i + 1
13. 13
Búsqueda lineal
La búsqueda termina
sólo si la condición de
la cláusula while es
falsa.
Cuando se encuentra
una concordancia, se
halla la que tiene el
índice menor, es decir,
el primer elemento que
concuerda en la
secuencia.
x =
0 1
8
i
1 1
4
2 2
5
3 1
2
4 3
4
5 9
El símbolo de mayor es >
El símbolo de menor es <
14. 14
Búsqueda lineal
Si se cumple i = n, Y no existe concordancia, entonces
el registro que se esta buscando no existe.
La terminación del ciclo es segura, ya que en cada
etapa del proceso se incrementa i, por lo que aunque no
exista concordancia se debe llegar al límite n después
de un número finito de iteraciones (pasos).
16. 16
Búsqueda lineal con
centinela
El algoritmo puede hacerse más eficiente
simplificando la expresión booleana de dos
factores, a uno solo que determine la
concordancia.
Para garantizar la concordancia se debe colocar
un elemento “adicional” en el arreglo que
contenga al elemento buscado x.
A este elemento adicional se le conoce como
centinela, ya que previene que la búsqueda
exceda el límite del índice.
17. 17
Búsqueda lineal con
centinela
El algoritmo de búsqueda lineal con centinela es
el siguiente:
a[n] := x;
i := 0;
while a[i] < > x do
i := i + 1
Evidentemente i = n implica que no se encontró
concordancia (excepto la del centinela).
El símbolo de mayor es >
El símbolo de menor es <
19. 19
Búsqueda binaria
Una búsqueda puede hacerse más efectiva si los datos
están ordenados (por ejemplo, ascendentemente).
La idea clave consiste en inspeccionar un elemento
elegido al azar, por ejemplo am, y compararlo con el
argumento de búsqueda x.
Si am = x, la búsqueda termina, si am es menor que x,
se infiere que todos los elemento con índices menores
que, o iguales a m pueden ser descartados.
Lo anterior produce el siguiente algoritmo llamado
búsqueda binaria. Este algoritmo utiliza dos variables de
índice, L y R, que marcan los extremos izquierdo (Left) y
derecho (Right) de la sección del arreglo a en los cuales
todavía puede hallarse un elemento.
20. 20
Búsqueda binaria
L := 0; R := n; found := FALSE;
while (L <= R) do
Begin
m := cualquier valor entre L y R
m:=(L+R)div2
if a[m] = x
then found := true
else if a[m] < x
then L := m + 1
else R := m – 1
end.
0 1 2 3 4 5 6
m 3 4 5 6 7 8 9
L
R
x =
El símbolo de mayor es >
El símbolo de menor es <
21. 21
Búsqueda binaria
La elección de m es arbitraria y la forma en
como se escoge no afecta la corrección del
algoritmo.
Sin embargo, la manera en que se elige m
puede tener influencia sobre la efectividad del
algoritmo.
El objetivo debe ser el de eliminar tantos
elementos como sea posible en cada etapa de
búsquedas posteriores.
23. 23
Búsqueda binaria
Mejorada
La solución óptima consiste en elegir el elemento del
medio, ya que esto elimina, en cualquier caso, la mitad
de la sección del arreglo por buscar.
Este algoritmo ofrece una mejora drástica sobre la
búsqueda lineal, donde el número estimado de
comparaciones es n / 2.
La eficiencia puede mejorarse un poco intercambiando
las cláusulas if.
La prueba de la igualdad debe dejarse en segundo
término, ya que se cumple sólo una vez y ocasiona la
terminación del proceso.
Se puede aumentar la eficiencia del algoritmo si se
simplifica la condición de terminación del ciclo.
24. 24
Búsqueda binaria
Mejorada
Un algoritmo de búsqueda binaria
más eficiente es el siguiente:
L := 0; R := n;
while (L <= R) do
begin
m := (L + R) div 2;
if a[m] < x
then L := m + 1
else R := m
end
end
n 0 1 2 3 4 5 6
a 3 4 5 6 7 8 9
L
m
R
x =
El símbolo de mayor es >
El símbolo de menor es <
25. 25
Ejemplo
L := 0; R := n;
while (L < R) do
begin
m := (L + R) div 2;
if a[m] < x
then
L := m + 1
else R := m
end
n 0 1 2 3 4 5 6
a 3 4 5 6 7 8 9
L
m
R
1era vuelta
m=0+6=6/2=3 m=3
x=4
am=6
6<4 NO
else R:=m
26. 26
2da Vuelta
L := 0; R := n;
while (L < R) do
begin
m := (L + R) div 2;
if a[m] < x
then
L := m + 1
else R := m
end
n 0 1 2 3 4 5 6
a 3 4 5 6 7 8 9
L
R
m=0+3=3/2=1 m=1
x=4
am=4
4=4
am concuerda con
x
concordancia
27. 27
Búsqueda binaria
Mejorada
La iteración termina cuando L = R.
Si R = n, entonces no existe concordancia.
Por lo tanto se necesita una comparación final para
verificar que a[R] = x.
En contraste con el primer algoritmo de búsqueda
binaria presentado, el último algoritmo (al igual que la
búsqueda lineal) encuentra el elemento de
concordancia con el índice menor.