Está en la página 1de 5

Hashing y Recursión dentro de Algoritmos

Pedro Luis Godoy Arellano


Análisis de Algoritmos
17-06-18
Preguntas y 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?


b) ¿Usaría un hash simple o uno encadenado?
c) ¿Cómo sería su función de hash?
d) ¿Cuánto demoraría una búsqueda en su estructura?

Respuestas:

a) Para esté caso, la clasificación mediante “hash” se sugiere que el array


que se usará sea uno de punteros hacia las listas enlazadas.

Posición Nombre
1 Terrestres Gato Perro
2 Acuáticos Búfalo Orca
3 Aéreos Cacatúa Tucán

b) En este caso se aprecia que hay una colisión, entonces se usará el


“hash encadenado” porque este consta de una solución a las colisiones
que pueden existir en las tablas de hash, estas “colisiones” se generan
cuando una función de hash retorna el valor para dos datos distintos,
para ordenarlos se debe ingresar el nuevo elemento después del ya
existente en la posición del hash.
c) El Hashing se compone de una función de hash, que es h(x), esta puede
ser definida de forma parcial, con la condición de debe utilizarse para la
construcción de todo el hash, ahora con el caso de los animales para
ordenarlos tomare en cuenta la segunda letra de cada nombre para
luego ubicarlos en orden alfabético.

Posición Nombre
0
1 Gato Cacatúa
2
3
4
5 Perro
6
7
8 Orca
9 Tucán Búfalo

d) Tomando en cuenta el ejemplo anterior, se puede observar que el


tiempo que tardaría en encontrar el elemento “Búfalo” es de O(1), pues
h(tiburón) = 9, el tiempo de encontrar al búfalo en la lista es de 2 (Tucán
y Búfalo) en la lista este corresponde a la posición 9 es 2, que es menor
que el conjunto de todos los nombres: 9(Gato, Cacatúa, Perro, Orca,
tucán y búfalo).

Entonces, se puede decir que el tiempo que tardará la búsqueda de un


elemento en un hash encadenado es de:

O(1) + O(k) con k < n


2. Escriba en pseudocódigo el algoritmo de búsqueda binaria de forma recursiva

int BinarySearch(int x, int v[], int tam) {

int RecursiveBinarySearch(int x, int v[], int i,


int m, int d) {
if (i>d) return -1;
else if ( x == v[m] ) return m;
else if ( x < v[m] ) return
RecursiveBinarySearch(x, v, i, (int)((i+m-1)/2), (m-1));
else return RecursiveBinarySearch(x, v, (m+1),
(int)((d+m+1)/2), d);
}
int i = 0;
int m = tam/2;
int d = tam;

return RecursiveBinarySearch(x, v, i, m, d);


Bibliografía:

- Contenidos de la semana 8, análisis de algoritmos.