You are on page 1of 10

METODOS DE ORDENAMIENTO Y BUSQUEDA

Los algoritmos básicos de ordenación más simples y clásicos son:

• Ordenación por selección.

• Ordenación por inserción.

• Ordenación por burbuja.

Los métodos más recomendados son: selección e inserción, aunque se estudiará


el método de burbuja, por aquello de ser el más sencillo aunque a la par también
es el más ineficiente; por esta causa no recomendamos su uso, pero sí conocer su
técnica. Los datos se pueden almacenar en memoria central o en archivos de
datos externos guardados en unidades de almacenamiento magnético (discos,
cintas, disquetes, CD-ROM, DVD, discos flash USB, etc.) Cuando los datos se
guardan en listas y en pequeñas cantidades, se suelen almacenar de modo
temporal en arrays y registros; estos datos se almacenan exclusivamente para
tratamientos internos que se utilizan en gestión masiva de datos y se guardan en
arrays de una o varias dimensiones. Los datos, sin embargo, se almacenan de
modo permanente en archivos y bases de datos que se guardan en discos y cintas
magnéticas.

Algoritmo de ordenamiento

En computación y matemáticas un algoritmo de ordenamiento es un algoritmo que


pone elementos de una lista o un vector en una secuencia dada por una relación
de orden, es decir, el resultado de salida ha de ser una permutación —o
reordenamiento— de la entrada que satisfaga la relación de orden dada. Las
relaciones de orden más usadas son el orden numérico y el orden lexicográfico.
Ordenamientos eficientes son importantes para optimizar el uso de otros
algoritmos (como los de búsqueda y fusión) que requieren listas ordenadas para
una ejecución rápida. También es útil para poner datos en forma canónica y para
generar resultados legibles por humanos.
Desde los comienzos de la computación, el problema del ordenamiento ha atraído
gran cantidad de investigación, tal vez debido a la complejidad de resolverlo
eficientemente a pesar de su planteamiento simple y familiar. Por ejemplo,
BubbleSort fue analizado desde 1956.1 Aunque muchos puedan considerarlo un
problema resuelto, nuevos y útiles algoritmos de ordenamiento se siguen
inventado hasta el día de hoy (por ejemplo, el ordenamiento de biblioteca se
publicó por primera vez en el 2004). Los algoritmos de ordenamiento son comunes
en las clases introductorias a la computación, donde la abundancia de algoritmos
para el problema proporciona una gentil introducción a la variedad de conceptos
núcleo de los algoritmos, como notación de O mayúscula, algoritmos divide y
vencerás, estructuras de datos, análisis de los casos peor, mejor, y promedio, y
límites inferiores.

Clasificación

Los algoritmos de ordenamiento se pueden clasificar en las siguientes maneras:

 La más común es clasificar según el lugar donde se realice la ordenación


 Algoritmos de ordenamiento interno: en la memoria del ordenador.
 Algoritmos de ordenamiento externo: en un lugar externo como un disco
duro.

 Por el tiempo que tardan en realizar la ordenación, dadas entradas ya


ordenadas o inversamente ordenadas:
 Algoritmos de ordenación natural: Tarda lo mínimo posible cuando la
entrada está ordenada.
 Algoritmos de ordenación no natural: Tarda lo mínimo posible cuando la
entrada está inversamente ordenada.

 Por estabilidad: un ordenamiento estable mantiene el orden relativo que tenían


originalmente los elementos con claves iguales. Por ejemplo, si una lista
ordenada por fecha se reordena en orden alfabético con un algoritmo estable,
todos los elementos cuya clave alfabética sea la misma quedarán en orden de
fecha. Otro caso sería cuando no interesan las mayúsculas y minúsculas, pero
se quiere que si una clave aBC estaba antes que AbC, en el resultado ambas
claves aparezcan juntas y en el orden original: aBC, AbC. Cuando los
elementos son indistinguibles (porque cada elemento se ordena por la clave
completa) la estabilidad no interesa. Los algoritmos de ordenamiento que no
son estables se pueden implementar para que sí lo sean. Una manera de
hacer esto es modificar artificialmente la clave de ordenamiento de modo que
la posición original en la lista participe del ordenamiento en caso de
coincidencia.

