Aquesta assignatura comença introduint els conceptes d'eficiència i cost d'un algorisme i les eines matemàtiques bàsiques per analitzar-los. A continuació s'utilitzen aquestes bases per estudiar i analitzar el disseny i les diferents implementacions d'algorismes i estructures de dades clàssics i fonamentals.
Professorat
Responsable
Albert Oliveras Llunell (
)
Altres
Daniel Benedí García (
)
Elisabet Burjons Pujol (
)
Ilario Bonacina (
)
Irene Simó Muñoz (
)
Salvador Roura Ferret (
)
Hores setmanals
Teoria
2
Problemes
1
Laboratori
1
Aprenentatge dirigit
0.4
Aprenentatge autònom
5.6
Competències
Competències Tècniques
Competències tècniques comunes
CT2 - Utilitzar d'una manera apropiada teories, procediments i eines en el desenvolupament professional de l'enginyeria informàtica en tots els seus àmbits (especificació, disseny, implementació, desplegament -implantació- i avaluació de productes) de manera que es demostri la comprensió dels compromisos adoptats a les decisions de disseny.
CT2.3
- Dissenyar, desenvolupar, seleccionar i avaluar aplicacions, sistemes i serveis informàtics i, al mateix temps, assegurar-ne la fiabilitat, la seguretat i la qualitat en funció de principis ètics i de la legislació i la normativa vigents.
CT2.4
- Demostrar coneixement i capacitat per a aplicar les eines necessàries a l'emmagatzematge, el processament i l'accés als sistemes d'informació, fins i tot els que es basen en la web.
CT4 - Demostrar coneixement i capacitat d'aplicació dels procediments algorísmics bàsics de les tecnologies informàtiques per a dissenyar solucions a problemes, analitzant la idoneïtat i la complexitat dels algorismes
CT4.1
- Identificar les solucions algorísmiques més adequades per a resoldre problemes de dificultat mitjana.
CT4.2
- Raonar sobre la correcció i l'eficiència d'una solució algorísmica.
CT4.3
- Demostrar coneixement i capacitat d'aplicació dels principis fonamentals i de les tècniques bàsiques dels sistemes intel·ligents i de la seva aplicació pràctica.
CT5 - Analitzar, dissenyar, construir i mantenir aplicacions de forma robusta, segura i eficient, triant el paradigma i els llenguatges de programació més adequats.
CT5.1
- Triar, combinar i explotar diferents paradigmes de programació, en el moment de construir software, tenint en compte criteris com la facilitat de desenvolupament, l'eficiència, la portabilitat i la mantenibilitat.
CT5.2
- Conèixer, dissenyar i utilitzar de forma eficient els tipus i les estructures de dades més adients per a la resolució d'un problema.
CT5.3
- Dissenyar, escriure, provar, depurar, documentar i mantenir codi en un llenguatge d'alt nivell per a resoldre problemes de programació aplicant esquemes algorísmics i utilitzant estructures de dades.
CT5.4
- Dissenyar l'arquitectura dels programes utilitzant tècniques d'orientació a objectes, de modularització i d'especificació i implementació de tipus abstractes de dades.
CT5.5
- Usar les eines d'un entorn de desenvolupament de software per a crear i desenvolupar aplicacions.
CT8 - Planificar, concebre, desplegar i dirigir projectes, serveis i sistemes informàtics en tots els àmbits, liderar-ne la posada en marxa, la millora contínua i valorar-ne l'impacte econòmic i social.
CT8.6
- Demostrar comprensió de la importància de la negociació, dels hàbits de treball efectius, del lideratge i de les habilitats de comunicació en tots els entorns de desenvolupament de software.
CT8.7
- Controlar versions i configuracions del projecte.
Competències Transversals
ús solvent dels recursos d'informació
G6 [Avaluable] - Gestionar l'adquisició, l'estructuració, l'anàlisi i la visualització de dades i d'informació de l'àmbit de l'enginyeria informàtica, i valorar de forma crítica els resultats d'aquesta gestió.
G6.2
- Després d'identificar les parts d'un document acadèmic i d'organitzar les referències bibliogràfiques, dissenyar i executar una bona estratègia de cerca avançada amb recursos d'informació especialitzats, seleccionant la informació pertinent tenint en compte criteris de rellevància i qualitat.
Objectius
Comprendre les definicions de les notacions asimptòtiques O gran, Omega i Theta i el seu ús per caracteritzar l'eficiència en temps i espai dels algorismes.
Competències relacionades:
CT4.2,
Calcular l'eficiència d'algorismes iteratius aplicant les regles de càlcul adients.
Competències relacionades:
CT4.2,
Descriure l'eficiència dels algorismes recursius utilitzant recurrències i comprendre i aplicar els teoremes mestres per resoldre-les.
Competències relacionades:
CT4.2,
Dissenyar algorismes per resoldre problemes diversos de dificultat mitjana amb restriccions tant de temps com d'espai.
Competències relacionades:
CT4.1,
CT4.2,
Comparar l'eficiència de diferents algorismes per resoldre un mateix problema i seleccionar el més adient.
Competències relacionades:
CT4.1,
CT4.2,
Conèixer, explicar, dissenyar, analitzar, comparar i implementar algorismes (com poden ser mergesort, quicksort, Karatsuba i Strassen, entre d'altres) fent servir la tècnica de dividir i vèncer.
Competències relacionades:
CT4.1,
CT4.2,
CT5.3,
Conèixer, explicar, dissenyar, analitzar, comparar i implementar les principals estructures de dades que es poden fer servir per implementar diccionaris (taules, taules ordenades, llistes, llistes ordenades, taules de dispersió, arbres binaris de cerca, arbres AVL).
Competències relacionades:
CT4.1,
CT4.2,
CT5.2,
CT2.4,
Conèixer, explicar, dissenyar, analitzar, comparar i implementar les principals estructures de dades que es poden fer servir per implementar cues de prioritat (arbres, heaps).
Competències relacionades:
CT4.1,
CT4.2,
CT5.2,
CT2.4,
Conèixer, explicar, dissenyar, analitzar, comparar i implementar algorismes que resolguin problemes clàssics en grafs com recorreguts, ordenació topològica i camins mínims entre d'altres.
Competències relacionades:
CT4.1,
CT4.2,
CT5.2,
CT2.4,
Conèixer, explicar, dissenyar, analitzar, comparar i implementar algorismes de cerca exhaustiva fent servir la tècnica de backtracking.
Competències relacionades:
CT4.1,
CT4.2,
CT2.4,
CT4.3,
Prendre consciència dels límits de la computació: comprendre les implicacions de la pregunta "P=NP?", entendre l'enunciat del Teorema de Cook-Levin, reconèixer i identificar diversos problemes NP-complets clàssics.
Competències relacionades:
CT4.2,
Completar i modificar implementacions, en llenguatge de programació C++, de diversos algorismes per resoldre problemes de dificultat mitjana.
Competències relacionades:
CT4.2,
CT5.2,
CT5.1,
Identificar i proposar solucions per problemes d'eficiència d'algorismes i de programes escrits en llenguatge de programació C++.
Competències relacionades:
CT4.1,
CT4.2,
CT5.2,
CT2.4,
CT2.3,
Analitzar un joc estratègic per dissenyar i programar un jugador eficaç,
eficient, col·laboratiu i competitiu que maximitzi les possibilitats de guanyar
al joc i que sigui capaç d'establir aliances i de coordinar-se amb altres jugadors.
Competències relacionades:
CT8.6,
CT8.7,
CT4.1,
CT4.2,
CT5.2,
CT5.4,
CT5.5,
G6.2,
CT2.4,
CT4.3,
CT5.1,
CT5.3,
CT2.3,
Executar estratègies de recerca d'informació (referències bibliogràfiques, articles científics, patents, recursos web de qualitat...) per elaborar un document que descrigui, per a un problema donat, un algorisme ben conegut que el resolgui, tot estructurant-lo correctament, citant adequadament les fonts usades i fent un ús ètic de la informació recopilada.
Competències relacionades:
G6.2,
Calcular el cost d'un algorisme en els casos pitjor, millor i mitjà.
Competències relacionades:
CT4.2,
Continguts
Anàlisi d'Algorismes
Cost en temps i espai. Cas pitjor, millor i mitjà. Notació asimptòtica. Anàlisi del cost d'algorismes iteratius i recursius.
Dividir i Vèncer
Principis: partició en subproblemes, recombinació de solucions. Exemples: mergesort, quicksort, algorisme de Karatsuba per multiplicar nombres grans, algorisme de Strassen per multiplicar matrius.
Diccionaris
Operacions de diccionaris i diccionaris ordenats. Implementacions bàsiques: taules i llistes. Implementacions avançades: taules de dispersió, arbres binaris de cerca, arbres AVL.
Cues amb Prioritats
Operacions de cues amb prioritats. Implementacions amb heaps. Heapsort.
Grafs
Representacions: matrius d'adjacència, llistes d'adjacència i implícita. Cerca en profunditat (DFS). Cerca en amplada (BFS). Ordenació topològica. Algorisme de Dijkstra per camins mínims. Algorisme de Prim per arbres d'expansió mínims.
Generació i Cerca Exhaustiva
Principis: espai de solucions, solucions parcials, poda. Generació de subconjunts i permutacions. Exemples: motxilla, viatjant de comerç.
Nocions d'Intractabilitat
Introducció bàsica a les classes P i NP, al Teorema de Cook-Levin, a les reduccions i a la NP-completesa.
Activitats
ActivitatActe avaluatiu
Anàlisi d'Algorismes
Desenvolupament del tema 1 de l'assignatura. Objectius:1235416 Continguts:
S'avalua dels objectius corresponents al objectiu específic 15.
Es publicarà un enunciat que consistirà en la descripció d'un joc d'estratègia. Els estudiants hauran de programar un jugador per aquest joc (és a dir, implementar una estratègia per intentar guanyar el joc).
Es durà a terme una competició en què els estudiants competiran els uns contra els altres, de la que s'obtindrà una classificació. Per participar en aquesta competició, els jugadors dels estudiants hauran de superar un test de qualificació.
La nota corresponent a aquesta part es calcularà a partir de la posició a la classificació de forma proporcional, garantint que el campió tingui un 10 i que tots els participants que tinguin un jugador qualificat tinguin un nota mínima de 5. Els estudiants que no hagin aconseguit cap jugador qualificat tindran una nota de 0. Objectius:14 Setmana:
9 (Fora d'horari lectiu)
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
8h
Desenvolupament del Joc
Aprentatge de les estratègies més apropiades pel joc. Resolució dubtes existents a nivell grupal. Objectius:14 Continguts:
Autoaprenentatge mitjançant tutorials de la Bibliotècnica de la BRGF sobre:
la propietat intel·lectual, l'ús ètic de la informació i l'ús de software de gestió de referències bibliogràfiques. Objectius:15
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
2.5h
Pràctica d'ús solvent de recursos d'informació.
S'avalua dels objectius corresponents al objectiu específic 16.
Es publicarà un enunciat que consistirà en la descripció d'un problema computacional i el nom d'un algorisme que el resol. Els estudiants hauran de cercar (a la biblioteca, a la web, ... ) informació sobre el problema i l'algorisme i elaborar un document breu i ben estructurat que inclogui correctament les fonts consultades.
El document s'haurà de lliurar el dia de l'examen final.
La competència transversal s'avalua a través d'aquest document. Objectius:15 Setmana:
14 (Fora d'horari lectiu)
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
3h
Examen d'ordinador
S'avalua la seva vessant de laboratori, és a dir, d'implementació, dels continguts tractats fins la data de l'examen.
Davant de l'ordinador, els estudiants reben dos o tres problemes. Un problema es defineix amb un enunciat, un o més jocs de proves públics i, potser, cert codi ja implementat. Quan un estudiant vulgui lliurar la seva solució per algun dels problemes, l'enviarà a un jutge automàtic que, en poc segons, li retornarà el veredicte sobre el comportament del seu programa. L'estudiant pot reenviar fins a 10 solucions per al mateix problema. Els professors corregiran el darrer enviament realitzat per cada problema. Objectius:78910 Setmana:
15 (Fora d'horari lectiu)
Teoria
0h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
4h
Examen final
S'avalua dels objectius corresponents als continguts 1 a 7. Objectius:12354678910121311 Setmana:
15 (Fora d'horari lectiu)
Teoria
3h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h
Metodologia docent
El temari s'exposa de forma molt pràctica, a través de la presentació de molts exemples.
Les classes de teoria introdueixen tots els conceptes i tècniques necessaris, els quals es posen en pràctica en les classes de problemes i de laboratori mitjançant una col·lecció de problemes i exercicis en un jutge automàtic.
Les dues hores de classes de teoria es fan setmanalment. Les dues hores de classes de laboratori es fan quinzenalment. Les dues hores de classes de problemes es fan quinzenalment.
La programació del joc integra els coneixements i les competències de tot el curs.
El curs utilitza el llenguatge de programació C++.
Mètode d'avaluació
NPP = nota de l'examen parcial de paper (entre 0 i 10)
NO = nota de l'examen d'ordinador (entre 0 i 10)
NF = nota de l'examen final (entre 0 i 10)
NJ = nota del joc (entre 0 i 10)
Algorithms Courses on the WWW: és un llistat exhaustiu d'enllaços a portals web relacionats amb algorísmia i complexitat: cursos de diverses universitats, software, aplicacions gràfiques, pàgines personals d'investigadors coneguts, entre d'altres coses.
Algorithms Courses on the WWW: es un listado exhaustivo de enlaces a portales web relacionados con la algoritmia y complejidad: cursos de varias universidades, software, aplicaciones gráficas, páginas personales de investigadores conocidos, entre otras cosas.
Algorithms Courses on the WWW: it is an exhaustive listing of links to web sites related to algorithms and complexity: courses of several universities, software, graphic applications, personal pages of well-known researchers, among other things. http://www.cs.pitt.edu/~kirk/algorithmcourses/index.html
MIT OpenCourseWare: és una publicació gratuïta dels materials dels cursos del Massachusets Institute of Technology (MIT) que mostra la majoria de temes que s'ensenyen en el MIT. Conté apunts, exercicis, exercicis resolts, exàmens i videos de classes.
MIT OpenCourseWare: es una publicación gratuita de los materiales de los cursos del Massachusets Institute of Technology (MIT) que muestra la mayoría de temas que se enseñan en el MIT. Contiene apuntes, ejercicios, ejercicios resueltos, exámenes y vídeos de clases.
MIT OpenCourseWare: it is a free publication of the materials of the courses of the Massachusets Institute of Technology (MIT) that shows most of the topics that are taught in MIT. Contains notes, exercises, solved exercises, exams and videos of classes. http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science
The Stony Brook Algorithm Repository: és un portal web amb una col·lecció d'implementacions de més de setanta algorismes fonamentals d'optimització combinatòria.
The Stony Brook Algorithm Repository: es un portal web con una colección de implementaciones de más de setenta algoritmos fundamentales de optimitzación combinatoria.
The Stony Brook Algorithm Repository: it is a web site with a collection of implementations of more than seventy fundamental algorithms of combinatorial optimitzation. http://www.cs.sunysb.edu/~algorith/
S'espera que els estudiants estiguin familiaritzats amb les tècniques de programació imperativa basada en objectes:
- pas de paràmetres,
- classes,
- objectes,
- mètodes,
- punters,
- memòria dinàmica,
- genericitat,
- recursivitat,
- ús de classes estàndard,
- iteradors.
També s'espera que coneguin bé almenys un llenguatge imperatiu orientat a objectes, preferentment C++.
Són també requisits la capacitat crítica i la maduresa matemàtica.