Hashing y Recursion dentro del Algoritmo Felipe Eduardo Faundez Aguilar Analisis de Algoritmo Instituto IACC 21 de diciembre de 2018
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Desarrollo 1.- Suponga que tiene un conjunto de animales, donde estos se distribuyen uniformemente entre animales acuáticos, animales terrestres y animales aéreos (con la misma cantidad de animales de cada tipo): A. ¿Cómo se clasificarían dentro de un hash? Para poder desarrollar este problema en particular para la clasificación por hash se sugiere y propone la utilización de un array para guardar la información, este arriar será de punteros hacia listas enlazadas. Posicion
Tipo
Nombre
1
Terrestre
Gato
Rata
2
acuaticos
Piraña
Tiburón
3
aereos
Aguila
tucan
B. ¿Usaria un hash simple o uno encadenado? Bueno para el caso planteado en este control, la mejor opción de hash es la de encadenado, ya que este corresponde a una de las técnicas existenes para la solución de colisiones dentro de las tablas hash. Hablamos de una colision cuando la funcion hash nos retorna un mismo valor para dos datos diferentes. Cuando sucede este tipo de incoveniente y estamos utilizando un hash
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Con este tipo de hash encadenado aumenta la complejidad de la búsqueda de elementos, pero aun asi sigue siendo menor en la complejidad que almacenar todos los elementos en una lista enlazada.
C. ¿Cómo seria su funcion hash? Bueno el hashing de este problema contara con una funcion has de h(x), la cual será definida de forma albitraria y será utilizada esta funcion para la construcción el total de la tabla hash. Para poder desarrollar este problema de la mejor manera tomara en consideración la segunda letra del nombre del animal para de esta forma ordenar y posicionar alfabéticamente el animal. Posicion
Nombre
0 1
Gato
2 3 4 5 6 7 8
Águila
Rata
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
D. ¿Cuánto demoraría una búsqueda en su estructura? En un caso promedio de hash encadenado siempre el calculo de la funcion para ubicar el dato en la lista correcta demora O(1) mas el caso que el elemento buscado sea el ultimo de la lista para ese espacio hash, como es una búsqueda secuencial esto demorara O(k), en el cual k es un numero menor a N, donde el conjunto de los elementos de la lista es un subconjunto del conjunto de elementos totales. Para este problema , lo anteriormente mencionado se traducen que el tiempo en encontrar el elemento Tiburon es de O(1), ya que h(Tiburon)= 9 y el tiempo de encontrar el elemento Tiburon en nuestra lista es de dos (Piraña y Tiburon). La funcion de esta estrategia de búsqueda seria la siguiente: O(1) + O(k) con k < n.
2.- Escriba en Pseudocodigo el algoritmo de búsqueda binaria de forma recursiva.
1. int int BinarySearch BinarySearch( (int int x x, , int int v v[] [], , int int tam tam) ) { 2. 3.
int RecursiveBinarySearch int RecursiveBinarySearch( (int int x x, , int int v v[] [], , int int i i, , int int m m, , int int d d) ) {
4.
if (i>d) return -1;
5.
else if ( x == == v v[ [m] ) return return m m; ;
6.
else if ( x < v[ v[m] ) return return RecursiveBinarySearch RecursiveBinarySearch( (x, v, v, i, i, (int int)(( )((i i+m1)/2), (m-1)) )); ;
7. 8.
else return return RecursiveBinarySearch RecursiveBinarySearch( (x, v, v, (m+1), (int int)(( )((d d+m+1)/2), d) d); }
9. 10.
int i int i = 0;
11.
int m int m = tam/ tam/2;
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.