Anda di halaman 1dari 15

2017

Universidad Tecnolgica de Panam

Centro Regional de Azuero

Facultad de Ingeniera en Sistemas Computacionales

Carrera
Lic. En Desarrollo De Software

Profesor
Jos Dolores Ruz

Tema del Trabajo


Algoritmos de Ordenamiento y Bsqueda

Integrantes
Osirys Marciaga
Jess Nieto
Medardo Tejada
Jos Moreno

Fecha de Entrega
27/6/2017

2
Introduccin

En muchos aspectos de la vida nos vemos con la necesidad de ordenar en una forma
especfica las diferentes colecciones de los elementos utilizados. Las oficinas de correo y
las empresas de mensajera ordenan el correo y los paquetes por cdigos postales con el
objeto de conseguir una entrega eficiente; los anuarios las empresas telefnicas ordenan
sus clientes por orden alfabtico de apellidos con el fin ltimo de encontrar fcilmente el
nmero de telfono deseado; los estudiantes, por ejemplo, en nuestra universidad, se
ordenan basndose en la cedula etc. Por este hecho una de las tareas ms utilizadas en las
computadoras en el procesamiento de datos es la ordenacin. Por tanto, el estudio de
diferentes mtodos de ordenacin es una tarea sumamente prctica. En este proyecto
estudiaremos los algoritmos y tcnicas de ordenacin ms usuales. Adems, estudiaremos
el anlisis de los algoritmos utilizados en diferentes mtodos de ordenacin con el objetivo
de conseguir su mxima eficiencia.

Un Algoritmo de Ordenamiento est diseado para realizar la operacin de arreglar los


registros de una tabla en algn orden secuencial de acuerdo a un criterio de ordenamiento
y un Algoritmo de Bsqueda aquel que est diseado para localizar un elemento con
ciertas propiedades dentro de una estructura de datos. La correlacin entre ambos tipos de
algoritmos es evidente en el mundo de la informtica, la necesidad de ordenar datos y
buscarlos de forma rpida y eficaz es bsico en la programacin Ejemplos: Una base de
datos o un sistema de ordenamiento de un subconjunto de nmeros.

3
ndice

Hoja de Presentacin.2

Introduccin...3

ndice.4

I Algoritmos de ordenamiento y bsqueda


1. Definicin y concepto.5

2. Notacin de la gran O (big O).6

3. Algoritmos de ordenamiento y su eficiencia...7


3.1 Quicksort
3.2 Heapsort

4. Otras consideraciones de eficiencia.9

5. Algoritmos de bsqueda y su eficiencia..12


5.1 De cadena Knuth-Morris-Pratt
5.2 De cadena Boye-Moore

Conclusin...14

Infografa.15

4
I ALGORITMOS DE ORDENAMIENTO Y BUSQUEDA

Definicin y concepto
Ordenamiento
Es la operacin de arreglar los registros de una tabla en algn orden secuencial de acuerdo
a un criterio de ordenamiento. El ordenamiento se efecta con base en el valor de algn
campo en un registro. El propsito principal de un ordenamiento es el de facilitar las
bsquedas de los miembros del conjunto ordenado.
El ordenar un grupo de datos significa mover los datos o sus referencias para que queden
en una secuencia tal que represente un orden, el cual puede ser numrico, alfabtico o
incluso alfanumrico, ascendente o descendente.

Bsqueda
es aquel que est diseado para localizar un elemento con ciertas propiedades dentro de
una estructura de datos; por ejemplo, ubicar el registro correspondiente a cierta persona en
una base de datos, o el mejor movimiento en una partida de ajedrez.
La variante ms simple del problema es la bsqueda de un nmero en un vector.

Notacin de la gran O (big O)


Cuando trabajamos con algoritmos, normalmente nos interesa el rendimiento de ste. Nos
interesa saber, por ejemplo, de qu forma se comporta el algoritmo dada una cantidad
determinada de datos a procesar. Cientficos en computacin emplean una forma de
categorizar y comparar los algoritmos, de tal suerte que se pueda categorizar de forma
rpida el rendimiento de un algoritmo. Esta forma de medir se llama la Notacin Gran O:
Big-O Notation (BON).

