Lab2

Parte I (100 puntos)

  • (30 puntos) Fibonacci:
    1. Desarrolle programas iterativos que calculen el n termino de la la serie de Fibonacci en Java y C-C++, usando todos los tipos de variables enteras disponibles en cada lenguaje, y determine para tipo para que valor de n se produce un overflow.
    2. Desarrolle un programasiterativo que calculen el n termino de la la serie de Fibonacci en Python que retorne el tiempo de ejecución y use mathplotlib y utilícelos para gráficar el tiempo de ejecución en función de n. Publique el código y los resultados en Quantopian y Github como Ipython notebook.
  • (40 puntos) Insertion Sort: Desarrolle programas en Python que ejecuten Insertion Sort sobre todas permutaciones que generen la distribución y el numero promedio de (4 casos):
    1. numero instrucciones (lineas),
    2. numero de comparaciones,
    3. numero de intercambios y
    4. numero de preguntas en el while.

Para cada caso haga dos versiones una usando permutations de Itertools y determinando hasta que valor puede generar las permutaciones en memoria y otra version usando el codigo recursivo de Daniel Jimenez para generar todas las permutaciones (8 Programas). Se puede basar en el código Java de los Applets InsertSortTimePlot, InsertSortCompPlot y InsertSortWhileQuestionsPlot y en código Python para InsertionSort del IPython notebook: corrección y análisis de algoritmos y el codigo insertionsort.py. Publique el código y los resultados en Github como Ipython notebooks.

Parte II (100 puntos)

  • (40 puntos) Hacker Rank: Solucione 10 problemas básicos de practica de Python en www.hackerrank.com -> Practice -> Python (al menos uno usando numpy y otro que use itertools)
  • (60 puntos) Hacker Earth: Solucione un problema de Bubble Sort y dos problemas Insertion Sort en Python en www.hackerearth.com -> Practice -> Algorithms -> Sorting