Algoritmeanalyse-og-optimering / README-danish.md
README-danish.md
Raw

Algoritmeanalyse og optimering

Algoritmeoptimisering og analyse samt praktiske implementationer

Clean and run

make clean; make; ./out/main

Emne / Koncept

Algoritmeoptimering og deres praktiske implementationer.

Vinkel

Jeg vil undersøge hvilke metoder der almindelig bruges til at optimere algoritmer og hvordan man klassificerer de metoder. Efterfølgende vil jeg undersøge, hvordan matematik bruges til at analysere algoritmers tidskompleksitet med Theta, Omega og Big-Oh notation og spacekompleksitet ift. computerens RAM osv. Efterfølgende vil jeg også undersøge og udforske programmer, der bruges til at benchmarke og sammenligne algoritmer. Til sidst vil jeg undersøge og udforske, hvilke praktiske eksempler der findes på algoritmeoptimering i større softwareprojekter, og hvilke resultater det har givet.

Problemformulering

  • Hvad er en algoritme?
  • Hvordan analyserer man en algoritme?
  • Hvordan kan man analysere algoritmer for at udvikle optimerede algoritmer til praktiske implementationer for at spare på tid og computerplads?
  • Hvordan regner man almindeligt ud og sammenligner tids- og space-kompleksiteter i den virkelige verden for algoritmer?
  • Hvilke praktiske softwareeksempler viser, at algoritmeoptimering har hjulpet projektet?

Fag

Til dette projekt har jeg tænkt mig at bruge Programmering B som mit studieretningsfag og Matematik A som mit A-fag. Grunden til, at jeg bruger programmering, er for at forklare kode og vise eksempler fra praktiske implementationer i virkeligheden. Jeg bruger Matematik A-faget til at forklare matematikken og analysere algoritmerne i matematisk forstand, og for at kunne sætte teori i brug til analysen af algoritmerne implementeret i Programmering.

Metodiske overvejelser i forhold til indsamling af empiri

For at finde viden vil jeg bruge metoden informationssøgning og bøger. For empiri og teori vil jeg læse 'Introductions to Algorithms' (third edition), som giver indsigt i programmering og matematik i pseudokode, samt introduktionen til matematikken for at analysere algoritmers tids- og spacekompleksitet i computere. Følgende vil jeg lave informationssøgning på https://ocw.mit.edu og https://google.com.

Kilder

Den eneste kilde, jeg har lige nu, er 'Introductions to Algorithms', da jeg har læst det meste af bogen. Ellers synes jeg, at emnet er spændende og vil derfor gerne undersøge mere.

Spørgsmål

  • Hvad er de mest almindelige teknikker til algoritmeoptimering, og hvordan kan de klassificeres?
  • Hvordan påvirker valg af datastruktur effektiviteten af en algoritme?
  • Hvilke værktøjer og teknikker kan anvendes til at benchmarke og sammenligne forskellige algoritmer?
  • Hvordan kan parallelisering og caching anvendes til at forbedre ydeevnen af eksisterende algoritmer?
  • Hvilke praktiske eksempler findes der på algoritmeoptimering i store softwareprojekter, og hvad har været resultaterne?