Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos de
Bsqueda
INSTRODUCCION
Los algoritmos de bsqueda tienen como
finalidad localizar un elemento dado
dentro de una estructura de datos o
determinar su inexistencia.
Naturalmente, la bsqueda ser mucho
ms eficiente si la estructura de datos (en
nuestro caso el vector) est ordenada.
ALGORITMOS DE
BUSQUEDA
A lo largo de esta leccin estudiaremos los
siguientes algoritmos de bsqueda:
Bsqueda secuencial.
Bsqueda secuencial con centinela.
Bsqueda binaria (o dicotmica)
Bsqueda por interpolacin.
Bsqueda indexada
BUSQUEDA
SECUENCIAL
El algoritmo de bsqueda ms sencillo
recorre el vector desde el primer elemento
hasta el ltimo y si encuentra el valor
buscado retorna su posicin o avisa que lo
encontro.
Obviamente, se trata del nico algoritmo
posible si el vector no est ordenado.
Sin embargo, si el vector est ordenado
resulta muy ineficiente.
BUSQUEDA SECUENCIAL
Funcion busquedaSecuencial(v, n, valor): lgico
entero: i, n
logico: encontro
encontrofalso
para i0 hasta n hacer
si v(i)=valor entonces
encontroverdadero
fin si
finpara
retornar encontro
finbusquedaSecuencial
Como se puede apreciar el algoritmo realiza
BUSQUEDA SECUENCIAL
Funcion busquedaSecuencial(v, n, valor): lgico
entero: i, n
logico: encontro
encontrofalso
para i0 hasta n hacer
si v[i]=valor entonces
encontroverdadero
fin si
finpara
retornar encontro
finbusquedaSecuencial
Datos de entrada
Cantidad de datos : n= 8
Arreglo
: v
Encontrar
: valor =45
V[i] = valor
encontr
para
12 = 45
falso
sigue
18 = 45
falso
sigue
23 = 45
falso
sigue
12
18 23 34
45 47
60 72
34 = 45
falso
sigue
45 = 45
verdadero
sigue
47 = 45
verdadero
sigue
60 = 45
verdadero
sigue
72 = 45
verdadero
sale
BUSQUEDA SECUENCIAL
CON CENTINELA
El
algoritmo
de
bsqueda
secuencial resulta muy ineficiente
puesto que no se aprovecha del
hecho de que el vector est
ordenado.
Es posible modificarlo para que,
teniendo
en
cuenta
esa
circunstancia, finalice en cuanto
localice el elemento o se determine
que ste no existe.
Esta modificacin se conoce como
bsqueda
secuencial
con
centinela.
BUSQUEDA SECUENCIAL
CON CENTINELA
Funcion BusSecSentinela(v, n, valor):logico
i0
mientras v[i]<valor y i<n hacer
ii+1
finmientras
si v[i]=valor entonces
encontroverdadero
sino
encontrofalso
finsi
finBusSecSentinela
12
18 23 34
45 47
60 72
Datos de entrada
Cantidad de datos : n= 8
Arreglo
: v
Encontrar
: Valor =45
Salida
BusSecSentinela retorna falso o
verdadero
BUSQUEDA SECUENCIAL
CON CENTINELA
Datos de entrada
Funcion BusSecSentinela(v, n, valor):logico
i0
mientras v[i]<valor y i<n hacer
ii+1
finmientras
si v[i]=valor entonces
encontroverdadero
sino
encontrofalso
finsi
finBusSecSentinela
45 = 45
Cantidad de datos : n= 8
Arreglo
: v
Encontrar
: valor =45
12
18 23 34
45 47
60 72
mientras
12< 45 y 0 < 8
Entra
18<45 y 1 < 8
Entra
23<45 y 2 < 8
Entra
34<45 y 3 < 8
Entra
45<45 y 4 < 8
Sale
encontr verdadero
BUSQUEDA SECUENCIAL
CON CENTINELA
La bsqueda secuencial con
centinela no precisa recorrer el
vector por completo.
El caso mejor se produce cuando
el elemento a buscar es el primero
del vector o menor que todos los
elementos del vector. Entonces la
complejidad es O(1).
BUSQUEDA BINARIA
La idea bsica de la bsqueda binaria o
dicotmica es reducir el tamao del
problema a la mitad en cada iteracin.
Cuando el tamao del problema, esto es
del vector, sea 1 se puede resolver la
bsqueda de forma directa.
La estrategia empleada por este algoritmo
es muy similar a la del juego patata
caliente...
BUSQUEDA BINARIA
El algoritmo de bsqueda
binaria divide el tamao
del vector por 2 hasta
quedarse con un vector de
tamao 1.
Al llegar al tamao unitario
se
puede
determinar
directamente
si
el
elemento buscado existe o
no.
As, el algoritmo de
bsqueda binaria realiza
log2(n) iteraciones y, por
tanto, su complejidad es
O(log n).
BUSQUEDA BINARIA
Funcion BusquedaBinaria(v, valor): entero
posicion-1
encontradofalso
izq
izq1
derMAX
mientras no encontrado y izq der hacer
medio(izq+der)/2
Si v(medio)=valor entonces
posicionmedio
encontradoverdadero
sino
si v(medio)>valor entonces
dermedio-1
sino
izqmedio+1
finsi
finsi
fin mientras
busquedaBinariaposicion
fin funcion
valor
der
medio
valor
der
medio
izq
valor
medio
izq
der
BUSQUEDA BINARIA
Funcion BusquedaBinaria(v, valor): entero
posicion-1
5 10
encontradofalso
izq1
1
2
derMAX
mientras no encontrado y izq der hacer
medio(izq+der)/2
Si v(medio)=valor entonces
posicionmedio
encontradoverdadero
sino
si v(medio)>valor entonces
dermedio-1
sino
der
izqmedio+1
11
finsi
finsi
fin mientras
busquedaBinariaposicion
fin funcion
12
20
30
40
50
60
70
80
90
10
11
Buscar el valor=80
Izq Izq<der
medio
V[medio]
1 <11
40
7<11
70
10
10<11
10
80
posicin
10
BUSQUEDA BINARIA
En el vector (1,1,2,3,4,5,5,5,6,9) se va a buscar,
de forma binaria, el nmero 7
der
Izq Izq<der
medio
V[medio]
10
1 <10
6<10
9<10
10
10<10
10
posicin
10
10
10
10
10
BUSQUEDA BINARIA
VENTAJAS
Mtodo eficiente siempre que el vector est
ordenado.
La bsqueda binaria proporciona un medio para
reducir el tiempo requerido para buscar en un
arreglo.
Su mayor ventaja es con los archivos extensos.
En esencia, con una sola comparacin eliminamos
la mitad de la tabla.
DESVENTAJAS
El arreglo debe esta ordenado y el almacenamiento
de un arreglo ordenado suele plantear problemas en
las inserciones y eliminaciones de elementos.
Requiere que todos los elementos esten ordenados
lo cual es costoso
BUSQUEDA POR
INTERPOLACION
En numerosos fenmenos de la naturaleza
observamos una cierta regularidad en la forma de
producirse, esto nos permite sacar conclusiones de
la marcha de un fenmeno en situaciones que no
hemos medido directamente.
La interpolacin consiste en hallar un
dato dentro de un intervalo en el que
conocemos los valores en los
extremos.
interpolacin
extrapolacin
DEFINICION MATEMATICA DE
LA INTERPOLACION
En el subcampo matemtico del anlisis
numrico, se denomina interpolacin a la
obtencin de nuevos puntos partiendo del
conocimiento de un conjunto discreto de
puntos.
En todo caso, se trata de, a partir de n parejas
de puntos (xk,yk), obtener una funcin f que
verifique
f ( xk ) yk , k 1,..., n
a la que se denomina funcin interpolante de
dichos puntos. A los puntos xk se les llama
nodos.
ALGUNAS FORMAS DE
INTERPOLACION
Algunas formas de interpolacin que se
utilizan con frecuencia son:
La interpolacin lineal
La interpolacin polinmica (de la cual La
anterior es un caso particular)
La interpolacin por medio de spline
Interpolacin polinmica de Hermite.
INTERPOLACION LINEAL
( yb ya )
y ya ( x xa )
( xb xa )
La interpolacin lineal es rpida y
sencilla, pero no muy precisa.
BUSQUEDA POR
INTERPOLACION
El algoritmo es similar al de bsqueda binaria, la
diferencia est en que en vez de dividir el rea en
mitades, se delimita por medio de los valores
resultantes de la interpolacin.
Consiste en tratar de acertar en qu parte del
intervalo est la clave que se esta buscando en lugar
de ciegamente dividir el arreglo a la mitad. Para ello
se utiliza la siguiente frmula:
BUSQUEDA POR
INTERPOLACION
funcion busquedaInterpolacion (v,valor) :entero
entero: v(max), valor
entero: izq,der, presunto, busqueda
izq1
dermax
mientras ((v[der] valor) y (v[izq] < valor))
pizq+(valor-v[izq])*(der - izq) /(v[der]-v[izq])
si (valor > v[p]) entonces
izqp+1
sino
si (valor < v[p]) entonces
derp-1
sino
izqp
finsi
finsi
finmientras
si (v[izq]=valor) then
busquedaizq
sino
busqueda -1
finsi
retornar busqueda
finBusquedaDeInterpolacion
DESVENTAJAS
La bsqueda de la interpolacin requiere una aritmtica
ms elaborada, a parte que los clculos que se necesitan
para esta bsqueda son muy lentos.
Para lograr esta bsqueda se requieren llaves,
multiplicaciones y divisiones complejas, es decir, clculos
de nivel alto.
BUSQUEDA INDEXADA
Necesita que los elementos
sobre los que se realiza la
bsqueda estn ordenados
de
acuerdo
a
una
determinada clave.
class ElemIndice{
private int clave;
private int posicion;
BUSQUEDA INDEXADA
Mediante cada elemento del array ndice se asocian grupos
de elementos del array inicial. Los elementos en el ndice y
en el array deben estar ordenados.
BUSQUEDA INDEXADA
3
10
14
16
19
10
CLAVE
POSICION
16
BUSQUEDA INDEXADA
Se puede implementar la bsqueda binaria en el
array de ndices.
Cuando finaliza la bsqueda, o ha encontrado el
elemento buscado o est en la posicin que contiene
al elemento mayor de los ms pequeos al elemento
buscado
Si X = 10, en el array de ndice indicar la posicin 2.
Por lo tanto, la bsqueda en el array inicial
comenzar en la posicin 6 hasta el final del bloque.
3
CLAVE
POSICION
16
10
14
16
19
BUSQUEDA INDEXADA
public ElemIndice [] crearArrayIndice(int k){
int n_indices;
int n = A.length;
if (n%k == 0) n_indices = n/k;
else n_indices = n/k + 1;
ElemIndice [] arrayIndice = new ElemIndice[n_indices];
int cont = 0;
for (int i = 0; i<n_indices; i++){
array_indice[i]= new ElemIndice(A[cont],cont);
//cont apunta al primer elemento de cada
//bloque del array grande
cont += k;
}
4
5
6
7
8
return arrayIndice; 3
}
CLAVE
POSICION
16
10
14
16
19
VENTAJAS Y DESVENTAJAS
Ventajas
Rpido acceso
El sistema se encarga de relacionar la
posicin de cada registro con su
contenido mediante la tabla de ndices
Desventajas
Desaprovechamiento del espacio por
quedar huecos intermedios cada vez que
actualiza la estructura.
Se necesita espacio adicional para el
rea de ndices
CONCLUSIONES DE
BUSQUEDA
La bsqueda es una de las operaciones de
tratamiento de vectores ms habituales.
Una bsqueda en un vector no ordenado
tendra una complejidad O(n); por esa razn es
preferible implementar algoritmos de bsqueda
en vectores ordenados.
Bsqueda secuencial.
Bsqueda secuencial con centinela.
Bsqueda binaria.
Bsqueda por interpolacin.
Bsqueda indexada
CONCLUSIONES DE BUSQUEDA
El primer algoritmo es el ms simple de los cuatro, recorre
completamente el vector y no precisa que el vector es ordenado;
su complejidad es O(n).
El segundo algoritmo recorre el vector hasta que se encuentra el
valor buscado o se determina que ste no existe. Su complejidad
es O(n).
El algoritmo de bsqueda binaria divide en cada iteracin el
vector en dos realizando la bsqueda en una sola de las mitades.
Su complejidad es O(log n).
La bsqueda por interpolacin es una modificacin del algoritmo
de bsqueda binaria, tambin de complejidad O(log n).
La bsqueda indexada acelerara la bsqueda a niveles O(log n)
siempre y cuando se utilice bsqueda binaria en cualquiera de las
areas de bsqueda
ALGORITMICA III
Algoritmos de
Clasificacin
INTRODUCCIN
Sea A una lista de N elementos:
A1, A2, A3, ..., An
Se busca permutar estos elementos de tal forma
que los mismos queden de acuerdo con un orden
preestablecido.
Ascendente: A1 A2 A3 ... An
Descendente: A1 A2 A3 ... An
INTRODUCCIN
Aunque tanto el tipo y tamao de los
elementos como el dispositivo en donde se
encuentran almacenados pueden influir en
el mtodo que utilicemos para ordenarlos,
en este tema vamos a solucionar el caso en
que los elementos son nmeros enteros y se
encuentran almacenados en un vector.
Si bien existen distintos criterios para
clasificar a los algoritmos de ordenacin,
una posibilidad es atendiendo a su
eficiencia. De esta forma, en funcin de la
complejidad que presentan en el caso
medio, podemos establecer la siguiente
clasificacin:
(n 2):
Burbuja, Insercin, Seleccin.
(nlogn): Mezcla, Quicksort.
Otros:
Shell (n1.25).
ORDENAMIENTO INTERNO
Dividiremos los mtodos en
dos grandes grupos:
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
a:
15 67 08 16 44 27 12 35
menor= 15
i=1
15
67
8 16 44 27 12 35
67<15
8<15
Menor= 8
16<8
44<8
27<8
12<8
35<8
67 15
16 44 27 12 35
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
67 15
16 44 27 12 35
12 15
16 44 27 67 35
12 15
16 44 27 67 35
12 15
16 44 27 67 35
12 15
16 27 44 67 35
12 15
16 27 35 67 44
12 15
16 27 35 44 67
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
c7
( c 4 c 7)
t (n) ( (c1 c2 (c3
(n i)) c5 c6))
2
i 1
n 1
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
algoritmo seleccin(a, n)
para i1 hasta n-1 hacer
menora[i]
ki
para ji+1 hasta n
si a[j]<menor entonces
menora[j]
kj
finsi
finpara
a[k]a[i]
a[i]menor
finpara
finseleccion
C (n 1) (n 2) ... 2 1
n2 n
C
2
n * (n 1)
2
Cuando i=0
A[ j ]>a[ j+1]
ARREGLO
15>67
15 67
67>8
8 16 44
27 12
35
15
8 67 16 44
27 12
35
67>16
15
8 16 67 44
27 12
35
67>44
15
8 16 44 67
27 12
35
67>27
15
8 16 44 27
67 12
35
67>12
15
8 16 44 27
12 67
35
67>35
15
8 16 44 27
12 35
67
algoritmo burbuja(a, n)
para i0 hasta i<n hacer
para j0 hasta j<(n-1 ) hacer
si a[ j]> a[ j+1 ] entonces
auxa[ j ]
a[ j ]a[ j+1 ]
a[ j +1]aux
finsi
finpara
finpara
finburbuja
ARREGLO
15
8 16 44 27
12 35
67
15 16 27 12
35 44
67
15 16 12 27
35 44
67
15 12 16 27
35 44
67
12 15 16 27
35 44
67
12 15 16 27
35 44
67
12 15 16 27
35 44
67
12 15 16 27
35 44
67
algoritmo burbuja(a, n)
para i0 hasta i<n hacer
para j0 hasta j<(n-1 ) hacer
si a[ j]> a[ j+1 ] entonces
auxa[ j ]
a[ j ]a[ j+1 ]
a[ j +1]aux
finsi
finpara
finpara
finburbuja
algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja
algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja
algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja
algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja
es
de
complejidad
algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja
C (n 1) (n 2) ... 2 1
n2 n
C
2
algoritmo burbuja(a, n)
para i1 hasta n-1 hacer
para jn hasta i+1 por -1 hacer
si a[ j-1]> a[ j ] entonces
auxa[j-1]
a[ j-1]a[ j ]
a[ j ]aux
finsi
finpara
finpara
finburbuja
n * (n 1)
2
procedimiento BURBUJA(NUMERO a, n)
logico: salirverdadero
entero: t
mientras(salir =verdadero) hacer
salir falso
para( i 0 hasta i < (n-1)) hacer
si (a[i].num > a[i+1].num) entonces
t= a[i].num
a[i]=a[i+1]
a[i+1].num=t
salir verdadero
finsi
finpara
finmientras
finBURBUJA
1ra. Pasada 15 67 08 16 44 27 12 35
2da. Pasada 08 15 67 16 44 27 12 35
3ra. Pasada 08 15 16 67 44 27 12 35
4ra. Pasada 08 15 16 44 67 27 12 35
5ta. Pasada 08 15 16 27 44 67 12 35
6ta. Pasada 08 12 15 16 27 44 67 35
7ma. Pasada 08 12 15 16 27 35 44 67
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
algoritmo insercion(a, n)
para i2 hasta n
xa[i]
ji-1
mientras (j1) y (x<a[j]) hacer
a[ j+1]a[ j ]
jj-1
finmientras
a[j+1]x
finpara
fininsercion
procedimiento SHELL(a, n)
entero : incri, j , temp, i
incr n/2
mientras (incr > 0) hacer
para (i incr hasta i<n) hacer
temp a[i].num
ji
mientras((j incr) y (a[j-incr].num>temp)) hacer
a[ j ] a[ j incr ]
j j - incr
finmientras
a[j].num temp
finpara
incr incr / 2
finhacer
finSHELL
procedimiento SHELL(a, n)
entero: incr, j, temp, i
incrn/2
mientras (incr > 0) hacer
para i incr hasta i<n hacer
temp a[i].num
j i
mientras(( j incr) y (a[j-incr].num > temp)) hacer
a[j] a[j-incr]
j j - incr
finmientras
a[j].num temp
finpara
incr (incr / 2)
finmientras
finSHELL
Pasada 1
15 67 08 16 44 27 12 35 56 21 13 28 60 36 07 10
15 21 08 16 44 27 07 10 56 67 13 28 60 36 12 35
15 21 08 16 44 27 07 10 56 67 13 28 60 36 12 35
15 21 07 10 44 27 08 16 56 67 13 28 60 36 12 35
15 21 07 10 44 27 08 16 56 67 13 28 60 36 12 35
15 21 07 10 44 27 08 16 56 36 12 28 60 67 13 35
15 21 07 10 44 27 08 16 56 36 12 28 60 67 13 35
07 10 15 21 44 27 08 16
08 16 44 27 56 36 12 28
12 28 56 36 13 35 60 67
Pasada 2
07 10 15 21 08 16 44
27 12 28 56 36 13 35 60 67
07 10 15 21 08 16 44
08 21 15
16 15 21 44
12
27 12 28 56 36 13 35 60 67
27
27 44 28 56 36
13 36 56
35 56 36 60 67
07 10 08 16 15 21 12 27 44 28 13 35 56 36 60 67
Pasada 4
07 10 08 16 15 21 12
12 21 15
27 44 28 13 35 56 36 60 67
27 44 28
13 28 44 35 56 36 60 67
07 10 08 16 12 21 15
27
13 28 44 35 56 36 60 67
07 10 08 16 12 21 15
13
27
27
13 28 44 35 56 36 60 67
15 28 44 35 56 36 60 67
07 10 08 16 12 21 13
27
15 28 44 35 56 36 60 67
Pasada 2
Pasada 3
07 10 08 16 12 21 13 27 15 28 44 35 56 36 60 67
08 10 16
12 16 21
13 21 27
15 27 28 44
35 44 56
36 56 60 67
07 08 10 12 16 13 21 15 27 28 35 44 36 56 60 67
07 08 10 12 16 13 21 15 27
13 16 21
15 21 27
28 35 44
36 56 60 67
07 08 10 12 13 16 15 21 27
28 35 44
36 44 56 60 67
28 35 36 44 56 60 67
07 08 10 12 13 16 15 21 27
15 16 21 27
07 08 10 12 13 15 16 21 27
28 35
28 35
28 35
36 44 56 60 67
36 44 56 60 67
36 44 56 60 67
procedimiento SHELL(a, n)
entero: incr, j, temp, i
incrn/2
mientras (incr > 0) hacer
para i incr hasta i<n hacer
temp a[ i ].num
j i
mientras(( j incr) y (a[j-incr].num > temp)) hacer
a[ j ] a[ j-incr ]
j j - incr
finmientras
a[ j ].num temp
finpara
incr (incr / 2)
finmientras
finSHELL
SECUENCIAS DE INCREMENTOS
USADAS POR SHELL
La propuesta por Shell: n/2, n/4, ..., n/(2k), ..., 1.
Ventajas:
es fcil de calcular.
Desventajas:
no optimiza mucho la velocidad
del algoritmo puesto que los
incrementos tienen factores
comunes (no son primos
relativos).
El
tiempo
de
ejecucin promedio con esta
secuencia de incrementos ser
O(n2).
f(1)=21-1=1
f(2)=22-1=3
f(3)=23-1=7
SECUENCIAS DE INCREMENTOS
USADAS POR SHELL
f(0)=9(40)-9(20)+1=1
f(1)=9(41)-9(21)+1=19
f(2)=9(42)-9(22)+1=109
f(0)=(22)(22-3)+1=5
f(1)=(23)(23-3)+1=41
f(2)=(24)(24-3)+1=209
CLASIFICACIN POR
QUICKSORT
Este mtodo es el ms eficiente y veloz de los
mtodos de clasificacin.
Conocido
como
clasificacin
clasificacin por particin.
rpida
CLASIFICACIN POR
QUICKSORT
pivote=42
0
42
89
63
12
94
27
78
50
36
42
36
63
12
94
27
78
50
89
42
36
12
94
27
78
63
50
89
42
36
12
27
94
78
63
50
89
27
36
12
42
94
78
63
50
89
procedimiento QUICKSORT( a, l, r)
entero: j, l, r
si( l < r ) entonces
j PARTICION( a, l, r)
QUICKSORT( a, l, j-1)
QUICKSORT( a, j+1, r)
finsi
finQUICKSORT
no hay intercambio
si hay intercambio
67 08 16 44 27 15 35
15 08 16 44 27 67 35
no hay intercambio
no hay intercambio
no hay intercambio
si hay intercambio
44 27 67 35
1ra. Pasada 12 08 15 16 44 27 67 35
2da. Pasada 12 08 15 16 44 27 67 35
3ra. Pasada 12 08 15 16 35 27 44 67
4ra. Pasada 12 08 15 16 27 35 44 67
5ta. Pasada 08 12 15 16 27 35 44 67
C (n 1) 2 *
(n 1)
(n 1)
(n 1)
4*
... (n 1) *
2
4
(n 1)
C (n 1) (n 1) (n 1) ... (n 1)
C (n 1) * m
Considerando que el numero de trminos de la sumatoria
es igual al numero de pasadas y que este es igual a log n
la expresin queda:
C (n 1) * log n
16
14
10
10
16 14 10 8
10
25,
15,
20, 3,
5,
10
Se construye el rbol
25
15
20
10
25
15
20
10
25
15
20
10
10
resultado
2
15
20
25
25
15
20
10
10
15
20
25
ANTES
DESPUES
15
resultado
15
20
25
20
15
10
10
25
20
25
resultado
20
10
15
25
resultado
1
15
10
25
15
10
20
25
20
10
15
25
15
10
20 25
ANTES
DESPUES
15
resultado
1
15
10
20
25
10
20
25
15
10
20 25
resultado
1
10
15
10
20
15
10
20 25
10
15 20 25
ANTES
25
20
DESPUES
25
resultado
5
15
10
20
25
10
15
15
20
20
25
10
25
resultado
10
15 20 25
resultado
15
20
25
15
10
20
25
10
15 20 25
10
15 20 25
ANTES
DESPUES
resultado
15
10
20
25
Ya esta
ordenado!
15
10
20
25
10
15 20 25
T (n) bT (n / c) f (n)
CLASIFICACIN POR
MEZCLA
Algoritmo mergeSort (E, p, u)
Entradas:
Arreglo E, e ndices p y u que delimitan
el subarreglo a ordenar contenido en E[p,...,u].
Salidas: E[p,...,u] en orden ascendente.
1 si (p < u) entonces //caso progresivo
2
m [(p + u)/2]
3
mergeSort(E, p, m)
4
mergeSort(E, m + 1, u)
5
fusionar(E, p, m, u)
6 finsi
W(n) = 0 , si n=1
Si n > 1
si n 0
0
W ( n)
2W ([n / 2]) (n 1) si n 0
CLASIFICACIN
RADIX SORT
Este ordenamiento se basa en los
valores de los dgitos reales en las
representaciones de posiciones de los
nmeros que se ordenan.
Por ejemplo el nmero 235 se escribe 2
en la posicin de centenas, un 3 en la
posicin de decenas y un 5 en la
posicin de unidades
235
centenas
decenas
unidades
REGLAS DEL
RADIX SORT
Empezar en el dgito ms significativo y
avanzar por los dgitos menos
significativos mientras coinciden los
dgitos correspondientes en los dos
nmeros.
El nmero con el dgito ms grande en
la primera posicin en la cual los
dgitos de los dos nmeros no
coinciden es el mayor de los dos (por
supuesto s coinciden todos los dgitos
de ambos nmeros, son iguales).
Digito menos
significativo
4567
Digito mas
significativo
REGLAS DEL
RADIX SORT
Arreglo original
12 92
33
25
86
57
37
48
0
1
2
12 92
33
PRIMERA PASADA
antes
4
5
25
86
57 37
48
12 92
33
25
86
57
37
48
33
25
86
57
37
48
despus
9
10
12 92
REGLAS DEL
RADIX SORT
SEGUNDA PASADA
antes
0
1
12
25
33 37
48
57
12 92
33
25
86
57
37
48
33
37
48
57
86
92
despus
12 25
7
8
86
92
10
YA ESTA
ORDENADO!
EFICIENCIA DEL
RADIX SORT
Suponiendo que los n nmeros de
entrada tienen una cantidad k de dgitos,
el algoritmo tomara un tiempo mximo de
O(kn), sea O(n), lo cual es lo mismo
para el caso promedio
En los mejores casos toma un tiempo de
O(n log n)
El ordenamiento por radix puede
ejecutarse hasta en el doble de velocidad
que Quicksort, pero no vale la pena
intentarlo si existe problemas potenciales
de espacio de almacenamiento o si las
llaves son de tamao variable y/o no son
aleatorias
AJUSTES AL
RADIX SORT
PRIMERA PASADA
antes
0
120 80 30 20
241
12
3
4
5
6
7
8
9
10
20 12
120 30
80
241
despus
120
80
30
20 241 12
AJUSTES AL
RADIX SORT
SEGUNDA PASADA
antes
0
1
12
120 20
30
241
5
7
9
10
80
20
241 12
despus
12
6
8
120 80 30
120
20
30 241 80
AJUSTES AL
RADIX SORT
TERCERA PASADA
antes
0
120
241
3
4
5
12 120 20
30
241 80
despus
12
20
30
80 120 241
7
8
9
10
YA ESTA
ORDENADO!
DESVENTAJAS
DEL RADIX SORT
Depende en que las llaves estn
compuestas de bits aleatorios en un orden
aleatorio. Si esta condicin no se cumple
ocurre una fuerte degradacin en el
desempeo de estos mtodos.
Adicionalmente,
requiere
de
espacio
adicional para realizar los intercambios.
Los algoritmos de ordenamiento basados en
radix se consideran como de propsito
particular debido a que su factibilidad
depende de propiedades especiales de las
llaves, en contraste con algoritmos de
propsito general como Quicksort que se
usan con mayor frecuencia debido a su
adaptabilidad a una mayor variedad de
aplicaciones
ORDENAMIENTO EXTERNO
CLASIFICACIN POR
MEZCLA DIRECTA
Es un trmino genrico para los algoritmos de
ordenamiento que pueden manejar grandes
cantidades de informacin. El ordenamiento
externo se requiere cuando la informacin que se
tiene que ordenar no cabe en la memoria principal
de una computadora (tpicamente la RAM) y un tipo
de memoria ms lenta (tpicamente un disco duro)
tiene que utilizarse en el proceso.
Existen otros tipos de memoria externa que son los
usb de almacenamiento entre otros. La Ordenacin
externa de los datos estn en un dispositivo de
almacenamiento
externo
(Archivos)
y
su
ordenacin es ms lenta que la interna.
F: 09 75 14 68 29 17 31 25 04 05 13 18 72 46 61
Primera Pasada:
F1: 09 14 29 31 04 13 72 61
F2: 75 68 17 25 05 18 46
Fusin en secuencias de longitud 2.
F: 09 75 14 68 17 29 25 31 04 05 13 18 46 72 61
Resultado de la
primera pasada
Resultado de la
tercera pasada
YA ESTA
ORDENADO!
CLASIFICACIN EQUILIBRADA
ARCHIVO ORIGINAL
09 75 14 68 29 17 31 25 04 05 13 18 72 46 61
F1: 9, 75
F2: 14, 68
29
17, 31
17, 29, 31
46 61
FUSION
25
4, 5, 13, 18, 72
9 14 17 29 31 68 75
4 5 13 18 25 46 61 72
YA ESTA
ORDENADO!
4, 5, 9, 13, 14, 17, 18, 25, 29, 31, 46, 61, 68, 72, 75
Laboratorio
Implementando los siguientes algoritmos
clasificacin en java o C++(en archivos):
de
Mezcla Directa
Mezcla equilibrada
1. Presente su algoritmo de cada uno para ordenar