Nuestro compañero David Vallejo nos ha proporcionado un enlace a una página donde podéis ver las principales estructuras de datos en versión "animada" http://www.cosc.canterbury.ac.nz/mukundan/dsal/appldsal.html, que siempre es más divertido que ver los dibujos en la pizarra...
Si encontráis alguno más que os guste, os agradeceríamos que nos lo hiciérais llegar y lo "colgamos".
martes, 28 de septiembre de 2010
jueves, 23 de septiembre de 2010
BIENVENIDOS!!!
... que diría Miguel Ríos, nuestro más auténtico rockero "Made in Spain".
En fin, mitos aparte, no vuelvo a Granada, sino a este ciberespacio desde el que continuaremos desvelando, mientras el cuerpo aguante, algunas curiosidades que nos puedan ser útiles para hacer más llevadero todo lo relacionado con las Estructuras de Datos y la Programación en Java.
De momento, os dejo el enlace a un blog que he encontrado muy curioso e interesante, La tecla de Escape, donde seguro que podéis encontrar cosas muy interesantes, como el artículo que tienen sobre Recursividad.
Claro, que una vez que entendéis como funciona la recursividad, seguro que lo que os cuesta trabajo es aprender a pensar de forma recursiva. Mi consejo es el siguiente: Imaginaos que la recursividad es la chistera del mago de la que saca todo lo que necesita. Entonces, pensar un programa recursivo consta de dos fases:
Primera: dar la solución para aquellos casos triviales (Caso base), que suelen darse para los casos de estructuras vacías o unitarias, o número de elementos 0 ó 1, etc.
Segunda: Suponed que, por arte de magia, vuestro problema se resuelve automáticamente cuando hacéis la llamada recursiva para una situación más sencilla que la que tenéis que solucionar. Ya sólo queda pensar en cómo conseguir la solución para vuestro problema global teniendo en cuenta la que habéis obtenido mágicamente.
Veámoslo con un ejemplo:
Supongamos que queremos invertir una palabra P. (INVERTIR (P))
Primero pensamos en el caso más sencillo: que la palabra P sea vacía. Entonces no hay que hacer nada, se devuelve P.
Otro caso sencillo: que la palabra P sólo tenga 1 letra. Tampoco hay que hacer nada porque la inversión es la misma, así que se devuelve también P.
Ya no veo más casos sencillos, así que voy a pensar entonces en el caso general. Me doy cuenta de que no sé invertir una palabra de N letras, pero mágicamente, la recursividad me devuelve la solución cuando la palabra es más pequeña, supongamos que cuando tiene N-1 letras. Supongamos para abreviar que llamo PLP a la primera letra de P y N-1LP a las N-1 letras siguientes de P. Así que P la puedo escribir así: PLP N-1LP.
INVERTIR (N-1LP) me devuelve la inversión de la palabra P exceptuando la primera letra. Por ejemplo, si P =abcdef, PLP=a y N-1LP=bcdef. Por tanto, INVERTIR(N-1LP)=fedcb.
¿Qué falta para conseguir la palabra completa invertida? Añadir PLP(=a) al final del resultado obtenido. ¡Ya lo tenemos! Resulta que para invertir una palabra de N letras recursivamente primero se hace la llamada recursiva con las N-1 siguientes a la primera y después añadimos al final de este resultado la primera letra que nos habíamos dejado.
Es decir, el algoritmo sería así:
Obtenemos la Palabra PI=INVERTIR(N-1LP)
Añadimos PLP al final de PI
Devolver PI
}
Espero que os resulte útil; al menos a mí lo de pensar en la magia me "ilusionó".
En fin, mitos aparte, no vuelvo a Granada, sino a este ciberespacio desde el que continuaremos desvelando, mientras el cuerpo aguante, algunas curiosidades que nos puedan ser útiles para hacer más llevadero todo lo relacionado con las Estructuras de Datos y la Programación en Java.
De momento, os dejo el enlace a un blog que he encontrado muy curioso e interesante, La tecla de Escape, donde seguro que podéis encontrar cosas muy interesantes, como el artículo que tienen sobre Recursividad.
Claro, que una vez que entendéis como funciona la recursividad, seguro que lo que os cuesta trabajo es aprender a pensar de forma recursiva. Mi consejo es el siguiente: Imaginaos que la recursividad es la chistera del mago de la que saca todo lo que necesita. Entonces, pensar un programa recursivo consta de dos fases:
Primera: dar la solución para aquellos casos triviales (Caso base), que suelen darse para los casos de estructuras vacías o unitarias, o número de elementos 0 ó 1, etc.
Segunda: Suponed que, por arte de magia, vuestro problema se resuelve automáticamente cuando hacéis la llamada recursiva para una situación más sencilla que la que tenéis que solucionar. Ya sólo queda pensar en cómo conseguir la solución para vuestro problema global teniendo en cuenta la que habéis obtenido mágicamente.
Veámoslo con un ejemplo:
Supongamos que queremos invertir una palabra P. (INVERTIR (P))
Primero pensamos en el caso más sencillo: que la palabra P sea vacía. Entonces no hay que hacer nada, se devuelve P.
Otro caso sencillo: que la palabra P sólo tenga 1 letra. Tampoco hay que hacer nada porque la inversión es la misma, así que se devuelve también P.
Ya no veo más casos sencillos, así que voy a pensar entonces en el caso general. Me doy cuenta de que no sé invertir una palabra de N letras, pero mágicamente, la recursividad me devuelve la solución cuando la palabra es más pequeña, supongamos que cuando tiene N-1 letras. Supongamos para abreviar que llamo PLP a la primera letra de P y N-1LP a las N-1 letras siguientes de P. Así que P la puedo escribir así: PLP N-1LP.
INVERTIR (N-1LP) me devuelve la inversión de la palabra P exceptuando la primera letra. Por ejemplo, si P =abcdef, PLP=a y N-1LP=bcdef. Por tanto, INVERTIR(N-1LP)=fedcb.
¿Qué falta para conseguir la palabra completa invertida? Añadir PLP(=a) al final del resultado obtenido. ¡Ya lo tenemos! Resulta que para invertir una palabra de N letras recursivamente primero se hace la llamada recursiva con las N-1 siguientes a la primera y después añadimos al final de este resultado la primera letra que nos habíamos dejado.
Es decir, el algoritmo sería así:
INVERTIR(Palabra P){
- Si P es vacía o sólo tiene una letra
- Si no
Obtenemos la Palabra PI=INVERTIR(N-1LP)
Añadimos PLP al final de PI
Devolver PI
}
Espero que os resulte útil; al menos a mí lo de pensar en la magia me "ilusionó".
Suscribirse a:
Comentarios (Atom)