Sei sulla pagina 1di 22

Departamento de Informtica Facultad Politcnica Ingeniera Informtica

ALGORITMOS Y ESTRUCTURA DE DATOS III


2013 2do Semestre Seccin TQ
Prof. Cristian Cappo
ccappo@pol.una.py ccappopy@gmail.com AER Ing. Jos Vzquez, MSc. joseluaster@gmail.com

Algoritmos y ED III
Horario de clases
Mircoles de 17:30 a 19:45 (2,25 HR) Viernes de 14:15 a 17:15 (3HR)

POR FAVOR LLEGAR A HORA A LA CLASE. Los alumnos sin DEF deben asistir al menos el 75% de las clases. Consultas extra-clase
Sin problemas, va correo electrnico Coordinando una visita a la oficina del profesor. Local: Laboratorio de Computacin Cientfica y Aplicada de la FPUNA. Bloque 3 del exCET (bloque de la FPUNA), en la entrada del campus sobre la Avda. Mcal. Lopez. Telfono: 021-573643
2

Donde ubicarme
(Usualmente de 8:00 a 18:00 hs, aunque mejor confirmar por mail )

Algoritmos y ED III
Qu haremos en el curso?
Estudiar algoritmos conocidos y de gran influencia Estructura de datos (ED) avanzadas. Examinar mtodos para analizar el rendimiento (eficiencia) de algoritmos Aplicar criterios para seleccin de algoritmos y ED segn la naturaleza del problema a resolver. Construir cdigo claro, depurable y documentado (aunque no sea un curso de programacin ni de ingeniera de software)
4

