Informe analisis de algoritmos (mitad de cuadrado)

653 views
526 views

Published on

Informe Análisis de algoritos

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
653
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Informe analisis de algoritmos (mitad de cuadrado)

  1. 1. 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
  2. 2. 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
  3. 3. 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”.
  4. 4. 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.
  5. 5. 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:
  6. 6. 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:
  7. 7. 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
  8. 8. 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).
  9. 9. 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.
  10. 10. 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.
  11. 11. 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
  12. 12. 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.
  13. 13. 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.
  14. 14. 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.

×