Este documento resume tres algoritmos de búsqueda: búsqueda secuencial, búsqueda binaria y el método de transposición. Define cada algoritmo, proporciona código de ejemplo y analiza sus casos mejor, peor y promedio en términos de conteo de operaciones elementales. También incluye gráficas que comparan los casos mejor y peor para cada algoritmo.
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad V: Métodos de Ordenamiento
Retícula ISIC-2010-224: Programa: AED-1026/2016
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Estructura de Datos
Unidad V: Métodos de Ordenamiento
Retícula ISIC-2010-224: Programa: AED-1026/2016
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Búsqueda por método secuencial
• Búsqueda por método binario
• Búsqueda por método hashing
Creado por Ing. Alvaro Enrique Ruano
Cuando se aplica la técnica de "divide y vencerás" a la solución de problemas computacionales, generalmente se refiere a soluciones recursivas. Un ejemplo de este tipo de soluciones es el algoritmo de ordenación por mezcla (Merge Sort).
Objetivos
Una vez que se haya leído y estudiado este capítulo, usted podrá:
• Conocer los algoritmos basados en el intercambio de elementos.
• Conocer el algoritmo de ordenación por inserción.
• Conocer el algoritmo de selección.
• Distinguir entre los algoritmos de ordenación basados en el intercambio
y en la inserción.
• Saber la eficiencia de los métodos básicos de ordenación.
• Conocer los métodos más eficientes de ordenación.
• Aplicar métodos mas eficientes de ordenación de arrays.
• Ordenar vectores de objetos.
• Diferenciar entre búsqueda secuencial y búsqueda binaria.
Introducción
Muchas actividades humanas requieren que diferentes colecciones de elementos utilizados se pongan en un orden específico. Las oficinas de correo y las empresas de mensajería ordenan el correo y los paquetes por códigos postales con el objeto de conseguir una entrega eficiente; las facturas telefónicas se ordenan por la fecha de las llamadas; los anuarios o listines telefónicos se ordenan por orden alfabético de apellidos con el fin último de encontrar fácilmente el número de teléfono deseado; los estudiantes de una clase en la universidad se ordenan por sus apellidos o por los números de expediente.
Por estas circunstancias una de las tareas que realizan más frecuentemente las computadoras en el procesamiento de datos es la ordenación.
El estudio de diferentes métodos de ordenación es una tarea intrínsecamente interesante desde un punto de vista teórico y, naturalmente, práctico. Este capítulo estudia los algoritmos y las técnicas de ordenación más usuales y su implementación en Java; también la manera de ordenar objetos con la funcionalidad que proporcionan las clases en Java. De igual modo, se estudiará el análisis de los diferentes métodos de ordenación con el objetivo de conseguir la máxima eficiencia en su uso real.
En el capítulo se analizarán los métodos básicos y los más avanzados empleados en programas profesionales.
En la ciencia de la computación los algoritmos son más importantes que los LP o que las computadoras; la solución de un problema haciendo uso de las computadoras requiere por una parte un algoritmo o método de resolución y por otra un programa o codificación del algoritmo en un LP. Ambos componentes tienen importancia; pero la del algoritmo es absolutamente indispensable; sabemos que un algoritmo es una secuencia de pasos para resolver un problema.
1. 1
2013
Corporación Universitaria Del Caribe
CECAR
Facultad de Ingeniería
Ingeniería De Sistemas
Análisis De Algoritmos
DOCENTE
Guillermo Hernández
ESTUDIANTE
Jose Rios
2. 2
Tabla de contenido
Bibliografía .................................................................................................................................... 4
1.
Análisis de Algoritmos ....................................................................................................... 5
1.1.
Algoritmos De Búsquedas ............................................................................................. 5
1.1.1.
Búsqueda Secuencial ................................................................................................. 5
1.1.1.1.
Definición: ............................................................................................................. 5
1.1.1.2.
Código:................................................................................................................... 5
1.1.1.3.
Mejor Caso ............................................................................................................ 5
1.1.1.3.1.
Definición .............................................................................................................. 5
1.1.1.3.2.
Conteo de OE......................................................................................................... 6
1.1.1.4.
Peor Casos ............................................................................................................. 6
1.1.1.4.1.
Definición .............................................................................................................. 6
1.1.1.4.2.
Conteo de OE......................................................................................................... 6
1.1.1.5.
Pasos promedio ..................................................................................................... 7
1.1.1.6.
Grafica Mejor casos vs Peor caso .......................................................................... 8
1.1.1.7.
Teoría vs Practica del conteo de OE ...................................................................... 8
1.1.2.
Búsqueda Binaria....................................................................................................... 8
1.1.2.1.
Definición .............................................................................................................. 8
1.1.2.2.
Código.................................................................................................................... 9
1.1.2.3.
Mejor Caso ............................................................................................................ 9
1.1.2.3.1.
Definición .............................................................................................................. 9
1.1.2.3.2.
Conteo de OE....................................................................................................... 10
1.1.2.4.
Peor Caso ............................................................................................................. 11
1.1.2.4.1.
Definición ............................................................................................................ 11
1.1.2.4.2.
Información para el peor caso ............................................................................ 11
1.1.2.4.3.
Conteo de OE....................................................................................................... 12
1.1.2.4.4.
Teoría vs Practica Del Conteo OE ........................................................................ 12
1.1.2.4.5.
Grafica Mejor Vs Peor Caso(Tiempo Ejecucion) .................................................. 13
1.1.3.
Método Transponer ................................................................................................ 13
1.1.3.1.
Definición ............................................................................................................ 13
1.1.3.2.
Código.................................................................................................................. 14
Primera forma ......................................................................................................................... 14
3. 3
Segunda forma ........................................................................................................................ 14
1.1.3.3.
Evaluar casos ....................................................................................................... 14
1.1.3.4.
Grados de complejidad ....................................................................................... 15
1.1.3.4.1.
Primera forma ..................................................................................................... 15
1.1.3.4.2.
Segunda Forma.................................................................................................... 15
1.1.3.4.3.
Teoría vs Practica conteo OE ............................................................................... 15
1.1.3.4.4.
Grafica Primer Método Vs Segundo Método ...................................................... 16
4. 4
Bibliografía
UChile. (s.f.). Recuperado el 20 de Septiembre de 2013, de
http://users.dcc.uchile.cl/~rbaeza/inf/algoritmia.pdf
wikibooks. (s.f.). wikibooks. Recuperado el 19 de Septiembre de 3013, de wikibooks:
http://es.wikibooks.org/wiki/%C3%81lgebra_Lineal/Transpuesta_de_una_matriz
5. 5
1. Análisis de Algoritmos
1.1. Algoritmos De Búsquedas
1.1.1.
Búsqueda Secuencial
1.1.1.1. Definición:
El método de búsqueda secuencial es la técnica más sencilla de buscar un
elemento en un vector, funciona de la siguiente manera; recorrer el vector
posición por posición e ir comparando con el valor de cada una de ellas hasta,
que encuentre el elemento buscado o hasta que vector sea recorrido totalmente.
1.1.1.2. Código:
1.1.1.3. Mejor Caso
1.1.1.3.1.
Definición
Para el método de búsqueda secuencial el mejor caso se presenta cuando el
elementos a buscar se encuentre alojado en la posición [0] del vector; es decir
que el datos este en la primera casilla de arreglo esto que conlleva que el ciclo
repetitivo solo hará una sola iteración ya que la instrucción if evalúa que el
después que se halle el dato en el índice [0] el ifhace un returnque evita que el
ciclo forhaga más de una iteración.
Ejemplo: queremos buscar a 1:
Datos 1
Índice 0
2
1
4
2
5
3
6
4
7
5
8
6
9
7
9
8
10
9
6. 6
1.1.1.3.2.
Conteo de OE
Para el conteo de operaciones elementales de método del búsqueda
secuencial en su mejor caso se define tal y como se planteó en su definición y
dicho conteo será subrayado con color rojo todas y cada una de las OE que se
hagan en el algoritmo implementado en lenguaje Java.
Nota: Las OE que salgan subrayadas son las que te contaran en cuenta para
dicho conteo, si una instrucción sale doblemente subrayada es por sé hacer
dos OE en ella.
línea
1
2
3
Total
OE
4
3
1
8 OE
1.1.1.4. Peor Casos
1.1.1.4.1.
Definición
Para el peor caso del método de búsqueda secuencia se puede presentar en
dosocasiones que el elemento que deseamos hallar esté en la última posición
del vector o que dicho elemento no ese encuentre en el arreglo; en ambos
casos el método tiene que recorrer todos las posiciones del arreglo es decir;
desde la primer hasta el último índice.
Ejemplo: queremos buscar a 10:
Datos 1
Índice 0
1.1.1.4.2.
2
1
4
2
5
3
6
4
7
5
8
6
9
7
9
8
10
9
Conteo de OE
Para el conteo de operaciones elementales en este caso se realiza de manera
similar al caso anterior.
7. 7
Para este hacer una prueba a tomaremos el caso en que el elemento a buscar
se encuentre la última casilla de vector.
Nota: Las OE que salgan subrayadas son las que te contaran en cuenta para
dicho conteo, si una instrucción sale doblemente subrayada es por sé hacer
dos OE en ella.
línea
1
2
3
Total
OE
4n
3N
1
7n+1 OE
Las OE que se realizan en las líneas 1 y 2 se ejecutan n veces entonces se
multiplican por n siendon el tamaño de los datos de entrada. La OE de la
línea 3 solo se realiza unas ves y es cuando se encuentra el elemento para
este caso en la última posición.
1.1.1.5. Pasos promedio
El caso promedio o también llamado caso aleatorios no se puede hacer un coteo
de operaciones elementales exacto ya que el elemento a encontrar puede estar el
cualquier índice del vector; entonces para dar solución a este altercado se divide
el número datos de entradas del vector entre dos
vector[N/2]
8. 8
1.1.1.6. Grafica Mejor casos vs Peor caso
10
9
8
7
6
5
OE Mejor Caso
4
OE Peor Caso
3
2
1
0
0
2
4
6
8
10
1.1.1.7. Teoría vs Practica del conteo de OE
Datos De Entrada = 100,000
Caso
Teoría
Mejor
8
Peor
(7*n)+1=700,001
Practica (Programa)
0 ut
4 ut
Conclusiones:De acuerdo con los pruebas realizadas entre la teoría de
conteo de operaciones elementales y el tiempo de ejecución del mismo
algoritmo implementado en un programa en lenguaje Java; puedo concluir
que de la teoría y práctica arrojan resultados totalmente distintos y se puede
apreciar el tabla de la (teoría vs práctica)
1.1.2.
Búsqueda Binaria
1.1.2.1. Definición
El método de búsqueda binaria es un excelente forma de buscar elementos
dentro de un vector, este algoritmos de búsqueda requiere que le vector se
encuentre ordenado previamente, se llama de búsqueda binaria por que el
algoritmo divide en dos y compra los elementos que se encuentren en la posición
de centro de arreglo.Esta búsqueda utiliza un método de “divide y vencerás” para
localizar el valor deseado
9. 9
1.1.2.2. Código
1.1.2.3. Mejor Caso
1.1.2.3.1.
Definición
Para el conteo de operaciones elementales del método de la búsqueda binaria
en su mejor caso se define de la siguiente manera; lo ideal es que en el datos
se halle en la posición centro del vector
Nota: Las OE que salgan subrayadas son las que te contaran en cuenta para
dicho conteo, si una instrucción sale doblemente subrayada es por sé hacer
dos OE en ella.
10. 10
1.1.2.3.2.
Conteo de OE
Haciendo las operaciones de las primeras 5 filas con un vector de 10 posiciones
quedan de la siguiente manera
K=6;
cen=9/2 =4,5 peso como la variable cen es de tipo entero no se toman los
decimales entonces cen =4
Datos 1
Índice 0
2
1
4
2
5
3
6
4
7
5
8
6
9
7
9
8
10
9
Exactamente se van a cumplir la OE que están subrayadas en la imagen anterior
Línea
1
2
3
4
5
10
11
Totales OE
0E
1
1
2
3
4
2
1
140E
11. 11
1.1.2.4. Peor Caso
1.1.2.4.1.
Definición
La definición de peor casos para el algoritmo de búsqueda binaria se presenta
cuando el elemento al que queramos encontrar no se encuentre almacenado o
este en algunos de los dos extremos la lista; esto conlleva a que el método
dividirá el vector varias veces y hará comparaciones en vanohasta la última
iteración del ciclo while.
1.1.2.4.2.
(UChile)
(UChile)
Información para el peor caso
12. 12
1.1.2.4.3.
Conteo de OE
Total OE=
1.1.2.4.4.
Teoría vs Practica Del Conteo OE
Datos De Entrada = 100,000
Caso
Teoría
Mejor
14
Peor
=325.58
Practica (Programa)
0 ut
0 ut
Según los resultados del tiempo de ejecución en el mejor caso y el peor caso
con el número de entrada = 100,00 No logra que programa calcule ninguna
unidad de tiempo, eso se debe a la misma eficiencia del algoritmo de búsqueda
13. 13
1.1.2.4.5.
Grafica Mejor Vs Peor Caso(Tiempo Ejecucion)
1
0.9
0.8
0.7
0.6
0.5
Mejor Caso
0.4
Peor Caso
0.3
0.2
0.1
0
0
200000
400000
600000
800000
1000000
1200000
Podemos observar que las líneas que presentan el mejor y el peor caso para el
algoritmo de búsqueda binaria toma un valor de 0 ut esto sucede porque dicho
algoritmos no depende de los todos de entrada simpe y cuando el vector este
ordenado.
Nota:en tiempo de ejecución fue calculado con diferentes números de datos
de entrada, probado en el mismo programa, el mimos equipo y en situaciones
muy parecidas en cambios casos.
1.1.3.
Método Transponer
1.1.3.1. Definición
Transpuesta
de una matriz m x n, es la matriz n x m cuyas columnas son los
renglones de A en el mismo orden.(wikibooks)
En otras palabras se intercambia las los valores de las columnas por los de las filas
una matriz Ejemplo:sea B la matriz original y sea
la matriz transpuesta
14. 14
1.1.3.2. Código
Primera forma
Segunda forma
1.1.3.3. Evaluar casos
Como se definió anterior mente el método transponer (); transpone los datos de
una matriz ojo como en el cuerpo de ese método no tienes instrucciones de
condiciones ifentonces esto quiere decir que en el algoritmos de trasposición
NOaplican los casos y estos son (mejor caso), (caso promedio) y (peor caso) , la
explicación de ellos es que el único objetivo de método es transponer la matriz
dependiendo entonces del N que es el número de datos de entrada que en esta
implementación hecha en lenguaje JAVA, N= matriz.length.
Conclusión: el grada de complejidad de penderá de numero de OE del métodos
por el tamaño de datos de entrada.
15. 15
1.1.3.4. Grados de complejidad
1.1.3.4.1.
Primera forma
Primera implementación de este método más eficiente que la segunda forma.
La diferencia de estos dos métodos está en la variable j, miremos la
codificación del forinterno “for (int j = i+1; j <matriz.length; j++) {” notamos
que la variable j toma el mismo valor i pero se le suma 1 esto quiere decir que
j siempre a tomar tener 1 valor más que i en 1 y realizar por cada un vez
menos por cada iteración del ciclo externo.
Línea
1
2
3
4
5
Total OE=
1.1.3.4.2.
OE
5(N-1)
5 (N-1)*(N-1)
3(N-1) *(N-1)
5(N-1) *(N-1)
3(N-1) *(N-1)
Segunda Forma
Este algoritmos es más ineficiente con respecto al anterior su explicación es la
siguiente la imagen de código exenten foranidados entonces se presenta la
siguiente situación el for el extremo se ejecuta
veces y le interno se
ejecutara (
Conteo de OE:
Línea
1
2
3
4
5
Total OE=
1.1.3.4.3.
OE
5N
5
4
7
4
Teoría vs Practica conteo OE
Datos De Entrada = 500
Método
Teoría
Primero
3,986,479
Segundo
4,982,515
Practica (Programa)
7 ut
13 ut
Conclusión: Si comparamos la teoría con la práctica al igual que el método de
búsqueda secuencial nos podemos apreciar que los resultados son totalmente
diferentes.
16. 16
Pero si vamos un poco más allá de la situación y comparamos los resultados
entre los dos métodos (primero y segundo) nos damos cuenta que tanto en
operaciones elementales como en tiempo de ejecución el método 1 es más
eficiente que el 2 con el mismo número de datos de entrada y solucionado el
mismo problema(transponer una matriz).
Mi observación: La opción de modificar el algoritmo original fue algo que me
nació desde un principio y pude notar que hacer ciertos cambios en las
operaciones de un algoritmo se ve reflejado en las operaciones elementales y
en tiempo de ejecución.
1.1.3.4.4.
Grafica Primer Método Vs Segundo Método
40
35
30
25
20
1r Metodo
15
2do Metodo
10
5
0
-5
0
200
400
600
800
1000
1200
Apreciando el comportamiento de las curvas notamos que representa al
segundo método tiene un crecimiento mayor en tiempo de ejecución con los el
mismo número de datos de entrada, probado en el mismo programa, el
mimos equipo y en situaciones muy parecidas al primer método.