Вы находитесь на странице: 1из 5

Control semana N°8

Cristian Alejandro Lagos Malla

Análisis de Algoritmos

Instituto IACC

15 – 03 - 2018
DESARROLLO

PREGUNTAS:

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?

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

1.-

A) Para la clasificación dentro de un hash, se propone que el array donde guardemos la


información sea un array de punteros hacia listas enlazadas.

Posición Nombre
1 terrestres Perro Guepardo
2 acuáticos Tilapia Tiburón
3 Aéreos Águila Aguilucho

B) En este caso, y según las condiciones planteadas, se usaría un hash encadenado, dado que este
corresponde a una de las técnicas existentes para la solución de las colisiones dentro de las tablas de
hash. Estas colisiones se producen cuando la función de hash retorna el mismo valor para dos datos
distintos. Cuando esto pasa y se está utilizando un hash encadenado, el nuevo elemento se encola
después del elemento que ya existe en la posición del hash.

Esta técnica, si bien es cierto que aumenta la complejidad en la búsqueda de elementos, incluso

esa complejidad sigue siendo menor que almacenar todos los elementos en una lista enlazada: si

el peor caso de búsqueda de un elemento en un conjunto desordenado de tamaño n hace que

demore O(n), para que un hash encadenado demore lo mismo, la función de hash debiera

retornar siempre el mismo índice, lo cual violaría la regla de las funciones de hash que dice que

los elementos deben estar uniformemente distribuidos dentro del conjunto.

C) El hashing consta de una función de hash, llamada h(x), que puede ser definida de forma

arbitraria, pero debe utilizarse la misma para la construcción de todo el hash. Para el problema

señalado se tomará la segunda letra del nombre y se pondrá en la posición que le corresponde

del alfabeto.

Posición Nombre
0
1
2
3
4
5 Perro Guepardo
6
7 Águila Aguilucho
8
9 Tilapia Tiburón
D)Un caso promedio de hash encadenado siempre es el cálculo de la función de hash para

ubicarse en la lista correcta, que demora O(1) más el caso que el elemento buscado sea el último

de la lista para ese espacio del hash. Como es búsqueda secuencial, esto demoraría O(k), donde

k es un número mucho menor a n, ya que el conjunto de los elementos de la lista es un

subconjunto del conjunto de elementos totales.

Para el ejemplo anterior, esto se traduce en que el tiempo en encontrar el elemento “Tiburón”

es O(1), pues h(Tiburón) = 9 y el tiempo de encontrar a tiburón en la lista es 2 (Tilapia y Tiburón).

El largo de la lista que corresponde a la posición 9 es 2, lo que es mucho menor que el conjunto

de todos los nombres: 9 (Perro, Guepardo, Águila, Aguilucho, Tilapia y Tiburón).

Finalmente, se puede decir que el tiempo de búsqueda de un elemento en un hash encadenado

es:

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

2.-

Para realizar un pseudocodigo de algoritmo de busqueda binaria de forma recursiva, es necesario


saber que este algoritmo debe adoptar la forma en que misma función vaya
reduciendo el tamaño (N) del problema a un caso base, de tal manera, al
conocer la solución del caso base, va a poder dar solución a cualquier
problema de tamaño N.

El pseudocódigo sería;

 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);

REFERENCIAS BIBLIOGRÁFICAS

ACC (2016). Hashing y recursión dentro de algoritmos. Análisis de Algoritmos. Semana 8.

Вам также может понравиться