You are on page 1of 5

Hashing y Recursion dentro del Algoritmo

Felipe Eduardo Faundez Aguilar

Analisis de Algoritmo

Instituto IACC

21 de diciembre de 2018
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

encadenado el nuevo valor se ubica posteriormente o se encola después del elemento ya

existente en esa posición.


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

1 Gato Rata

7 Águila

9 Piraña Tiburón

22 tucan
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 BinarySearch(int x, int v[], int tam) {


2.
3. int RecursiveBinarySearch(int x, int v[], int i, int m, int d) {
4. if (i>d) return -1;
5. else if ( x == v[m] ) return m;
6. else if ( x < v[m] ) return RecursiveBinarySearch(x, v, i, (int)((i+m-
1)/2), (m-1));
7. else return RecursiveBinarySearch(x, v, (m+1), (int)((d+m+1)/2), d);
8. }
9.
10. int i = 0;
11. int m = tam/2;
12. int d = tam;
13.
14. return RecursiveBinarySearch(x, v, i, m, d);
15.
16. }

You might also like