Algoritmos y ED III
Cul es el contenido del curso? 1. Java (como herramienta auxiliar y transversal ) 2. Anlisis de algoritmos (unos de los temas ms importantes y de carcter transversal) 3. Ordenacin y bsqueda
rboles binarios (no balanceados (BST) y balanceados (AVL, Rojinegros, etc) ) Tablas de dispersin Ordenacin interna (##Sort basados o no en comparacin) Ordenacin externa (ej: B-Arboles)

4. 5. 6. 7.

8.

Bsqueda de patrones en cadenas ( KMP, Boyer-Moore, Rabin-Karp) Grafos (ED y Algoritmos ms relevantes: barrido, bsqueda, cubrimiento, etc) Tcnicas de diseo de algoritmos : Divide y vencers, Algoritmos greedy, Prog. Dinmica, Backtracking. Algoritmos aleatorizados o probabilsticos ( anlisis probabilstico, ED con base aleatoria) Lmites a la computacin: tratabilidad de problemas, clasificacin de problemas ( problemas P, NP, NP-Completos, NP-Hard ), demostraciones NP y NP-Completo
5

Qu veremos?
Estudiaremos fundamentalmente Anlisis de Algoritmos (es el estudio terico del rendimiento de programas y el uso de recursos) Otros factores, son tambin muy importantes:
Modularidad Correctitud Mantenibilidad Seguridad - Funcionalidad - Robustez - Usabilidad - Simplicidad - Extensibilidad - Escalabilidad - Confiabilidad

Algoritmos y ED III
Cules son las reglas del curso? (1)
El curso ser terico/prctico. Mucha programacin Se tendrn tareas (casi semanales) El puntaje parcial (100%) ser dividido de la siguiente forma:
60% Examen (en el 2do parcial ser 65%) 35% 05% Laboratorio (no hay en el 2do parcial)

E Primer Parcial

E Segundo Parcial

Si no rinde el primer o segundo parcial, el puntaje de tareas y laboratorio correspondiente a ese parcial se suman al tercer parcial. Si rinde ambos exmenes y no consigui derecho, el tercer examen parcial es 100%. El TPF se entregar luego del 1er. parcial y se entregar luego del 2do. Parcial. Su peso es de 30% del PP (promedio ponderado)
PP = PdP(Promedio de parciales) = 70% + TP = 30% Recordar que el PdP es el que se utiliza para el derecho a examen final Recordar que : PF (Puntaje final) = PP * 0.4 + EF (Examen Final) * 0.6
7

Algoritmos y ED III
Cules son las reglas del curso? (2)
El nro. de tareas ser de aprox. 10 distribuidas en todo el curso. Muchas de ellas son de programacin (esencialmente en Java), aunque tambin habr mucha teora. Las tareas se entregan por grupo de 2 personas (excepcionalmente 1 persona) va EDUCA (www.educa.una.py/politecnica). Favor colocar una foto actual en su perfil de EDUCA. Enviar el nombre de los integrantes del grupo va el foro FAQs del curso en EDUCA (hasta el viernes 3/ago). La clave de acceso es bca2013_2S sin las comillas. Los documentos, ejercitarios, presentaciones, etc, se mantienen en el sitio de EDUCA. Los exmenes sern SIN material.

Algoritmos y ED III
Recomendaciones
Dedicarle al menos 5 horas a la semana para estudiar, leer y practicar. Leer por anticipado, para ello tiene a mano el plan semestral con las referencias de lectura. Use el Plan Semestral. Participar y consultar en clase. Usar EDUCA para discutir temas que no quedaron claros o relacionados a los temas del curso.
El profesor podra requerir algn tiempo en dar la respuesta, en caso de que no tenga la respuesta a mano.
9

Plan Semestral (20 clases en total con 10 tareas, 2 laboratorios y 1 TPF)


TEMA/Actividad Introduccin + Java + Laboratorio Java Anlisis de Algoritmos Ordenacin y Bsqueda: BST + Laboratorio BST Ordenacin y Bsqueda: AVL Ordenacin y Bsqueda: Tablas de dispersin Ordenacin y Bsqueda: Ordenacin interna I Ordenacin y Bsqueda: Ordenacin Interna II Repaso previo al Primer Parcial Primer Parcial Ordenacin y Bsqueda: Ordenacin Externa Bsqueda de Patrones Grafos Fechas 31/JUL, 2/AGO y 7/AGO(L) 09/AGO y 14/AGO 16/AGO y 21/AGO(L) 23/AGO 28/AGO 30/AGO 4/SET 6/SET(Repaso) 11/SET 20/SET 2/OCT 4/OCT 9/OCT y 11/OCT 9 (Grafos) Tareas: 1,2,3,4,5,6 8 (Ord. Externa) y TPF 7 (Ord. Interna) 6 (Tablas Hash) Entrega TAREA 1,2,3 (Java y C) 4 (Anlisis de alg.) 5 (BST)

Tcnicas de diseo de Algoritmos


Algoritmos aleatorizados Lmites a la computacin Segundo Parcial

16/OCT y 18/OCT
23/OCT 25/OCT 28/OCT 9/NOV

10 (Tec. Diseo)

Tareas: 7,8,9,10

Entrega del TPF


Primer Final Segundo Final

11/NOV 15/NOV
16/NOV 30/NOV 02/DIC 17/DIC
10

Algoritmos y ED III
Bibliografa: Estructura de Datos en Java, Mark Allen Weiss. 1998.[WEIS2000] Data structures and algorithm analysis. Edition 3.2 Java Edition. Clifford A. Shaffer. 2013. [Shaffer2013] (disponible en lnea) http://people.cs.vt.edu/~shaffer/Book/JAVA3elatest.pdf Introduction to Algorithm. Cormen, Leiserson, Rivest & Stein. 2nd Edition. 2001. [CLRS2001] o 3rd. Edition. 2009. Data Structures and Algorithm Analysis in Java. Mark. A. Weiss. 3rd. Edition. Pearson. 2012. The introduction to the design and analysis of algorithms. 2nd Edition. Anany Levitin. 2007. The algorithm Design Manual. Steven Skiena. 2nd edition. 2008. Springer Algorithm Design. Jon Kleinberg & Eva Tardos. 1th Edition. 2006. Pearson Education. Estructura de datos y algoritmos. Aho, HopCroft & Ullman. Addison-Wesley. 1988 Algoritmos y estructura de datos. Niklaus Wirth. Prentice-Hall. 1987 Estructura de datos y algoritmos. Mark Allen Weiss. Addison-Wesley. 1995 Artculos y documentos adicionales entregados por el profesor (ver Referencias en EDUCA).
11

Algoritmos y ED III
Trabajo prctico final
Contenido
Problema real + al menos 4 tcnicas que lo resuelven.

Estructura del TPF:


Descripcin del problema Descripcin de las tcnicas ( ao >= 2000 ) Implementar y evaluar al menos 2 (dos) tcnicas, comparndolas en rendimiento y otros factores. Conclusin Referencias

Temas:
Sern definidos por el profesor y entregados a cada grupo en forma aleatoria.

12

Responder (entregar en una hoja)


1. Qu es un algoritmo? Qu condiciones debe reunir? 2. Qu es un Tipo de dato? 3. Qu es un Tipo Abstracto de Dato? 4. Qu es una Estructura de Datos (ED)? 5. Porqu son necesarias las EDs? 6. Que significa algoritmo eficiente? 7. Qu es un Lenguaje de Programacin?
13

Problema (entregar en una hoja)


Suponga que tiene un conjunto de N nmeros y necesita determinar el k-simo mayor. Este problema es conocido como el problema de seleccin.
Escriba un algoritmo que lo resuelva (en cualquier LP) Si usted posee una mquina que realiza 10Millones de operaciones por segundo, indique qu tiempo aproximadamente tardara su algoritmo si los parmetros son N=30.000.000 y k=15.000.000. Para lo ltimo asuma que todas las operaciones toman el mismo tiempo.
14

Porqu estudiar algoritmos y ED?


Internet: web search, ruteo de paquetes, archivos distribuidos, cloud computing, internet things, .. Biologa: proyecto del genoma humano, plegamiento de protenas, .. Computacin: circuitos, sistema de archivos, compiladores,.. Computacin grfica: pelculas, video games, realidad virtual, 3D, .. Seguridad: celulares, e-commerce, mquinas de votacin,.. Multimedia: MP3, JPG, DivX, HDTV, reconocimiento de rostros, Redes sociales: sistemas recomendadores, propaganda, noticias,.. Fsica/Qumica: simulacin de fenmenos fsicos o qumicos (colisin de partculas, astronoma, procesos qumicos, cosmologa, etc)

15

Algoritmo - Origen: del nombre del matemtico y astrnomo rabeAbu Ja'far Mohammed ibn Musa alKhowarizmi (825) (Padre de Ja'far, Mohammed, hijo de Moiss, natural de Khowarizm). Escribi el clebre libro Kitab al jabr w'al-muqabala (Reglas de restauracin y reduccin -- > algebra)