5
Esta notacin
expresa la
ejecucin de
un algoritmo
dado un
parmetro de
entrada (i.e. el
tamao de
datos a
procesar). La
notacin
normalmente
es O(n)

Bsicamente notacin gran O:

crece en forma de la grfica matemtica.


nos permite comparar los costos relativos de dos o ms algoritmos para resolver el
mismo problema.
Permite anlisis de algoritmos, estima el consumo de recursos de un algoritmo.
Permite anlisis de algoritmos tambin les da una herramienta a los diseadores de
algoritmos para estimar si una solucin propuesta es probable que satisfaga las
restricciones de recursos de un problema.

El concepto de razn de crecimiento, es la razn a la cual el costo de un algoritmo crece


conforme el tamao de la entrada crece.

Una funcin f(n) se define de orden O(g(n)), es decir, f(n) = O(g(n)) si existen constantes
positivas n0 y c tales que: | f(n) | = c * <= | g(n) | , para toda n > n0100 n3 => O(n3) ::
6
6n2 + 2n + 4 => O(n21024 => O(1)
1+2+3+4+...+n-1+n= n * (n+1)/2 = O(n2)

Algoritmos de ordenamiento y su eficiencia


3.1 Quicksort
El mtodo de ordenamiento rpido o mtodo quicksort, es una tcnica basada en otra
conocida con el nombre divide y vencers, que permite ordenar una cantidad de elementos
en un tiempo proporcional a n2 en el peor de los casos o a n log n en el mejor de los casos.
El algoritmo original es recursivo, como la tcnica en la que se basa.
La descripcin del algoritmo para el mtodo de ordenamiento quicksort es la siguiente:
Debe elegir uno de los elementos del arreglo al que llamaremos pivote.
Debe acomodar los elementos del arreglo a cada lado del pivote, de manera que del lado
izquierdo queden todos los menores al pivote y del lado derecho los mayores al pivote;
considere que en este momento, el pivote ocupa exactamente el lugar que le corresponder
en el arreglo ordenado.
Colocado el pivote en su lugar, el arreglo queda separado en dos subarreglos, uno formado
por los elementos del lado izquierdo del pivote, y otro por los elementos del lado derecho
del pivote.
Repetir este proceso de forma recursiva para cada sub arreglo mientras stos contengan
ms de un elemento. Una vez terminado este proceso todos los elementos estarn
ordenados.
Para elegir un pivote se puede aplicar cualquiera de las siguientes tres opciones:
El pivote ser el primer elemento del arreglo,
El pivote ser el elemento que esta a la mitad del arreglo, o
Que el pivote se elija de entre tres elementos del arreglo (cualesquiera), los cuales se deben
comparar para seleccionar el valor intermedio de los tres y considerarlo como el pivote.

7
La forma o tcnica de reacomodo de los elementos del lado izquierdo y derecho del pivote,
aplica el siguiente procedimiento que es muy efectivo. Se utilizan dos ndices: izq, al que
llamaremos ndice inicial, y der, al que llamaremos ndice final. Conociendo estos
elementos el algoritmo quedara de la siguiente manera:
Recorrer el arreglo simultneamente con izq y der: por la izquierda con izq (desde el
primer elemento), y por la derecha con der (desde el ltimo elemento).
Mientras el arreglo en su posicin izq (arreglo[izq]) sea menor que el pivote, continuamos
el movimiento a la derecha.
Mientras el arreglo en su posicin der (arreglo[der]) sea mayor que el pivote, continuamos
el movimiento a la izquierda.
Terminando los movimientos se compara los ndices y si izq es menor o igual al der, se
intercambian los elementos en esas posiciones y las posiciones se cambian izq a la derecha
y der a la izquierda.
Repetir los pasos anteriores hasta que se crucen los ndices (izq sea menor o igual a der).
El punto en que se cruzan los ndices es la posicin adecuada para colocar el pivote, porque
sabemos que a un lado los elementos son todos menores y al otro son todos mayores (o
habran sido intercambiados).

3.2 Heapsort
El ordenamiento por montculos (heapsort en ingls) es
un algoritmo de ordenamiento no recursivo, no estable, con complejidad

computacional {\displaystyle \Theta (n\log n)}


Este algoritmo consiste en almacenar todos los elementos del vector a ordenar en
un montculo (heap), y luego extraer el nodo que queda como nodo raz del montculo
(cima) en sucesivas iteraciones obteniendo el conjunto ordenado. Basa su funcionamiento
en una propiedad de los montculos, por la cual, la cima contiene siempre el menor
elemento (o el mayor, segn se haya definido el montculo) de todos los almacenados en
l. El algoritmo, despus de cada extraccin, recoloca en el nodo raz o cima, la ltima hoja
por la derecha del ltimo nivel. Lo cual destruye la propiedad heap del rbol. Pero, a
continuacin realiza un proceso de "descenso" del nmero insertado de forma que se elige
a cada movimiento el mayor de sus dos hijos, con el que se intercambia.

8
Este intercambio, realizado sucesivamente "hunde" el nodo en el rbol restaurando la
propiedad montculo del rbol y dejando paso a la siguiente extraccin del nodo raz.
El algoritmo, en su implementacin habitual, tiene dos fases. Primero una fase de
construccin de un montculo a partir del conjunto de elementos de entrada, y despus, una
fase de extraccin sucesiva de la cima del montculo. La implementacin del almacn de
datos en el heap, pese a ser conceptualmente un rbol, puede realizarse en un vector de
forma fcil. Cada nodo tiene dos hijos y por tanto, un nodo situado en la posicin i del
vector, tendr a sus hijos en las posiciones 2 x i, y 2 x i +1 suponiendo que el primer
elemento del vector tiene un ndice = 1. Es decir, la cima ocupa la posicin inicial del
vector y sus dos hijos la posicin segunda y tercera, y as, sucesivamente. Por tanto, en la
fase de ordenacin, el intercambio ocurre entre el primer elemento del vector (la raz o
cima del rbol, que es el mayor elemento del mismo) y el ltimo elemento del vector que
es la hoja ms a la derecha en el ltimo nivel. El rbol pierde una hoja y por tanto reduce
su tamao en un elemento. El vector definitivo y ordenado, empieza a construirse por el
final y termina por el principio.

Otras consideraciones de eficiencia


ORDENAMIENTO POR SELECCIN (SelectionSort)

DESCRIPCIN.
Buscas el elemento ms pequeo de la lista.
Lo intercambias con el elemento ubicado en la primera posicin de la lista.
Buscas el segundo elemento ms pequeo de la lista.
Lo intercambias con el elemento que ocupa la segunda posicin en la lista.
Repites este proceso hasta que hayas ordenado toda la lista.

9
ANLISIS DEL ALGORITMO.
Requerimientos de Memoria: Al igual que el ordenamiento burbuja, este algoritmo slo
necesita una variable adicional para realizar los intercambios.
Tiempo de Ejecucin: El ciclo externo se ejecuta n veces para una lista de n elementos.
Cada bsqueda requiere comparar todos los elementos no clasificados.

Ventajas:
Fcil implementacin.
No requiere memoria adicional.
Rendimiento constante: poca diferencia entre el peor y el mejor caso.

Desventajas:
Lento.
Realiza numerosas comparaciones.

ORDENAMIENTO POR INSERCIN DIRECTA (InsertionSort)

DESCRIPCIN.
El algoritmo de ordenacin por el mtodo de insercin directa es un algoritmo
relativamente sencillo y se comporta razonablemente bien en gran cantidad de situaciones.
Completa la tripleta de los algoritmos de ordenacin ms bsicos y de orden de
complejidad cuadrtico, junto con SelectionSort y BubbleSort.
Se basa en intentar construir una lista ordenada en el interior del array a ordenar.
De estos tres algoritmos es el que mejor resultado da a efectos prcticos. Realiza una
cantidad de comparaciones bastante equilibrada con respecto a los intercambios, y tiene un

10
par de caractersticas que lo hacen aventajar a los otros dos en la mayor parte de las
situaciones.
Este algoritmo se basa en hacer comparaciones, as que para que realice su trabajo de
ordenacin son imprescindibles dos cosas: un array o estructura similar de elementos
comparables y un criterio claro de comparacin, tal que dados dos elementos nos diga si
estn en orden o no.
En cada iteracin del ciclo externo los elementos 0 a i forman una lista ordenada.

ANLISIS DEL ALGORITMO.


Estabilidad: Este algoritmo nunca intercambia registros con claves iguales. Por lo tanto es
estable.
Requerimientos de Memoria: Una variable adicional para realizar los intercambios.
Tiempo de Ejecucin: Para una lista de n elementos el ciclo externo se ejecuta n1 veces.
El ciclo interno se ejecuta como mximo una vez en la primera iteracin, 2 veces en la
segunda, 3 veces en la tercera, etc.

Ventajas:
Fcil implementacin.
Requerimientos mnimos de memoria.

Desventajas:
Lento.
Realiza numerosas comparaciones.

Este tambin es un algoritmo lento, pero puede ser de utilidad para listas que estn
ordenadas o semiordenadas, porque en ese caso realiza muy pocos desplazamientos.

11
METODO DE LA BURBUJA (BubbleSort)

DESCRIPCIN
La idea bsica del ordenamiento de la burbuja es recorrer el conjunto de elementos en
forma secuencial varias veces. Cada paso compara un elemento del conjunto con su
sucesor (x[i] con x[i+i]), e intercambia los dos elementos si no estn en el orden adecuado.
El algoritmo utiliza una bandera que cambia cuando se realiza algn intercambio de
valores, y permanece intacta cuando no se intercambia ningn valor, pudiendo as detener
el ciclo y terminar el proceso de ordenamiento cuando no se realicen intercambios, lo que
indica que este ya est ordenado.
Este algoritmo es de fcil comprensin y programacin pero es poco eficiente puesto que
existen n-1 pasos y n-i comprobaciones en cada paso, aunque es mejor que el algoritmo de
ordenamiento por intercambio.
En el peor de los casos cuando los elementos estn en el orden inverso, el nmero mximo
de recorridos es n-1 y el nmero de intercambios o comparaciones est dado por (n-1) *
(n-1) = n - 2n + 1.En el mejor de los casos cuando los elementos estn en su orden, el
nmero de recorridos es mnimo 1 y el ciclo de comparaciones es n-1.
La complejidad del algoritmo de la burbuja es O(n) en el mejor de los casos y O (n) en el
peor de los casos, siendo su complejidad total O(n).

Algoritmos de bsqueda y su eficiencia


De cadena Knuth-Morris-Pratt

El algoritmo KMP, trata de localizar la posicin de comienzo de una cadena, dentro de


otra. Antes que nada con la cadena a localizar se pre calcula una tabla de saltos (conocida
como tabla de fallos) que despus al examinar entre si las cadenas se utiliza para hacer
saltos cuando se localiza un fallo.

12
Supongamos una tabla 'F' ya pre calculada, y supongamos que la cadena a buscar est
contenida en el array 'P ()', y la cadena donde buscamos est contenida en un array 'T()'.
Entonces ambas cadenas comienzan a compararse usando un puntero de avance para la
cadena a buscar, si ocurre un fallo en vez de volver a la posicin siguiente a la primera
coincidencia, se salta hacia donde sobre la tabla, indica el puntero actual de avance de la
tabla. El array 'T' utiliza un puntero de avance absoluto que considera donde se compara el
primer carcter de ambas cadenas, y utiliza como un puntero relativo (sumado al absoluto)
el que utiliza para su recorrido el array 'P'. Se dan 2 situaciones:
Mientras existan coincidencias el puntero de avance de 'P', se va incrementando y si alcanza
el final se devuelve la posicin actual del puntero del array 'T'
Si se da un fallo, el puntero de avance de 'T' se actualiza hasta, con la suma actual del
puntero de 'P' + el valor de la tabla 'F' apuntado por el mismo que 'P'. A continuacin se
actualiza el puntero de 'P', bajo una de 2 circunstancias; Si el valor de 'F' es mayor que -1
el puntero de 'P', toma el valor que indica la tabla de salto 'F', en caso contrario vuelve a
recomenzar su valor en 0.

De cadena Boye-Moore
El algoritmo de bsqueda de cadenas Boyer-Moore es un particularmente
eficiente algoritmo de bsqueda de cadenas, y ha sido el punto de referencia estndar para
la literatura de bsqueda de cadenas prctica. Fue desarrollado por Bob Boyer y J Strother
Moore en 1977. El algoritmo pre procesa la cadena objetivo (clave) que est siendo
buscada, pero no en la cadena en que se busca (no como algunos algoritmos que procesan
la cadena en que se busca y pueden entonces amortizar el coste del pre procesamiento
mediante bsqueda repetida). El tiempo de ejecucin del algoritmo Boyer-Moore, aunque
es lineal en el tamao de la cadena siendo buscada, puede tener un factor significativamente
ms bajo que muchos otros algoritmos de bsqueda: no necesita comprobar cada carcter
de la cadena que es buscada, puesto que salta algunos de ellos. Generalmente el algoritmo
es ms rpido cuanto ms grande es la clave que es buscada, usa la informacin conseguida
desde un intento para descartar tantas posiciones del texto como sean posibles en donde la
cadena no coincida.

13
Conclusin

El aprendizaje principal que obtuvimos con el proyecto, fue conocer los


principales tipos de mtodos de bsqueda y ordenamiento los cuales son
indispensables a la hora de hacer un programa extenso ya que podramos
utilizar algunos de stos y as encontrar la informacin ms rpida y
ahorrarnos algo indispensable en muchos aspectos de la vida, el tiempo.

El mtodo de ordenamiento ms eficaz es el QuickSort, pero su


implementacin nos parece compleja al contrario del menos eficaz el
BubbleSort.

Existen muchas semejanzas entre los algoritmos de bsqueda y


ordenamiento, concluimos que es debido a su correlacin y el uso de
cadenas para buscar y ordenar.

El algoritmo de bsqueda de cadenas Boyer-Moore resulto ser mas fcil


de implementar que el KMP (Knuth-Morris-Pratt)

14
Infografa

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=
8&ved=0ahUKEwjny8f47NzUAhWEiJAKHQIdDqgQFgglMAA&url=http%3A%2F%2F
www.monografias.com%2Ftrabajos%2Falgordenam%2Falgordenam.shtml&usg=AFQjCN
Fl40CKBBvCmBqq4pRbTVyWOVUMLA
https://sites.google.com/site/fernandoagomezf/programacion-en-c/tips-de-programador-
c/algoritmos/la-notacion-big-o
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=
8&ved=0ahUKEwiZ_OKY7dzUAhUEQZAKHTw8B5cQFgglMAA&url=https%3A%2F%
2Fdocs.google.com%2Fdocument%2Fpreview%3Fhgd%3D1%26id%3D1NiNDXOdpyf3
DxCz4yFYfqSXNhfPBIMAYbFXA4r-
7xSk&usg=AFQjCNFgIOJGwzbCAolIalqEEuzXLs-Xvw
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=
8&ved=0ahUKEwil1YGz7dzUAhXJQ5AKHdNbDfYQFgglMAA&url=https%3A%2F%2
Fes.wikipedia.org%2Fwiki%2FAlgoritmo_Knuth-Morris-
Pratt&usg=AFQjCNGLXmsx4QoV_HTo_5popQZzC9EGKA
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=
8&ved=0ahUKEwjqyt_C7dzUAhVLh5AKHW3aAGMQFgglMAA&url=https%3A%2F%
2Fes.wikipedia.org%2Fwiki%2FAlgoritmo_de_b%25C3%25BAsqueda_de_cadenas_Boye
r-Moore&usg=AFQjCNHeUJ7ysrKyh785fxzjfjAty4sylA

15

Anda mungkin juga menyukai