Los algoritmos se distinguen por las siguientes características:

 Complejidad computacional (peor caso, caso promedio y mejor caso) en


términos de n, el tamaño de la lista o arreglo. Para esto se usa el concepto
de orden de una función y se usa la notación O(n). El mejor comportamiento
para ordenar (si no se aprovecha la estructura de las claves) es O(n log n). Los
algoritmos más simples son cuadráticos, es decir O(n²). Los algoritmos que
aprovechan la estructura de las claves de ordenamiento (p. ej. bucket sort)
pueden ordenar en O(kn) donde k es el tamaño del espacio de claves. Como
dicho tamaño es conocido a priori, se puede decir que estos algoritmos tienen
un desempeño lineal, es decir O(n).
 Uso de memoria y otros recursos computacionales. También se usa la
notación O(n).

Estabilidad

Los algoritmos de ordenamiento estable mantienen un relativo preorden total. Esto


significa que un algoritmo es estable solo cuando hay dos registros R y S con la
misma clave y con R apareciendo antes que S en la lista original.

Cuando elementos iguales (indistinguibles entre sí), como números enteros, o más
generalmente, cualquier tipo de dato en donde el elemento entero es la clave, la
estabilidad no es un problema. De todas formas, se asume que los siguientes
pares de números están por ser ordenados por su primer componente:

(4, 1) (3, 7) (3, 1) (5, 6)

En este caso, dos resultados diferentes son posibles, uno de los cuales mantiene
un orden relativo de registros con claves iguales, y una en la que no:

(3, 7) (3, 1) (4, 1) (5, 6) (orden mantenido)


(3, 1) (3, 7) (4, 1) (5, 6) (orden cambiado)

Los algoritmos de ordenamiento inestable pueden cambiar el orden relativo de


registros con claves iguales, pero los algoritmos estables nunca lo hacen. Los
algoritmos inestables pueden ser implementados especialmente para ser estables.
Una forma de hacerlo es extender artificialmente el cotejamiento de claves, para
que las comparaciones entre dos objetos con claves iguales sean decididas
usando el orden de las entradas original. Recordar este orden entre dos objetos
con claves iguales es una solución poco práctica, ya que generalmente acarrea
tener almacenamiento adicional.

Ordenar según una clave primaria, secundaria, terciara, etc., puede ser realizado
utilizando cualquier método de ordenamiento, tomando todas las claves en
consideración (en otras palabras, usando una sola clave compuesta). Si un
método de ordenamiento es estable, es posible ordenar múltiples ítems, cada vez
con una clave distinta. En este caso, las claves necesitan estar aplicadas en orden
de aumentar la prioridad.

Ejemplo: ordenar pares de números, usando ambos valores

(4, 1) (3, 7) (3, 1) (4, 6) (original)


(4, 1) (3, 1) (4, 6) (3, 7) (después de ser ordenado por el segundo valor)
(3, 1) (3, 7) (4, 1) (4, 6) (después de ser ordenado por el primer valor)
Por otro lado:

(3, 7) (3, 1) (4, 1) (4, 6) (después de ser ordenado por el primer valor)
(3, 1) (4, 1) (4, 6) (3, 7) (después de ser ordenando por el segundo valor,el orden
por el primer valor es perturbado)

METODOS DE BUSQUEDA

Búsqueda secuencial.