Viejas races, nuevas oportunidades


El estudio de los algoritmos data al menos de la poca de Euclides Formalizado por Church y A. Turing en 1930
16

Solucin de problemas

Modelo matemtico

Tipo Abstracto de Datos

Estructura de Datos

Algoritmo informal

Algoritmo completo

Programa

17

Porqu estudiar algoritmos?


Comprender la naturaleza intrnseca del problema, as como las posibles tcnicas de solucin independientes al lenguaje de programacin, paradigma, hw u otro aspecto de implementacin. Es transversal y de largo alcance Para resolver problemas difciles que se nos presenta Para ser mejor y un proficiente programador Por una estimulacin intelectual (Por ejemplo, competencias de programacin ACM-ICPC : http://icpc.baylor.edu ) Divertido Generador de buena$ oportunidade$ en cualquier rea
18

Para escribir un programa


Utilice un estilo de programacin (leer el libro La prctica de la programacin de Brian Kernighan y Rob Pike):
Nombre decente a variables Ser consistente (del mismo modo en todos los lugares) Nombre activo para funciones Ser preciso ( nombre vs funcionalidad) Usar sangras (adecuadamente) Dividir expresiones complejas Usar forma natural en las expresiones (no escriba cdigo oscuro) Emplear convenciones (por ejemplo el Java Convention Code - JCC) Dar nombre a nmeros mgicos Comentarios en cdigo no obvio. Aclare no confunda Funciones y datos globales siempre deben comentarse No comentar cdigo malo, debe reescribirlo. Y hay ms .. mucho ms

19

Para qu tomarse la molestia?


Porqu preocuparse por el estilo? A quin le importa cmo se vea un programa si ste funciona? No toma demasiado tiempo hacer que se vea bonito?
El cdigo bien escrito, ordenado y con estilo, es ms fcil de leer y entender. Y posiblemente tiene menos errores. El enemigo del programador: el tiempo. Pero no es excusa. El cdigo desaliado es malo, torpe, difcil de leer y muchas veces hasta incorrecto. EL BUEN ESTILO DEBE SER UN HBITO.

20

Tareas para prximas clases


Para el Viernes 2/AGO/2013
Enviar Datos de Grupos Leer captulo 1, 2, 3 y 4 del libro de Weiss. Bsicamente revisar: semejanzas y diferencias con lenguaje C.
Tutorial de Java en el sitio de Oracle: http://docs.oracle.com/javase/tutorial (mirar los tpicos: Getting Started, Learning the Java Language y si se puede: Essential Java Classes) Para practicar y aprender Java de una forma sencilla, puede mirar el sitio: http://codingbat.com En este sitio encontrarn informacin paso a paso de como utilizar Java para programar (que es del libro Introduction to Programming in Java An interdisciplinary approach) . http://introcs.cs.princeton.edu/java/home/

TAREA #1 (INDIVIDUAL)
Resumir en no ms de 5 (cinco) pginas el primer captulo de [Shaffer2013]. Presentarlo a mano, NO impreso. Resolver el problema planteado HOY en lenguaje C, generar los valores aleatorios y testar con los parmetros indicados. Incluir cdigo y resultado de las pruebas en una hoja con su nombre (Resultado = tiempo en ms)

Para el Viernes 9/AGO/2013 (via Educa)


Tarea #2, estar disponible en EDUCA el viernes 2/AGO. Ejercicios relacionados a TDA y lenguaje C.
21

Preguntas/Comentarios?

22

Potrebbero piacerti anche