Komme i gang med programmering

Hvis du ikke har programmert før, bør du lese dette.

Dataprogrammer lages ved at man skriver programkode for å fortelle datamaskinen hva den skal gjøre. Fordi det er veldig vanskelig å skrive kode som datamaskinen forstår, er det blitt laget mange programmeringsspråk som er lettere for mennesker å forstå. Et programmeringsspråk består av forskjellige kommandoer som man kan bruke til å instruere datamaskinen. Men datamaskinen selv kan ikke forstå programmeringsspråk, så derfor finnes det egne programmer, såkalte kompilatorer, som oversetter fra programmeringsspråk til kode som datamaskinen forstår.

Det finnes hundrevis av programmeringsspråk, som egner seg til forskjellige ting. Det er umulig å si hvilket språk som er best, men vi anbefaler at man lærer seg C++ hvis man tenker å delta i NIO, fordi C++ er velegnet til algoritmisk programmering. Det er ikke blant enkleste språkene, men det skal gå greit å lære seg det hvis man har en god bok eller nettside om det. Prøv for eksempel http://www.cplusplus.com/doc/tutorial/ eller http://www.cprogramming.com/tutorial.html#c++tutorial.

NIO-oppgavene er kanskje i vanskeligste laget for de som ikke har programmert før, men hvis man er ute etter en utfordring, anbefaler vi å sette i gang med først å lære seg grunnleggende programmering og så ta en kikk på oppgavene.

Editorer, kompilatorer og IDE'er

Man bør altså ha en editor til å skrive koden i, og man må ha en kompilator til å produsere programmer ut i fra koden. Disse kan skaffes separat, men det finnes også programmer som kombinerer disse funksjonene. Sistnevnte kalles en IDE (Integrated Development Environment).

Hvis man bruker Windows, anbefaler vi Microsoft Visual C++ 2005 Express Edition eller Dev-C++ (velg alternativet "Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC").

På Linux bruker man som regel GCC som kompilator, gjerne sammen med make. Populære editorer er blant annet Vim, Emacs, Gedit og Kate.

Bokanbefalinger

Introduction to Algorithms av Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest og Clifford Stein - MIT Press
Algoritmebibelen ved NTNU. Svært god bok som gir en grundig dekning av de fleste emner man vil trenge. Den er imidlertid veldig matematisk orientert, og kan fort virke nokså tung.

Algoritmer og datastrukturer med eksempler i C og Java av Helge Hafting og Mildrid Ljosland - Gyldendal Akademisk / Stiftelsen Tisip
En fin innføring som dekker mye på relativt få sider, og som er ganske lettlest.

Thinking in C++ av Bruce Eckels - tilgjengelig gratis her.
To gode C++-bøker for de litt mer viderekomne.

Flere bokanbefalinger vil komme etterhvert.

Nettsider om algoritmer

Merk: Denne listen er tatt fra hjemmesiden til et av NTNU sine fag om algoritmer, så en del av emnene som dekkes her, er mer avanserte enn det som nivået i NIO tilsier. Vi vil snart omstrukturere listen og legge ut flere linker.

Generelt
  Wikipedia: Algorithms
  NIST: Dictionary of Algorithms and Data Structures (anbefales)
  Online bok om datastrukturer og algoritmer
  Data Structures
  Samling av linker til sider med info om algoritmer
  Animated Algorithms

Sortering
  Sammenligning av algoritmer (java applet)
  Shell Sort (java applet)
  Søketid

Grådighetsalgoritmer
  Huffmankoding
  Huffmankoding (avansert)
  Huffmankoding (Eksempel på anvendelse)

Dynamisk programmering
  Eks. på anvendelsesområde for DP

Geometri/Grafer
  Online bok om graf-teori
  Graf-bibliotek for Python (dokumentasjon)
  Prims algoritme - med flere animasjoner
  Kruskals algoritme med flere animasjoner
  Topologisk sortering

Usenet ("news")
  c.games.d.p.algorithms
  comp.graphics.algorithms
  comp.theory

Hashing
  Diverse materiale
  Pearsons hash (enkel, bra)

Verktøy
  Gato - Visualisering av grafalgoritmer

Diverse
  Hva er datamaskinens fundamentale begrensninger?
  A Compact Guide to Sorting and Searching
  World of Mathematics
  Bogo sort
  Lempel-Ziv koding
  Skip Lists
  Patterns in the Tower of Hanoi Puzzle

Algdat utenfor Gløshaugen
  Prosjekt Appolonius

NP-komplette problemer
  Liste med 88 stykker
  Stas Busygins side om NP-kompletthet
  Complexity Zoo

Hentet fra NIO-diskusjoner

  • Grafer
  • Comparing DNA sequences - longest common subsequence
  • A few puzzles for you
  • Litt om algoritmisk kompleksitet