Este tipo de búsqueda consiste en examinar, a partir del primer elemento y de uno
en uno, hasta encontrar el dato buscado o bien llegar al final de la lista que puede
estar almacenada en archivo o arreglo. En este tipo de listas los elementos
pueden o no estar clasificados, ya que se empieza a comparar de uno en uno los
elementos de la lista y no importa su orden para realizar la búsqueda, salvo para
el tiempo de ejecución. Si el elemento que se está buscando, se encuentra al
inicio de la lista, este tiempo, sería muy corto, pero si se encuentra al final, va a
tardar más y si el elemento que se desea buscar, no se encuentra en la lista, se
hizo necesario, recorrer toda la lista, para darse cuenta que no está en ella. Y si se
le aumenta a esto, que el número de elementos en la lista puede ser del orden de
cientos o miles, va a hacer mucho más tardado su ejecución. Esta búsqueda tiene
la ventaja de tener una fácil programación de su algoritmo.

El pseudocódigo del algoritmo es el siguiente:

inicio i=0

bandera = 0

mientras i < n si k [ i] = x inicio desplegar “búsqueda exitosa y el dato es” x


desplegar “y se encuentra en la posición” i i=n

bandera = 1
else i=i+1

fin

si bandera = 0 desplegar “no se encontró el dato en la lista” fin

Para este pseudocódigo, se considera que se tienen n nodos (conjunto de uno o


varios campos) en una lista como:

n0, n1 , n2 ,....n n _1

Cuyas llaves son: K0, K1, K2,....K n _ 1, donde n es ~ 0 y x es el valor del dato
que se está buscando.

Búsqueda binaria

La búsqueda Binaria o por Bisección no representa mucha dificultad para la


programación de su algoritmo y además, es muy rápida su ejecución. Este
algoritmo requiere que los elementos de la lista, sobre la que va a actuar, estén
clasificados, ya sea en forma ascendente o descendente, cada elemento de la lista
puede tener varios campos. La lista se considera que empieza a almacenar sus
elementos en la posición cero. Va a utilizarse tres apuntadores, uno en la primera
posición de la lista que se le denominara LI, para efectos de la explicación, otro en
la última conocido como LS y el que apunte en la parte central, el cual se obtiene
de la suma de LS mas LI entre dos (LI + LS/ 2) y tomando la parte entera, el cual
se le llamará M. A diferencia de la Búsqueda Secuencial, aquí el número de
comparaciones no se comporta en forma lineal.

El pseudocódigo del algoritmo es el siguiente:

inicio LI = 0

LS = n – 1
mientras LI ~LS M = Parte Entera (LI + LS) /2) si dato< lista[M] LS = M -1 en caso
contrario si dato> lista [M] LI = M +1

en caso contrario desplegar “el elemento buscado esta en la posición”,

M break fin desplegar “el elemento” dato “no se encontró en la lista”

Fin

Dato, es el valor que se va a buscar en la lista; lista, es donde están los elementos
clasificados, LI es el límite inferior, LS es el límite superior, M es el apuntador de
en medio y N el número de elementos de la lista.

Búsqueda mediante transformación de llaves (Hashing).

La utilización de los métodos por comparación de llaves son muy dependientes del
número de elementos, estos es, a mayor número de elementos son mayores las
comparaciones. Existe el grupo de búsquedas por transformación de llaves
(Hash), que aumenta la eficiencia, en cuanto al tiempo de ejecución, ya que
accede a los registros por lo general más rápidamente, pero va a depender de su
implementación.

La transformación de llaves o claves, permite tener acceso a los elementos de


manera directa, esto es sin tener la necesidad de recorrer los elementos
anteriores, antes de llegar al buscado. Algunos autores también la llaman función
de mapeo, ya que transforma o mapea la llave de entrada. Trabaja en base a la
función de transformación HASH que comúnmente se denomina como H (llave), la
cual va a convertir, una llave dada, en una dirección dentro del arreglo o del
archivo. Función Hash Las funciones de Hash, para lograr su objetivo de
proporcionar la dirección donde debe estar el elemento buscado a partir de su
llave, lo logran haciendo algunas operaciones sobre los caracteres que la
componen.

