RECURSIVIDAD Y TABLAHASH
TablaHash
Java nos la ofrece de manera gratuita, solo tenemos que hacer uso de ellos. Como sabemos una tabla nos sirve para introducir o sacar objetos.
Un punto muy importante es el comentario que Alberto planteó en clase. ¿De todas las estructuras de datos vistos en clase (arrays, listas, pilas, colas y tablahash) en cuál cuesta menos encontrar un objeto?
Arrays.- En algún momento tendré que recorrer el array, Si está vacío tardaré menos en encontrar una posición y si está lleno a menos que no utilice una variable que me vaya indicando la posición actual en la que me encuentro tardaría más. Por tanto el tiempo que tarde en encontrar a una persona (hemos supuesto el ejemplo de una agenda) será : n/2 -> tiempo promedio, ya que en el mejor de los casos, si está al principio no tardaré tanto, y en el peor de los casos si está al final ‘n’. En resumen en insertar a una persona utilizando arrays tradaré una constante y en encontrarla n/2. Tengo un desperdicio de memoria.
Lista.- Igual que los arrays en un determinado momento tendré que recorrer el array. Tardaré en insertar una persona a la agenda una constante y en encontrar (n+1)/2 = n/2 cuando tendo varias personas.
Cola .- No depende de lo que se tenga anterior, recordar que para estos algoritmos el api nos ofrece unos métodos (peek,enqueue,dequeue) qu enos faciltian el trabajo. En insertar una persona tardaré una constante y en encontrarlo tardaré ‘n’ ya que para una cola primero los introduzco y luego tendré que hacer uso de una temp para volverlos a recorrer y encontrar lo que buscamos. Caso muy similar para la Pila. Por lo que en términos de eficiencia temporal no es muy aconsejable utilizar pilas y colas.
TablaHash.- En encontrar una persona una constante y en buscarla también una constante, ya que No tiene en cuenta lo que anteriormente esté insertado y a cada nuevo objeto le voy asignando un número. Una tablahash hace uso también de listas enlazadas de una o dos que subdividen en otros nuevos grupos. Por ejemplo en el caso de listas si tenemos más nombre con la misma letra, luego mediante una nueva lista(sublista) los subdivide en nuevos grupos por ejemplo masculino y femenimo , por lo que la búsqueda se acorta. Haciendo un ejemplo, si se desea encontrar a una persona que se llame Isabel iré al número asiganado para las ‘I’ y luego tardaré el tiempo que esté en la lista enlazada n/2 que como será grupos de 1 0 2 listas no se tendrá en cuenta ->constante. No útil para agendas de teléfono móvil.
Ya en desarrolo de la práctica:
Ejercicio 2 :
Está parte hay que entender RECURSIVIDAD , que son métodos que se llaman a sí mismo hasta terminar. No era complicado excepto la parte de fibonacci que nos costó un poco más; pero con ayuda de compañeros nos aclararon las dudas.
Realmente es complicado de explicarlo pero si hacemos uso de un ejemplo se facilita:
Empezamos pasando como parámetro el 10 como la fórmula de fibonacci nos dice que es fibonacci(n-1) + fibonacci(n-2), lo que se trata es de llamar dos veces al mismo método en la primera llamada tendré fibonacci (9)+fibonacci( 8 ) y estas a su vez vuelven a llamar a su fibonnacci respectivo es decir que fibonacci (9) llama a fibonacci ( 8 )+fibonacci( 7 ) y así voy creeando un arból hasta llegar a 1, luego debo sumar todos los resultados. Esperamos que la explicación haya sido un poco clara :S
Ejercicio 1 :
Buscamos en el api TableHas y encontramos dos métodos que nos facilitan el trabajo. Put y get
put(K clave, V valor) en la práctica ht.put(“vidInf”, “Vidas infinitas”);