Estructures de Dades i Algorismes

Esteu aquí

Crèdits
6
Tipus
Obligatòria
Requisits

Departament
CS
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.

Professors

Responsable

  • Enric Rodriguez Carbonell ( )

Altres

  • Albert Oliveras Llunell ( )
  • Amalia Duch Brown ( )
  • Antoni Lozano Bojados ( )
  • Borja Valles Fuente ( )
  • Conrado Martínez Parra ( )
  • Gabriel Valiente Feruglio ( )
  • Jaume Baixeries Juvillà ( )
  • René Alquezar Mancho ( )
  • 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 - 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

  1. 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.
    Related competences: CT4.2,
  2. Calcular l'eficiència d'algorismes iteratius aplicant les regles de càlcul adients.
    Related competences: CT4.2,
  3. Descriure l'eficiència dels algorismes recursius utilitzant recurrències i comprendre i aplicar els teoremes mestres per resoldre-les.
    Related competences: CT4.2,
  4. Dissenyar algorismes per resoldre problemes diversos de dificultat mitjana amb restriccions tant de temps com d'espai.
    Related competences: CT4.1, CT4.2,
  5. Comparar l'eficiència de diferents algorismes per resoldre un mateix problema i seleccionar el més adient.
    Related competences: CT4.1, CT4.2,
  6. 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.
    Related competences: CT5.3, CT4.1, CT4.2,
  7. 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).
    Related competences: CT2.4, CT4.1, CT4.2, CT5.2,
  8. 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).
    Related competences: CT2.4, CT4.1, CT4.2, CT5.2,
  9. 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.
    Related competences: CT2.4, CT4.1, CT4.2, CT5.2,
  10. Conèixer, explicar, dissenyar, analitzar, comparar i implementar algorismes de cerca exhaustiva fent servir la tècnica de backtracking.
    Related competences: CT2.4, CT4.3, CT4.1, CT4.2,
  11. 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.
    Related competences: CT4.2,
  12. Completar i modificar implementacions, en llenguatge de programació C++, de diversos algorismes per resoldre problemes de dificultat mitjana.
    Related competences: CT5.1, CT4.2, CT5.2,
  13. Identificar i proposar solucions per problemes d'eficiència d'algorismes i de programes escrits en llenguatge de programació C++.
    Related competences: CT2.4, CT4.1, CT4.2, CT5.2, CT2.3,
  14. 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.
    Related competences: CT8.6, CT2.4, CT4.3, CT5.1, CT5.3, CT8.7, CT4.1, CT4.2, CT5.2, CT5.4, CT5.5, G6.2, CT2.3,
  15. 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.
    Related competences: G6.2,
  16. Calcular el cost d'un algorisme en els casos pitjor, millor i mitjà.
    Related competences: CT4.2,

Continguts

  1. 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.
  2. 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.
  3. 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.
  4. Cues amb Prioritats
    Operacions de cues amb prioritats. Implementacions amb heaps. Heapsort.
  5. 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.
  6. Generació i Cerca Exhaustiva
    Principis: espai de solucions, solucions parcials, poda. Generació de subconjunts i permutacions. Exemples: motxilla, viatjant de comerç.
  7. 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

Anàlisi d'Algorismes

Desenvolupament del tema 1 de l'assignatura.
Teoria
4
Problemes
2
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
8
Objectius: 1 2 3 5 4 16
Continguts:

Dividir i Vèncer

Desenvolupament del tema 2 de l'assignatura.
Teoria
4
Problemes
2
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
8
Objectius: 3 5 4 6 12 13
Continguts:

Diccionaris

Desenvolupament del tema 3 de l'assignatura.
Teoria
4
Problemes
2
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
8
Objectius: 5 4 7 12 13
Continguts:

Cues amb Prioritats

Desenvolupament del tema 4 de l'assignatura.
Teoria
2
Problemes
1
Laboratori
1
Aprenentatge dirigit
0
Aprenentatge autònom
4
Objectius: 5 4 8 12 13
Continguts:

Grafs

Desenvolupament del tema 5 de l'assignatura.
Teoria
4
Problemes
2
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
8
Objectius: 5 4 9 12 13
Continguts:

Generació i Cerca Exhaustiva

Desenvolupament del tema 6 de l'assignatura.
Teoria
4
Problemes
2
Laboratori
4
Aprenentatge dirigit
0
Aprenentatge autònom
8
Objectius: 5 4 10 12 13
Continguts:

Nocions d'Intractabilitat i Indecidibilitat

Desenvolupament del tema 7 de l'assignatura.
Teoria
4
Problemes
2
Laboratori
0
Aprenentatge dirigit
0
Aprenentatge autònom
4
Objectius: 11
Continguts:

Consolidació.

Repàs.
Teoria
4
Problemes
2
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
4.5
Objectius: 1 2 3 5 4 12 13
Continguts:

Tutorials Bibliotècnica-BRGF.

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.
Teoria
0
Problemes
0
Laboratori
0
Aprenentatge dirigit
0
Aprenentatge autònom
2.5
Objectius: 15

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)
NPO = nota de l'examen parcial d'ordinador (entre 0 i 10)
NF = nota de l'examen final (entre 0 i 10)
NJ = nota del joc (entre 0 i 10)

NOTA = mín(10, màx (30%NPP + 30%NPO + 30%NF + 20%NJ , 30%NPO + 60%NF + 20%NJ))

Bibliografia

Bàsica:

Complementaria:

Web links

  • 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
  • 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
  • Jutge https://www.jutge.org/
  • 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/
  • UVa Online Judge http://uva.onlinejudge.org/
  • TopCoder http://www.topcoder.com

Capacitats prèvies

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.