Árboles binarios de búsqueda.


Otra de las herramientas básicas para realizar búsquedas, es a través de los
árboles binarios de búsqueda, para lo cual se recordarán algunos conceptos,
como la definición de árboles y de grafos, a continuación se explican
detalladamente: Grafo o gráfica o diagrama La forma más conocida de representar
un grafo es por medio de un dibujo donde se tienen los siguientes elementos: -
Los puntos, también llamados vértices, nodos, o unión. - Las líneas que unen a los
puntos, conocidas como arcos, ramas o elementos. Para representar en la
memoria de una computadora al grafo G = (E, V) será necesario utilizar dos
conjuntos de elementos; Uno para los arcos E=(e1,e2,....en) Otro para los vértices
V=(v1,v2,....vn)

Recuperación de datos

En informática, la recuperación de datos es el conjunto de técnicas y


procedimientos utilizados para acceder y extraer la información almacenada en
medios de almacenamiento digital que por daño o avería no pueden ser accesibles
de manera usual.

Los procedimientos de recuperación de datos pueden ser utilizados para recuperar


información de diversos tipos de medios como discos duros, memorias USB,
servidores, cámaras digitales, CD, DVD, entre otros.

La recuperación de datos es necesaria por distintos motivos, como por ejemplo


daños físicos en el medio de almacenamiento (averías electrónicas, averías
mecánicas, golpes, incendios, inundaciones, etc.) o averías lógicas (daños en el
sistema de archivos, daño en las particiones, archivos eliminados, formateos
accidentales, etc..).

Existen distintos métodos y herramientas que se pueden ejecutar para realizar la


recuperación de datos y todo dependerá de la avería que el dispositivo presente,
desde software especializado hasta herramientas de hardware diseñadas
específicamente para esta labor.
El escenario más común de "recuperación de datos" involucra una falla en el
sistema operativo (típicamente de un solo disco, una sola partición, un solo
sistema operativo), en este caso el objetivo es simplemente copiar todos los
archivos requeridos en otro disco. Esto se puede conseguir fácilmente con un Live
CD, la mayoría de los cuales provéen un medio para acceder al sistema de
archivos, obtener una copia de respaldo de los discos o dispositivos removibles, y
luego mover los archivos desde el disco hacia el respaldo con un administrador de
archivos o un programa para creación de discos ópticos. Estos casos pueden ser
mitigados realizando particiones del disco y continuamente almacenando los
archivos de información importante (o copias de ellos) en una partición diferente
del de la de los archivos de sistema en el sistema operativo, los cuales son
reemplazables.

Podemos recuperar datos de un disco duro dañado

Otro escenario involucra una falla a nivel de disco, tal como un sistema de
archivos o partición de disco que esté comprometido, o una falla en el disco duro.
En cualquiera de estos casos, los datos no pueden ser fácilmente leídos.
Dependiendo de la situación, las soluciones pueden estar entre reparar el sistema
de archivos, la tabla de particiones o el registro maestro de cargado (MBR), o
técnicas de recuperación del disco duro que van desde la recuperación basada en
software de los datos corruptos a el reemplazo del hardware de un disco dañado
físicamente. Si la recuperación del disco duro es necesaria, el disco de por sí
típicamente ha fallado de manera permanente, y el propósito en vez de una
recuperación de una sola vez, es el de rescatar cualquier dato que pueda ser
leído.

En un tercer escenario, los archivos han sido "borrados" de un medio de


almacenamiento. Típicamente los archivos borrados no son realmente eliminados
de inmediato; en vez de ello, las referencias a ellos en la estructura de directorios
ha sido removida, y el espacio que estos ocupan se hace disponible para su
posterior sobre-escritura. En el transcurso de esto, el archivo original puede ser
recuperado. Aunque hay cierta confusión acerca del término, la "recuperación de
datos" puede también ser usada en el contexto de aplicaciones de informática
forense o de espionaje.