Att analysera effektiviteten hos olika möjliga lösningar på ett problem för att avgöra vilken som är tillräckligt effektivt för en given situation.
Att jämföra olika problem med avseende på svårighetsgrad.
Att använda teknik för algoritmdesign som giriga algoritmer, dynamisk programmering, söndra och härska samt sökning för att skapa algoritmer för att lösa givna problem.
Strategier för att testa och debugga algoritmer och datastrukturer.
Att snabbt och korrekt implementera algoritmer och datastrukturer.
Att kommunicera och samarbeta med andra studenter vid problemlösning i grupp.
Kursinnehåll
För att framgångsrikt lösa datavetenskapliga problem krävs en solid teoretisk grund samt förmågan att applicera teorierna vid praktisk problemlösning. Målet med den här kursen är att utveckla förmågan att lösa komplicerade algoritmiska problem genom att utnyttja kunskaper om algoritmer, data strukturer och komplexitetsteori. För att lösa den här typen av problem är det viktigt att kunna analysera problemet, välja eller designa en algoritm, avgöra hur mycket resursers (tid och minne) algoritmen kräver samt att implementera och testa algoritmen snabbt och korrekt. I den här kursen tränas detta genom att lösa uppgifter och att arbeta under tidspress under problemlösningstillfällen. Kursen innehåller också tävlingsmoment där studenterna enskilt eller i grupp ska lösa algoritmiska problem under tidspress och med begränsade resurser. Syftet är att studenterna ska kunna använda programmering och algoritmer som ett effektivt verktyg för problemlösning samt få en möjlighet att tillämpa teoretiska kunskaper från andra kurser för att lösa praktiska problem.