análisis de algoritmos - cimatalram/analisis_algo/clase0.pdf · • análisis probabilístico de...
TRANSCRIPT
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Análisis de AlgoritmosCOMP-420
Dra. Claudia Esteves JaramilloDr. Alonso Ramirez ManzanaresDr. Johan Van Horebeek
Depto. de MatemáticasUniv. de Guanajuato
e-mail: [email protected]: http://www.cimat.mx/~alram/comp_algo/
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Breve descripción
• Es un curso dirigido tanto a matemáticos como a computólogos con un interés no solamente en aprender a diseñar algoritmos para resolver problemas fundamentales en Ciencias de la Computación sino también en analizar su comportamiento y complejidad.
• El curso sirvirá al mismo tiempo como una aplicación de temas vistos en las materias de matemáticas al área de Ciencias de la Computación.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Objetivos del curso
• Avanzar en los conceptos de algoritmo y el diseño de los mismos.
• Caracterizar la complejidad de los algoritmos, incluso en casos donde esta depende de la entrada o de decisiones aleatorias que se lleven acabo en la ejecución.
• Tener una biblioteca de algoritmos clásicos que sirvan como punto de partida en el diseño de nuevos algoritmos para problemas específicos.
• Al final del curso que sean capaces de resolver problemas e implementarlos en una computadora utilizando un lenguaje de alto nivel. (C++)
• Entender el desempeño de un algoritmo y determinar las estructuras de datos adecuadas para su implementación.
2
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Pre-requisitos
• Conocimientos de programación en C, C++.
• El curso de Computación y Algoritmos (estructuras de datos)
• Principios básicos de programación orientada a objetos
• Conocimientos de probabilidad, su primer curso y lo que vean en el segundo.
3
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Clases
• Las clases son los martes y jueves de 9:30 a 10:50
• Practicas con ayudante XX [email protected]
• Las notas de las clases al igual que las tareas se podrán bajar en el sitio web: http://www.cimat.mx/~alram/analisis_algo/
4
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Políticas de evaluación
• Calificaciones
• 3 exámenes parciales - 50%
• Proyecto Final - 25%
• Tareas - 25%, ¡ tarea no entregada no vale !, pero hay calificaciones parciales por trabajo parcial)
5
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Temario
• Calculo de complejidad y revisión breve notación asintótica
• Resolución de ecuaciones de diferencias caso lineal y caso general
• El teorema Master;
• Estratégias de diseño de algoritmos
• Backtracking e Introducción a Teoría de Gráficas
• Representación de Gráficas y Recorridos Genéricos
• Recorridos en Profundidad (DFS) y Amplitud (BFS)
• Árboles Mínimos Generadores (MST)
• Algoritmo de Kruskal6
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Temario
• Calculo de complejidad y revisión breve notación asintótica
• Resolución de ecuaciones de diferencias caso lineal y caso general
• El teorema Master;
• Estratégias de diseño de algoritmos
• Backtracking e Introducción a Teoría de Gráficas
• Representación de Gráficas y Recorridos Genéricos
• Recorridos en Profundidad (DFS) y Amplitud (BFS)
• Árboles Mínimos Generadores (MST)
• Algoritmo de Kruskal6
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Temario
• Algoritmo de Prim y Caminos más cortos
• Algoritmos de Flujos: definiciones
• Algoritmos de flujos: Ford-Fulkerson
• Introducción a Processing
• Análisis probabilístico de complejidad y ejemplos
• Introducción a informatión retrieval y búsquedas en textos
• Arboles sufijos, Algoritmo Ukkonen, Algoritmo Knuth-Morris-Pratt, fingerprinting
• Algoritmos aleatorizados
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Temario
• Algoritmo de Prim y Caminos más cortos
• Algoritmos de Flujos: definiciones
• Algoritmos de flujos: Ford-Fulkerson
• Introducción a Processing
• Análisis probabilístico de complejidad y ejemplos
• Introducción a informatión retrieval y búsquedas en textos
• Arboles sufijos, Algoritmo Ukkonen, Algoritmo Knuth-Morris-Pratt, fingerprinting
• Algoritmos aleatorizados
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Temario
• Algoritmo de Prim y Caminos más cortos
• Algoritmos de Flujos: definiciones
• Algoritmos de flujos: Ford-Fulkerson
• Introducción a Processing
• Análisis probabilístico de complejidad y ejemplos
• Introducción a informatión retrieval y búsquedas en textos
• Arboles sufijos, Algoritmo Ukkonen, Algoritmo Knuth-Morris-Pratt, fingerprinting
• Algoritmos aleatorizados
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Temario
• Algoritmos de Moore y Dijkstra (caminos cortos)
• Algoritmo A* y Algoritmo de Floyd-Warshall
• Convex Hull
• Intersección de Segmentos de Recta
• Problema de la Galería de Arte - Triangulación de Polígonos
• Diagramas de Voronoi
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Referencias• Introduction to Algorithms. Cormen T.H., Leiserson, C.E., Rivest R.L. and
Stein, C. The MIT Press (puesto en reserva)• Algorithm Design. Kleinberg J. and Tardos E. Addison Wesley• Computational Geometry, Algorithms and Applications. de Berg M. , Cheong
O., van Kreveld M. and Overmars M. Springer. • Algorithms Course Materials. Erickson J. http://www.cs.uiuc.edu/~jeffe/
teaching/algorithms• Página web del lenguaje Processing http://www.processing.org• Algorithms and Programming, Problems and Solutions, Alexander Shen,
Birkhauser, 1997• Especificación, derivación y análisis de Algoritmos, Narciso Marti et al.,
Pearson 2006.• Probability and Computing: randomized algorithms and probabilistic analysis,
Mitzenmacher et al., Cambridge, 2005• Algorithms on strings, trees and sequences, Gusfield, Cambridge, 1997
7
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Tutoría
• Previa cita, ya sea por e-mail ([email protected], [email protected], [email protected]) o teléfono (1211, 49564, 1206 ), H-6, en segundo piso del edificio blanco.
8
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Cosas que hay que saber de programación
• Apuntadores
• Memoria dinámica
• Leer escribir archivos
• Pasar argumentos a los programas
• etc...
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Modo de programación• Usaremos C++ con el compilador linux gcc o Windows MinGW (http://
www.mingw.org/).
• El ambiente de desarrollo será Code::Blocks. (http://www.codeblocks.org/ Instalación muy fácil en linux-ubuntu y windows). En Windows hay que bajar el que tiene MinGW integrado llamado IDE (Integrated development environment). Usaremos el tipo de proyecto “Console Application” con lenguaje C++.
• ¿Por qué usar gcc y MinGW?
• Compatibilidad multiplataforma bajo normas ANSI.
• ¿Cuales son las bondades de un ambiente integrado de programación?
• Tener un editor y un debuger integrado (Es MUY importante aprender a usar el DEBUGGER)
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Screenshot de code::blocks
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Tarea Opcional:
• mandar por correo una descripción breve del uso de las siguientes opciones de debugger en code::blocks:
• continue, next line, next instruction, step into, step out, toggle break point, remove all break points, run to cursor, debugging windows y edit watches.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
• finito
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
• finito• bien definido
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
• finito• bien definido• entradas bien definidas
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
• finito• bien definido• entradas bien definidas• salidas bien definidas
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos
• ¿Qué es un algoritmo?
• Un algoritmo es una secuencia explícita, precisa, no ambigua de instrucciones elementales que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida.
• Todo algoritmo debe tener las siguientes 5 características principales:
• finito• bien definido• entradas bien definidas• salidas bien definidas• factible
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmo
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmo
• Un algoritmo es correcto si para todas las posibles entradas, termina con la salida correcta.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmo
• Un algoritmo es correcto si para todas las posibles entradas, termina con la salida correcta.
• Se puede especificar en un lenguaje como el español o inglés, como un programa de computadora o bien como un diseño de hardware (ejemplo, un circuito que ordena con comparadores ).
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmo
• Un algoritmo es correcto si para todas las posibles entradas, termina con la salida correcta.
• Se puede especificar en un lenguaje como el español o inglés, como un programa de computadora o bien como un diseño de hardware (ejemplo, un circuito que ordena con comparadores ).
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmo
• Un algoritmo es correcto si para todas las posibles entradas, termina con la salida correcta.
• Se puede especificar en un lenguaje como el español o inglés, como un programa de computadora o bien como un diseño de hardware (ejemplo, un circuito que ordena con comparadores ).
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Dadas 2 secuencias ordenadas de símbolos X = (x1,x2 ... xm), Y =(y1,y2, ... , yn) queremos encontrar la subsecuencia común mas larga a ambos X y Y.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Dadas 2 secuencias ordenadas de símbolos X = (x1,x2 ... xm), Y =(y1,y2, ... , yn) queremos encontrar la subsecuencia común mas larga a ambos X y Y.
• Un subsecuencia de X es X donde quitamos algunos (quizá ninguno) de sus símbolos.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Dadas 2 secuencias ordenadas de símbolos X = (x1,x2 ... xm), Y =(y1,y2, ... , yn) queremos encontrar la subsecuencia común mas larga a ambos X y Y.
• Un subsecuencia de X es X donde quitamos algunos (quizá ninguno) de sus símbolos.
• La subsecuencia común mas larga de X y Y nos dice que tan parecidos son X y Y
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Dadas 2 secuencias ordenadas de símbolos X = (x1,x2 ... xm), Y =(y1,y2, ... , yn) queremos encontrar la subsecuencia común mas larga a ambos X y Y.
• Un subsecuencia de X es X donde quitamos algunos (quizá ninguno) de sus símbolos.
• La subsecuencia común mas larga de X y Y nos dice que tan parecidos son X y Y
• Aplicaciones en análisis de ADN en biología.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Dadas 2 secuencias ordenadas de símbolos X = (x1,x2 ... xm), Y =(y1,y2, ... , yn) queremos encontrar la subsecuencia común mas larga a ambos X y Y.
• Un subsecuencia de X es X donde quitamos algunos (quizá ninguno) de sus símbolos.
• La subsecuencia común mas larga de X y Y nos dice que tan parecidos son X y Y
• Aplicaciones en análisis de ADN en biología.
• ¿cuantas subsecuencias tiene X?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Dadas 2 secuencias ordenadas de símbolos X = (x1,x2 ... xm), Y =(y1,y2, ... , yn) queremos encontrar la subsecuencia común mas larga a ambos X y Y.
• Un subsecuencia de X es X donde quitamos algunos (quizá ninguno) de sus símbolos.
• La subsecuencia común mas larga de X y Y nos dice que tan parecidos son X y Y
• Aplicaciones en análisis de ADN en biología.
• ¿cuantas subsecuencias tiene X?
• 2m
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Ejemplo de problemas
• Un roadmap con las distancias entre intersecciones adyacentes. Encontrar la ruta mas corta de una intersección a otra. El número de intersecciones puede ser enorme, ¿como elegir la mas corta ?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Características de problemas interesantes
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Características de problemas interesantes
• Hay muchas soluciones candidatas, la mayoria no resuelven el problema.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Características de problemas interesantes
• Hay muchas soluciones candidatas, la mayoria no resuelven el problema.
• Encontrar la(s) correcta(s) es todo un reto.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Características de problemas interesantes
• Hay muchas soluciones candidatas, la mayoria no resuelven el problema.
• Encontrar la(s) correcta(s) es todo un reto.
• Solucionar estos problemas tiene aplicaciones prácticas.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Relación entre algoritmo y estructura de datos
• Se debe escoger la más adecuada (arreglo, pila, lista, montículo)
• Se debe de especificar en el algoritmo haciendo uso de su interfás.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Se deben de aprender técnicas
• En la vida académica y profesional habrá problemas son solución publicada.
• hay que aprender a desarrollar y analizar nuevos algoritmos.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Si las computadoras fueran infinitamente rápidas y con infinita memoria ¿todavía es necesario hacer análisis de algoritmos?
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Si las computadoras fueran infinitamente rápidas y con infinita memoria ¿todavía es necesario hacer análisis de algoritmos?
• Si, se debe demostrar que termina y que termina con la solución correcta.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Si las computadoras fueran infinitamente rápidas y con infinita memoria ¿todavía es necesario hacer análisis de algoritmos?
• Si, se debe demostrar que termina y que termina con la solución correcta.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Si las computadoras fueran infinitamente rápidas y con infinita memoria ¿todavía es necesario hacer análisis de algoritmos?
• Si, se debe demostrar que termina y que termina con la solución correcta.
• Eficiencia: Insertion sort ( O(n2) ) vs. merge sort ( O( nlog(n) ) ).
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Si las computadoras fueran infinitamente rápidas y con infinita memoria ¿todavía es necesario hacer análisis de algoritmos?
• Si, se debe demostrar que termina y que termina con la solución correcta.
• Eficiencia: Insertion sort ( O(n2) ) vs. merge sort ( O( nlog(n) ) ).
• el primero en computadora 1000 veces mas rápida , mucho mejor implementado por el mejor programador del mundo (2n2 vs 50 n log n)
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Si las computadoras fueran infinitamente rápidas y con infinita memoria ¿todavía es necesario hacer análisis de algoritmos?
• Si, se debe demostrar que termina y que termina con la solución correcta.
• Eficiencia: Insertion sort ( O(n2) ) vs. merge sort ( O( nlog(n) ) ).
• el primero en computadora 1000 veces mas rápida , mucho mejor implementado por el mejor programador del mundo (2n2 vs 50 n log n)
• Para ordenar 100 millones, el primero 23 dias, el segundo 4 horas.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• El ejemplo anterior nos dice que los algoritmos, así como el hardware, son tecnología.
• tan importantes como, por ejemplo
• tecnologías de fabricación de computadoras
• interfases fáciles de usar GUI
• redes de transmisión rápida
• Por ejemplo, cuando una aplicación es interpretada de su lenguaje nativo a lenguaje maquina, ahí hay algoritmos involucrados (compiladores, interpretes)
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Algoritmos como tecnología
• Tener un sólido conocimiento sobre algoritmos existentes y técnicas de desarrollo y análisis separa a los verdaderos programadores profesionales de los demás.
Wednesday, August 21, 13
Alonso Ramírez Manzanares Computación y Algoritmos 22.01.2013
Hay que empezar
Wednesday, August 21, 13