Você está na página 1de 5

Hashing y Recursión dentro de Algoritmos

Rodrigo Aguilera Tapia

Análisis de Algoritmos

Instituto IACC

29 de Diciembre 2018
Desarrollo

PREGUNTAS:

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?

Hashing es una técnica de almacenamiento y de recuperación que utiliza una función para

identificar un conjunto de datos, esta función puede ser definida en una serie de caracteres con

una longitud fija. Para aplicar El hashing en este ejercicio propuesto lo definiremos con la cuarta

letra de cada conjunto de animales, de esta forma nuestra tabla queda de la siguiente forma:

Nombre Letra Posición


Acuáticos a 1
Terrestres r 18
Aéreos e 5

Almacenamiento en un arreglo

Posición Nombre
0
1 Acuáticos
2
3
4
5 Aéreos
6
…. ….
18 Terrestres

b) ¿Usaría un hash simple o uno encadenado?


Se utilizaría la técnica de hashing encadenado, ya que para almacenar todos los conjuntos de

datos relacionados necesitaremos más de un espacio el cual llamaremos listas enlazadas, esto

debido a que no podemos tener dos valores dentro de un espacio, esta técnica nos permitirá

resolver colisiones dentro de las tablas, están se producen cuando tenemos un mismo valor para

dos datos diferentes, para aplicar el resto de los datos debemos encolarlos después del dato que

ya existe, para aplicar esta técnica la definiremos aplicando los conjunto de animales

mencionados al comienzo.

Posición Nombre
0
1 Acuáticos Delfín Tortuga
2
3
4
5 Aéreos Colibrí Loro
6
…. ….
18 Terrestres Elefante León

c) ¿Cómo sería su función de hash?

La función hash es un algoritmo matemático que transforma un bloque arbitrario de datos en

una nueva serie de caracteres de longitud fija su valor de salida tendrá siempre la misma

longitud, según la tabla mencionada seleccionamos de forma arbitraria el cuarto carácter h(x)

d) ¿Cuánto demoraría una búsqueda en su estructura?

Según el ejemplo desarrollado la búsqueda según la estructura desarrollada se demoraría en

encontrar un elemento como el “León” que es O(1), por lo tanto h (León) = 18 y el tiempo en

encontrar a León en la lista es de 3 (Terrestres, Elefante y León), esto quiere decir que el largo

de la lista corresponde a la posición 18 es 3, lo que permite acortar los tiempo en comparación

con todos los nombre en la tabla. Si el promedio de hash demora 0(1) y su búsqueda secuencial
es O (k), donde k es un número mucho menor a n, podemos decir que el tiempo de búsqueda de

un elemento es O (1) + O (k) con k>n

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

El seudocódigo definido a continuación permite buscar un elemento x en un vector v de tamaño N el cual

ya se encuentra ordenado, esto permite entregar que cualquier subvector w de v tamaño también deberá

estar ordenado. El tamaño de N se va reduciendo a la mitad por cada llamada 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. }
Bibliografía

Contenido de la semana 8

http://web.fi.uba.ar/~ssantisi/works/hash/hash.pdf

https://foro.elhacker.net/programacion_cc/c_busqueda_binaria_recursiva-t374647.0.html

https://www.fdi.ucm.es/profesor/gmendez/docs/edi0910/_02-Recursion.pdf

http://artemisa.unicauca.edu.co/~nediaz/EDDI/cap02.htm

http://interactivepython.org/runestone/static/pythoned/SortSearch/LaBusquedaBinaria.html