You are on page 1of 2

Algoritmos y Estructuras de Datos

Para el caso que interesen todas las ocurrencias

Problema: Leer un arreglo de 7 elementos enteros. Leer luego un entero. Informar si ese entero
est o no. Si est, informar la posicin de todas sus ocurrencias.

para i de 1 7

leer a i

leer k ; esta falso

para i de 1 7

ai = k
V F
escribir Est en la posicin, i

esta verdadero

no esta
V F

escribir No est

program secue2(input,output);
var a: array[1..7] of integer; i, k: integer; esta: boolean;
begin for i:= 1 to 7 do read(a[i]); read(k); esta:= false;
for i:= 1 to 7 do if a[i]=k then
begin write(Est en la posicin,i);
esta:=true
end;
if not esta then write(No est)
end.

Bsqueda dicotmica: Consiste en tener dos indicadores, uno de la posicin de menor orden
(min) y otro de la posicin de mayor orden (max). Al principio uno valdr 1 y el otro N, suponiendo
que la cantidad de elementos sea N. (N=11 en los dos ejemplos que siguen).
Probamos si el elemento que est en el medio del arreglo es igual al buscado. Si es el buscado,
lo hemos encontrado y finaliza el algoritmo (suponemos que nos conformamos con una sola
ocurrencia). Si no es el buscado, nos fijamos si es mayor o menor al buscado, y como el arreglo
est clasificado, si el elemento del medio es menor, si el buscado est, est en la parte de
abajo, y nos quedamos con esa parte bajando min hasta medio, pero como ya sabamos que el
del medio no era, lo bajamos una posicin mas, es decir hacemos
min medio + 1
33
Algoritmos y Estructuras de Datos

Si un arreglo clasificado tiene elementos repetidos, estarn agrupados en posiciones adyacentes.


Aplicando el algoritmo de bsqueda dicotmica, que es mucho mas rpido que el secuencial,
encontraremos uno, pero no sabemos si es el primero, el ltimo, o uno cualquiera del grupo,
hacemos lo siguiente: vamos hacia arriba hasta llegar al primer elemento del grupo igual a la
clave y luego bajamos listando las posiciones mientras los elementos sean iguales al buscado.

Problema: Leer un arreglo de 11 elementos enteros, se sabe que est clasificado en forma
creciente. Leer luego un entero. Informar si ese entero est o no. Si est, informar su posicin.
Interesa ubicar una sola ocurrencia.

para i de 1 11

leer a i

leer k

min 1 ; max 11 ; medio (min+max) div 2

mientras a medio <> k y min <= max

a medio < k
V F

min medio + 1 max medio - 1

medio (min+max) div 2

a medio = k
V F

escribir Est en la escribir No est


posicin, medio

program dicoto(input,output);
var min, max, k, i, medio: integer ; a: array[1..11] of integer;
begin for i:= 1 to 11 do read(a[i]); read(k);
min:=1; max:=11; medio:= (min+max) div 2;
while a[medio]<>k and min<=max do
begin if a[medio]<k then min:= medio+1
else max:= medio-1;
medio:= (min+max) div 2
end;
if a[medio]=k then write(Est en la posicin,medio)
else write(No est)
end.

35

You might also like