Documente Academic
Documente Profesional
Documente Cultură
Carrera
Lic. En Desarrollo De Software
Profesor
Jos Dolores Ruz
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.
3
ndice
Hoja de Presentacin.2
Introduccin...3
ndice.4
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.
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)
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)
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
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.
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.
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.
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).
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
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