Informe analisis de algoritmos (mitad de cuadrado)

14
INGENIERIA EN INFORMATICA Análisis de algoritmos Mitad del cuadrado Asignatura: Análisis de algoritmos Integrantes: Eduardo Leiva Jonathan García Sergio Ormeño Docente: Pilar Pardo H. Fecha: 16/04/2014

Transcript of Informe analisis de algoritmos (mitad de cuadrado)

Page 1: Informe analisis de algoritmos (mitad de cuadrado)

INGENIERIA EN INFORMATICA

Análisis de algoritmos Mitad del cuadrado

Asignatura: Análisis de algoritmos

Integrantes: Eduardo Leiva

Jonathan García

Sergio Ormeño

Docente: Pilar Pardo H.

Fecha: 16/04/2014

Page 2: Informe analisis de algoritmos (mitad de cuadrado)

1

Contenido

Introducción ................................................................................................................................. 2

Algoritmos de Búsqueda ........................................................................................................... 3

Búsqueda Binaria: ...................................................................................................................... 3

Búsqueda Lineal: ........................................................................................................................ 3

Hashing ........................................................................................................................................ 3

Truncamiento: ............................................................................................................................. 4

Plegamiento: ............................................................................................................................... 5

Aritmética Modular: .................................................................................................................... 5

Mitad del Cuadrado: ................................................................................................................... 6

Caso Promedio ........................................................................................................................... 7

Peor Caso .................................................................................................................................... 7

Tratamiento de colisiones: ........................................................................................................ 8

Sondeo lineal............................................................................................................................... 8

Doble hashing ............................................................................................................................. 9

Encadenamiento de sinónimos ................................................................................................ 9

Direccionamiento por cubetas ................................................................................................ 10

Cuadro comparativo de los métodos de búsqueda de un algoritmo ................................ 10

Ventajas y Desventajas del Hashing ..................................................................................... 11

Comportamiento de un Algoritmo .......................................................................................... 11

Ventajas y desventajas de los algoritmos ............................................................................ 11

Conclusión ................................................................................................................................. 13

Page 3: Informe analisis de algoritmos (mitad de cuadrado)

2

Introducción

Los algoritmos son preciados procesos que nos hacen en si la vida un poco más

ordenada a nivel de los que somos programadores o estamos inmersos en el mundo

de la informática, claro está, existen los creadores de los algoritmos y aquellos que

gozan del uso de estos en diferentes casos, La ciencia de un algoritmo en si es

simplificar un problema en base a un conjunto de pasos que nos permitan resolver

algo o satisfacer una necesidad. Pero, ¿cuantos tipos de algoritmos existen? ¿Solo

nos limita a una cosa a la vez? ¿Cómo es que logran resolver algo de manera

eficiente? ¿Que utilizan para su funcionamiento? Interrogantes como estas serán

evaluadas dentro de este informe, en donde se detallara en base a conocimientos

previos adquiridos en clases la temática de los algoritmos de Búsqueda, en este caso,

repasando la mayoría de los más usados actualmente, los de más demanda, pero en

si dejándonos un poco más de explicación sobre el tema algoritmo que nos convoca,

“Mitad de Cuadrado” o “función cuadrática”.

Page 4: Informe analisis de algoritmos (mitad de cuadrado)

3

Algoritmos de Búsqueda

¿Qué es una Búsqueda a nivel de análisis de algoritmos?

Es una operación que busca un elemento X entre un conjunto de estos almacenados

ya sea de manera digital o simplemente de manera manual.

Búsqueda Binaria:

Para utilizar la búsqueda binaria debemos tener la lista previamente ordenada de acuerdo al valor de la clave y conocer el número total de registros. La búsqueda binaria reduce el tiempo de búsqueda considerablemente ya que disminuye las iteraciones.

Está altamente recomendado para buscar en listas de gran tamaño. Por ejemplo, en uno conteniendo 50.000.000 elementos, realiza como máximo 26 comparaciones (en el peor de los casos). Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera de la lista, si el valor de éste es mayor que el del elemento buscado se repite el procedimiento en la parte de la lista que va desde el inicio hasta el elemento tomado, en caso contrario se toma la parte de la lista que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez más pequeños, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este último entonces se deduce que el elemento buscado no se encuentra en toda la lista.

