Kursen behandlar tekniker för att konstruera effektiva algoritmer och typiska datastrukturer som används i dessa. Speciell hänsyn tas till faktumet att effektivitet inte bara beror på algoritmens inneboende asymptotiska beteende utan också på de specifika probleminstanser den appliceras på.
Typiska algoritmtekniker är divide-and-conquer, greedy algoritmer och dynamic programming. Eftersom effektiva data strukturer bildar basen för många av dessa tekniker kommer kursen även behandla viktiga data strukturer, deras analyser, fördelar och nackdelar beroende på aktuell tillämpning. Exempel på datastrukturer som behandlas är heap, disjunkta mängder, and träd.