domingo, 25 de abril de 2010

ALGORITMO MERGESORT!



OBJETIVO:
El alumno sabrá el proceso que implica la función "mergesort" desde el principio hasta cuando devuelve un resultado.

PROCEDIMIENTO:
Se agrupan equipos de 3 o 5 personas para mayores oportunidades de investigacion, agrupan ideas sobre que fue lo que entendió cada uno, para asi llegar a una conclusión y poder exponer un trabajo.

MODO DE TRABAJO:
Nuestro equipo compuesto por mis compañeros Elias, Gonzalo, Juan y Yo desde el primer día nos pusimos de acuerdo para asignar el día en el que nos juntariamos para juntar la informacion, previamente buscada, y recopilar si faltaba. Entonces desde el primer día, me puse a buscar información, la mayoría de lo que encontraba era muy buena información ya que complementaba una a otra y asi podía entender mejor de que se trataba el tema, aparte de haber ido a las asesorias de la Doctora que me ayudaron bastante a tener el concepto principal sobre el algoritmo de Mergesort ("divide y vencerás"). El día en que nos juntamos compartimos la información recolectada y asignamos que nos tocará a cada quien tanto en la presentación como en el momento de exponer, propusé que me tocara el punto de explicar paso a paso, ya que en el proyecto anterior siento que me fue bien y asi poder sacar el mayor puntaje posible, mis compañeros estuvieron de acuerdo, y en ese momento antes de que empezara la clase comenzé a recopilar mas información para detallar y especificar lo que me había tocado, no encontre algo que me sirviera concretamente, pero si detalles, ese día me sentía algo desesperado; ya llegando a mi casa me sente frente a la computadora y comenze mi busquéda encontré cosas muy interesantes, complementando lo ya aprendido, lo cual los links estan en la presentacion y aqui tambien las pondre por si acaso.
Esta semana que paso, desde el jueves le dedicaba 2 hrs.al proyecto, hoy domingo dedique 3 hrs. para concretar todo, ya juntar todo, y dejarlo listo para presentar, ya que poseía la presentacion incompleta, con las partes ya elaboradas por mis demas compañeros, solo faltaba mi parte para concluir, realmente batallé para entender que hacia algunas lineas, no todas solo algunas, por ejemplo: donde venía la función malloc (sizeof_ int), investigando me di cuenta que es una funcion que reserva memoria, las cuales se utilizan en algoritmos que ocupen una memoria dinamica, esto quiere decir que cambien su tamaño.
Ahora me siento listo para explicarselo a la clase, espero me entiendan por que al momento de hacer mis instrucciones hasta yo me revolvía, pero trataré de explicarlo lo mejor posible.



domingo, 21 de marzo de 2010

FACTORIAL!











OBJETIVO:
El alumno deberá reconocer la diferencia entre un algoritmo recursivo y un algoritmo iterativo, aparte de elaborar uno de los dos.
PROCEDIMIENTO:
Se agrupan equipos de 3 o 5 personas para mayores oportunidades de investigacion, agrupan ideas sobre que fue lo que entendió cada uno, para asi llegar a una conclusión y poder exponer un trabajo.
MODO DE TRABAJO:
Nuestro equipo compuesto por mis compañeros Elias, Gonzalo y yo, empezamos a trabajar desde el primer día, buscando información y resolviendo dudas que teniamos sobre el formato del proyecto, Elias y yo, buscamos informacion en varias paginas web, las cuales pondremos en la bibliografía, ya reunida la informacion nos citamos un martes en el edificio 4, y empezamos a pensar en la manera de formular ambos algoritmos, hicimos el Iterativo, pues en Recursivo todavía teniamos duda de como manejarlo en la funcion "main", despues con Gonzalo me quede de ver en las asesorias de los martes, para resolver algunas dudas, ya con la informacion otorgada por la doctora, nos volvimos a citar un jueves para concretar lo que faltaba y ponernos de acuerdo en cuales iban a ser nuestros roles para exponer nuestro proyecto, pues ya que todos habiamos participado en la recopilacion de informacion y en la propuesta de ideas, decidimos que cada quien de un tema.

Ahora la explicacion del proyecto

A mi entendimiento, un algoritmo iterativo es aquel que se cicla, pero al momento de querer usarlo de nuevo, tenemos la trabajosa labor de volverlo a escribir.
He aqui la sintaxis de un algoritmo Iterativo para saber el factorial de "x" numero.

1.-Primero, por default sabemos que 0!=1 y que 1!=1, entonces declaramos nuestra variable "fac" dandole valor de 1.
2.-Le damos un valor a "n" por ejemplo 3, bueno ahora tenemos que n=3
3.-Se filtra "n" si n>1, pasa a resolver dicha operacion fac*=n, y a "n" se le resta 1.
4.-ahora fac=3 y n=2, y se cicla hasta que n=1.
5.-Luego ya imprime el resultado para finalizar.

Ahora un algoritmo Recursvio para el mismo problema.

A mi entendimiento un algoritmo recursivo, es aquel que su sintaxis aparece una vez dentro de nuestro programa, pero declarada como funcion, no como variable, entonces, como es una funcion podemos llamarla cuantas veces queramos dentro de nuestro programa.

1.-Primero formulamos nuestra función llamada "factorial (n)", y empezamos.
2.-Filtramos "n", con la sentencia n<2, si esto es cierto, entonces la funcion regresa 1, si es falso la funcion regresa la operacion ya indicada para el factorial.
3.-Ahora en nuestra funcion principal (main), declaramos "x".
4.-Luego le damos un valor, despues imprimimos pero en vez de mandar a llamar a un resultado previo, lo que hacemos es mandar a llamar a la funcion "factorial (n)" pero "n" lo sustituimos por "x" ya que es la variable la cual queremos saber el factorial.

FUENTE:
http://www.slideshare.net/demogorgon/algoritmos-recursivos
http://es.wikipedia.org/wiki/Algoritmo_recursivo
http://es.wikipedia.org/wiki/Algoritmo_iterativo

TIEMPO DE EJECUCIÓN:

Este programa corre a un tiempo polinominal, asi que su complejidad pasa a ser -p-

CONCLUSION:
Aprendimos a identificar en que casos aplicar recursion e iteratividad, que diferencias tienen, cuales son sus ventajas y desventajas, etc.

BLOGS DE MIS COMPAÑEROS:
http://elias1218.mibitacora.com
http://gonzalomarroquinrdz.blogspot.com

**LA PRESENTACION EN POWER POINT, no estaba seguro si subirla aqui o solo exponerla en clase el martes 23 de marzo**