Búsqueda Lineal:

La búsqueda secuencial se utiliza normalmente cuando la lista no está ordenada o no

se puede ordenar previamente. Consiste en buscar el elemento llamado clave

comparándolo con cada elemento de la lista (vector) hasta encontrarlo, o hasta que se

llegue al final.

Hashing

¿Qué es Hashing?

Esta es una función que consiste en transformar claves numéricas o alfanuméricas en

direcciones o índices de un vector. No es necesario que los elementos de la clave

estén ordenados para poder realizar este tipo de búsqueda. Existen más, pero se

contemplaran en este informe 4 métodos de transformación de claves que aún siguen

en uso: Truncamiento, plegamiento, aritmética modular y mitad del cuadrado.

Page 5: Informe analisis de algoritmos (mitad de cuadrado)

4

Haciendo un poco de historia, el término de hash (apodado Hashing un tiempo más

tarde) proviene de una analogía que cuyo significado en ingles de dicha palabra se

aplica al mundo real como el “picar y mesclar”. Donal Knuth afirma que H.P Luhn

(empleado de IBM) fue el primero en utilizar el concepto en un memorándum fechado

en enero de 1953, aun así se desconoce de su uso hasta 10 años después cuando se

hizo masivo mediante un algoritmo creado y apodado SHA-1, este algoritmo se

basaba en una función de división que tomaba palabras y las dividía usando funciones

matemáticas seleccionadas especialmente para el lenguaje que interpretaba y tomaba

por entrada.

Truncamiento:

En este método se ignora parte de la clave y se deja la parte restante como índice.

Ejemplos:

Page 6: Informe analisis de algoritmos (mitad de cuadrado)

5

Plegamiento:

El plegamiento en si se puede definir en base a dos puntos importantes:

o Se encarga de crear una partición de la clave en diferentes partes y

combinarlas.

o Todas las partes, a excepción de la última, deben tener el mismo número de

dígitos que el tamaño del vector.

Ejemplos:

Aritmética Modular:

Este método convierte la clave en un número entero, se divide por el tamaño del rango del índice y toma el resto como resultado. La función que se utiliza es el MOD (módulo o resto de la división entera).

Fórmula: H(x)= x MOD m

Ejemplos:

Page 7: Informe analisis de algoritmos (mitad de cuadrado)

6

Mitad del Cuadrado:

El Método del Cuadrado Medio de von Neumann consistía en el uso de un algoritmo

en el cual al inicio se introduce un número cualquiera conformado por 10 dígitos, luego

se calcula el cuadrado de ese número inicial, a continuación se toman exactamente los

10 dígitos ubicados en la mitad del número resultante, y ese número conformado por

los 10 dígitos se toma como un nuevo número aleatorio que sirve para engrosar la

secuencia aleatoria generada, al cual posteriormente se le puede aplicar de nuevo el

algoritmo del cuadrado medio para así obtener sucesivamente más números

aleatorios.

El esquema de funcionamiento del algoritmo del Método del Cuadrado Medio

propuesto por John von Neumann es el siguiente:

Es decir en esta técnica, la llave es elevada al cuadrado, después algunos dígitos

específicos se extraen de la mitad del resultado para constituir la dirección relativa. Si

se desea una dirección de n dígitos, entonces los dígitos se truncan en ambos

extremos de la llave elevada al cuadrado, tomando n dígitos intermedios. Las mismas

posiciones de n dígitos deben extraerse para cada llave.

El tamaño de los dígitos a escoger seria n

Page 8: Informe analisis de algoritmos (mitad de cuadrado)

7

En el caso que la cifra resultante sea par:

Los números centrales del resultado corresponden a la dirección.

En caso de que la cifra sea impar:

Se toma el dígito central y el anterior a ese dígito.

Ejemplos:

Lo que cabe señalar que el tamaño del vector no afecta directamente a la aplicación

del método, pero afecta al tiempo de ejecución de la búsqueda. Produciendo que se

ocupe más espacio en memoria.

