Avatar billede jagdos Nybegynder
20. februar 2010 - 15:37 Der er 6 kommentarer og
1 løsning

Variabel type til programmerings-konkurrence

Jeg deltager for første gang i en programmerings-konkurrence (dansk datalogi dyst), og jeg er kommet til det punkt hvor jeg har løst begge opgaver men gerne vil optimere dem lidt, og jeg har en mistanke om at mine programmer godt kan bruge en del hukommelse.

Derfor tænkte jeg at det vel kunne være smart at lave alle ints om til short ints og dermed bruge mindre hukommelse.

Jeg har dog fundet nogle steder på internettet hvor der står at short ints får programmet til at køre langsommere, og pointgivingen afhænger også af programmets kørsels-tid.

Faktisk er jeg heller ikke helt sikker på hvad hukommelses forbruget betyder for pointgivningen...

Er der nogen der har nogle erfaringer her?
Avatar billede arne_v Ekspert
20. februar 2010 - 15:43 #1
Medmindre vi taler om array med millioner af elementer, så er pladsbesparelsen ved at skifte fra 32 bit til 16 bit int's ubetydelig.

(for normale PC'ere - det kan være anderledes i en embedded dippedut)

Jeg kender ikke konkurrencens kriterier, men hvis de er fornuftige, så lægges der vægt på gode algoritmer og læsbar kode - ikke mikrooptimering.
Avatar billede jagdos Nybegynder
20. februar 2010 - 15:54 #2
Det største jeg har er nok
static short int matrix[2001][2001];

Den blev jeg nødt til at lave static for at programmet ikke skulle crashe...

Jeg valgt at definere mine arrays sådan at de i hvert fald er store nok dvs. hvis jeg får at vide at N er mellem 1 og 2000, så laver jeg et array n[2001];

Er der okay at gøre sådan? eller skal man lave dynamiske arrays?
Avatar billede arne_v Ekspert
20. februar 2010 - 16:02 #3
Det array har 4 millioner elementer - det er 16 MB med 32 bit int og 8 MB med 16 bit int.

Jeg gætter på at det 8 MB ikke gør den store forskel på din PC.

:-)

Men på den anden side kan du godt forsvare at gøre så store arrays til short int, hvis de ikke skal have større værdier end der kan være i en short int.
Avatar billede arne_v Ekspert
20. februar 2010 - 16:02 #4
Dynamisk allokering lyder smart hvis du i de fleste tilfælde kun skal bruge betydeligt minde data.
Avatar billede arne_v Ekspert
20. februar 2010 - 16:03 #5
At bruge en dimension på 2001 fordi index er 1-2000 derimod lyder meget slemt programmeringsmæssigt.
Avatar billede jagdos Nybegynder
20. februar 2010 - 16:16 #6
Okay, jeg tror jeg vil kigge lidt på dynamisk allokering af arrays :)

Så smid et svar og mange tak for hjælpen!
Avatar billede arne_v Ekspert
20. februar 2010 - 17:22 #7
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester