Els projectes finals són una oportunitat per aplicar tots els conceptes apresos al llarg del curs en un context pràctic i integrat. Aquests projectes estan dissenyats per desafiar-te i ajudar-te a consolidar els teus coneixements sobre anàlisi i disseny d'algorismes, així com a millorar les teves habilitats de programació i resolució de problemes.
Objectius dels Projectes Finals
- Aplicar Conceptes Teòrics: Utilitzar els coneixements adquirits sobre complexitat temporal i espacial, notació asimptòtica, i estratègies de disseny d'algorismes.
- Desenvolupar Algorismes Eficients: Crear algorismes que siguin eficients tant en termes de temps com d'espai.
- Optimitzar Codi: Implementar tècniques d'optimització per millorar el rendiment del codi.
- Treballar amb Problemes Reals: Enfrontar-se a problemes reals que requereixen solucions algorítmiques.
Projecte 1: Sistema de Recomendació de Productes
Descripció
Desenvolupa un sistema de recomanació de productes per a una botiga en línia. El sistema ha de ser capaç de recomanar productes basant-se en l'historial de compres dels usuaris.
Requisits
- Entrada: Historial de compres dels usuaris (una llista de productes comprats per cada usuari).
- Sortida: Una llista de recomanacions de productes per a cada usuari.
- Algorisme: Utilitza un algorisme de filtratge col·laboratiu per generar les recomanacions.
Passos a Seguir
- Anàlisi de Dades: Analitza l'historial de compres per identificar patrons de compra.
- Disseny de l'Algorisme: Dissenya un algorisme de filtratge col·laboratiu.
- Implementació: Implementa l'algorisme en el llenguatge de programació de la teva elecció.
- Optimització: Optimitza l'algorisme per assegurar-te que és eficient en termes de temps i espai.
Exemples de Codi
def recomanar_productes(historial_compres, usuari): # Implementació de l'algorisme de filtratge col·laboratiu recomanacions = [] # Codi per generar recomanacions return recomanacions
Exercici Pràctic
- Entrada: {'usuari1': ['producteA', 'producteB'], 'usuari2': ['producteB', 'producteC']}
- Sortida Esperada: {'usuari1': ['producteC'], 'usuari2': ['producteA']}
Projecte 2: Optimització d'un Algorisme de Cerca
Descripció
Optimitza un algorisme de cerca en una base de dades gran. L'objectiu és reduir el temps de cerca utilitzant tècniques d'optimització adequades.
Requisits
- Entrada: Una base de dades gran (una llista de registres).
- Sortida: El registre que coincideix amb el criteri de cerca.
- Algorisme: Utilitza una combinació de cerca binària i estructures de dades eficients.
Passos a Seguir
- Anàlisi de la Base de Dades: Analitza la base de dades per identificar possibles millores.
- Disseny de l'Algorisme: Dissenya un algorisme de cerca optimitzat.
- Implementació: Implementa l'algorisme en el llenguatge de programació de la teva elecció.
- Optimització: Utilitza tècniques d'optimització per millorar el rendiment de l'algorisme.
Exemples de Codi
def cerca_binaria(base_dades, criteri): # Implementació de l'algorisme de cerca binària index = -1 # Codi per realitzar la cerca return index
Exercici Pràctic
- Entrada: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], criteri = 7
- Sortida Esperada: 6 (index del valor 7)
Projecte 3: Planificació de Rutes amb Dijkstra
Descripció
Desenvolupa un sistema de planificació de rutes utilitzant l'algorisme de Dijkstra. El sistema ha de ser capaç de trobar la ruta més curta entre dues ubicacions en un graf.
Requisits
- Entrada: Un graf representant les ubicacions i les distàncies entre elles.
- Sortida: La ruta més curta entre dues ubicacions.
- Algorisme: Utilitza l'algorisme de Dijkstra per trobar la ruta més curta.
Passos a Seguir
- Anàlisi del Graf: Analitza el graf per identificar les ubicacions i les distàncies.
- Disseny de l'Algorisme: Dissenya l'algorisme de Dijkstra.
- Implementació: Implementa l'algorisme en el llenguatge de programació de la teva elecció.
- Optimització: Optimitza l'algorisme per assegurar-te que és eficient en termes de temps i espai.
Exemples de Codi
def dijkstra(graf, origen, desti): # Implementació de l'algorisme de Dijkstra ruta = [] # Codi per trobar la ruta més curta return ruta
Exercici Pràctic
- Entrada: {'A': {'B': 1, 'C': 4}, 'B': {'C': 2, 'D': 5}, 'C': {'D': 1}, 'D': {}}, origen = 'A', desti = 'D'
- Sortida Esperada: ['A', 'B', 'C', 'D']
Conclusió
Els projectes finals són una part essencial del curs, ja que et permeten aplicar els coneixements teòrics en situacions pràctiques. Assegura't de seguir els passos indicats per a cada projecte i de revisar els exemples de codi i exercicis pràctics per consolidar els teus coneixements. Bona sort!
Curs d'Anàlisi i Disseny d'Algorismes
Mòdul 1: Introducció als Algorismes
Mòdul 2: Anàlisi d'Algorismes
- Anàlisi de Complexitat Temporal
- Anàlisi de Complexitat Espacial
- Cases de Complexitat: Millor, Pitjor i Promig
Mòdul 3: Estratègies de Disseny d'Algorismes
Mòdul 4: Algorismes Clàssics
- Cerca Binària
- Ordenació per Inserció
- Ordenació per Mescla (Merge Sort)
- Ordenació Ràpida (Quick Sort)
- Algorisme de Dijkstra
- Algorisme de Floyd-Warshall