Caso Promedio: que el vector este con su índice vacío, así mismo que el método

otorge una clave con una posición que se encuentre desocupada para así seguir

llenando sin problemas ni colisiones.

Peor Caso: que el índice (inicio) y la cola (final) estén ocupadas, que no se encuentre

una posición de acuerdo a la clave obtenida y que el algoritmo se caiga, crashee o

simplemente ocupe recursos al generar un loop infinito (dado que no habrá respuesta).

Page 9: Informe analisis de algoritmos (mitad de cuadrado)

8

Tratamiento de colisiones:

Algunas de las funciones hash presentan colisiones, es por eso que se debe saber

qué hacer cuando a dos elementos diferentes les corresponde el mismo índice.

¿Qué es una colisión?

Es cuando la función hash obtiene una misma dirección para dos claves diferentes.

Al presentarse una colisión se requiere realizar un proceso adicional con el fin de

encontrar una posición para la clave, cuando la función hash logra evitar que se

produzcan colisiones se denomina Hashing perfecto.

Para el tratamiento de colisiones existen 2 métodos:

- Direccionamiento abierto:

Se encuentra entre dirección de origen para K2 dentro del archivo.

- Separación de desborde (Área de desborde):

Se encuentra una dirección para K2 fuera del área principal del archivo, en un

área especial de desborde, que es utilizada exclusivamente para almacenar

registro que no pueden ser asignados en su dirección de origen

Sondeo lineal

Es una técnica de direccionamiento abierto. Este es un proceso de búsqueda

secuencial desde la dirección de origen para encontrar la siguiente localidad, también

conocida como método de desbordamiento consecutivo.

Para almacenar un registro por Hashing con sondeo lineal, la dirección no debe caer

fuera del límite del archivo. En lugar de terminar cuando el límite del espacio de

dirección se alcanza, se regresa al inicio del espacio y sondeamos desde ahí. Por lo

que debe ser posible detectar si la dirección base ha sido encontrada de nuevo, lo cual

indica que el archivo está lleno y no hay espacio para la llave.

Page 10: Informe analisis de algoritmos (mitad de cuadrado)

9

Para la búsqueda de un registro por Hashing con sondeo lineal, los valores de llave de

los registros encontrados en la dirección de origen, y en las direcciones alcanzadas

con el sondeo lineal, deberá compararse con el valor de la llave buscada, para

determinar si el registro objetivo ha sido localizado o no.

Doble Hashing

En esta técnica se aplica una segunda función hash para combinar la llave original con

el resultado del primer hash. El resultado del segundo hash puede situarse dentro del

mismo archivo o en un archivo de sobre flujo independiente; de cualquier modo, será

necesario algún método de solución si ocurren colisiones durante el segundo hash.

La ventaja del método de separación de desborde es que reduce la situación de una

doble colisión, la cual puede ocurrir con el método de direccionamiento abierto, en el

cual un registro que no está almacenado en su dirección de origen desplazará a otro

registro, el que después buscará su dirección de origen. Esto puede evitarse con

direccionamiento abierto, simplemente moviendo el registro extraño a otra localidad y

almacenando al nuevo registro en la dirección de origen ahora vacía.

Puede ser aplicado como cualquier direccionamiento abierto o técnica de separación

de desborde.

Para ambas métodos para la solución de colisiones existen técnicas para mejorar su

desempeño como:

Encadenamiento de sinónimos

Una buena manera de mejorar la eficiencia de un archivo que utiliza el cálculo de

direcciones, sin directorio auxiliar para guiar la recuperación de registros, es el

encadenamiento de sinónimos.

Mantener una lista ligada de registros, con la misma dirección de origen, no reduce el

número de colisiones, pero reduce los tiempos de acceso para recuperar los registros

que no se encuentran en su localidad de origen. El encadenamiento de sinónimos

puede emplearse con cualquier técnica de solución de colisiones.

Cuando un registro debe ser recuperado del archivo, sólo los sinónimos de la llave

objetivo son accesados.

Page 11: Informe analisis de algoritmos (mitad de cuadrado)

10

Direccionamiento por cubetas

Otro enfoque para resolver el problema de las colisiones es asignar bloques de

espacio (cubetas), que pueden acomodar ocurrencias múltiples de registros, en lugar

de asignar celdas individuales a registros. Cuando una cubeta es desbordada, alguna

nueva localización deberá ser encontrada para el registro. Los métodos para el

problema de sobrecupo son básicamente los mismos que los métodos para resolver

colisiones.

Cuadro comparativo de los métodos de búsqueda de un algoritmo

Page 12: Informe analisis de algoritmos (mitad de cuadrado)

11

Ventajas y Desventajas del Hashing

Ventajas:

o Se pueden usar los valores naturales de la llave, puesto que se traducen

internamente a direcciones fáciles de localizar

o Se logra independencia lógica y física, debido a que los valores de las llaves

son independientes del espacio de direcciones

o No se requiere almacenamiento adicional para los índices

Desventajas:

o No pueden usarse registros de longitud variable

o El archivo no está clasificado

o No se permiten claves repetidas

o Solo se permite acceso por una sola llave

Comportamiento de un Algoritmo

Caso Peor: mayor número posible de instrucciones ejecutadas por el algoritmo. Caso Mejor: menor número posible de instrucciones ejecutadas por el algoritmo. Caso Medio o promedio: número de instrucciones igual a la cantidad de instrucciones ejecutadas por el algoritmo.

Ventajas y desventajas de los algoritmos

Los algoritmos son la esencia de la informática, son uno de los centros de interés de muchas, si no todas, de las áreas del campo de la informática.

o Puedes trabajar en orden. o Te redacta en orden paso a paso lo que hay que hacer. o Ayuda a resolver más fácil y rápido los problemas. o Disminuye sensiblemente el riesgo de errores. o Favorece el obtener el máximo de información.

Page 13: Informe analisis de algoritmos (mitad de cuadrado)

12

Desventajas de un algoritmo:

o Hay textos que desarrollan los algoritmos, mediante diversos tipos de

programas, por ejemplo: el lenguaje de programación C++, pero para comprender las letras deben poseer al menos un año de experiencia en ese lenguaje de programación de alto y bajo nivel.

o Muchos algoritmos interesantes llevan implícitos complicados métodos de

organización de los datos utilizados en el calendo.

o Con frecuencia sucede que muchos de los algoritmos que se van a utilizar son

fáciles de implementan una vez que se ha descompuesto el programa, sin embargo, en la mayor parte de los casos, existen unos pocos algoritmos cuya elección es crítica porque su ejecución ocupara la mayoría de los recursos del sistema.

o La elección del mayor algoritmo para una tarea particular puede ser un proceso

muy complicado y con frecuencia conllevara un análisis matemático sofisticado.

o Actualmente se está estudiando en la informática, como seleccionar el

algoritmo que conduzca a la mejor implementación pues para la mayoría de los problemas existen varios algoritmos diferentes.

Page 14: Informe analisis de algoritmos (mitad de cuadrado)

13

Conclusión

Se han analizado las técnicas o métodos más utilizados en el ámbito de

posicionamiento, búsqueda y transformación de claves en relación a vectores, dado

esto se puede inferir a que cada método tiene su propio modo de operar en base a

algoritmos que dependiendo de lo que hagan nos brindaran una respuesta más rápida

y eficiente a lo que buscamos, según sea el topo dato alfanumérico o carácter a

posicionar o buscar, esto nos lleva a nuestro tema, “mitad de cuadrado” o “función

cuadrática” un método de transformación derivado como un sub método del Hashing el

cual nos ayuda a posicionar dentro de un arreglo vector o matriz una clave que según

sea la posición ira donde calce, dado esto, los métodos se complementan entre otros,

pero se concluye que todos son dependientes en su mayoría del truncamiento al

momento de querer enfrentar colisiones según sea el tamaño del vector y de la clave a

posicionar, búsqueda lineal y binaria solo dan con un número que se desee, entra en

el ámbito búsqueda, por lo tanto se diferencian del Hashing puesto que es un método

de transformación y a nuestro entender, el que entra primero en acción es el Hashing

para luego tener algo que buscar.