Avatar billede montago Praktikant
15. november 2007 - 11:32 Der er 7 kommentarer og
1 løsning

Optimering af Algoritme

lidt for sjov vil jeg gerne kyle point efter den/dem som kan optimere algoritmen mest

point gives procentvis efter hvor mange flere bolde jeg kan have i luften efter optimering

dvs. den som kommer med den bedste optimering får flest point :)

www.mdk-photo.com/Javascript/Vector2

- målet er at have så mange bolde igang, men uden at det hakker...

Jeg implementere en Timer som viser hvor mange millisekunder hver iteration tager, denne måling bliver derefter benchmarken som vi optimere imod.

målet er 60 fps == 15-16 ms pr run

indtil Timeren er implementeret, kan i jo lege med scriptet...
Avatar billede montago Praktikant
15. november 2007 - 13:13 #1
så er timeren tilføjet...

til dem som ikke lige kan overskue at finde ud af hvor scriptet ligger...
er linkene:

www.mdk-photo.com/Javascript/Vector2/source.js <-- algoritmerne

www.mdk-photo.com/Javascript/Vector2/Timer.js <-- timer objektet
Avatar billede w13 Novice
15. november 2007 - 14:23 #2
Det er jo en halvstor kode og jeg står og skal på arbejde, så jeg kan kun lige nå at gi' dig det her råd:

Du sparer tid for gennemløb af en løkke, ved at lade den tælle ned til 0, eksempelvis kan du rette:

    for(i=0; i<20; i++)
        bc.balls[i].assign("im"+i);

til:

    for(i=20; i>=0; i--)
        bc.balls[i].assign("im"+i);

En do-while-løkke er dog endnu hurtigere end en for-løkke, så du kan bruge:

    i=20;
    do{
        bc.balls[i].assign("im"+(i));
    }while(--i>=0);
Avatar billede montago Praktikant
16. november 2007 - 13:42 #3
Jeps... kender godt de tricks, og benytter dem også i iterator()

tror dog ikke jeg spare på at lave loop unrolling (Duff device) idet der kun er 20 bolde i luften pt...

innerloop kunne måske konstrueres som funktioner som indsættes dynamisk

var script = "function loop_1(){ /*alle operationer for iteration 1*/ }"
script += "function loop_2(){ /*alle operationer for iteration 2*/ }"

osv. hvorefter jeg i iterator() laver en switch som pejer på de forskellige funktions kald...

fuck... det må jeg hjem og prøve (*_*)
Avatar billede montago Praktikant
16. november 2007 - 13:45 #4
Avatar billede montago Praktikant
16. november 2007 - 13:49 #5
desuden lavede du en fejl :D

var i=20;
do{
  bc.balls[i].assign("im" + i);
}while(--i);

så spare man 1 evaluering

alternativet er en For uden re-evaluate af længde/object, som er rigelig hurtig:

for(var i=0,Obj; Obj = bc.balls[i]; i++)
  Obj.assign("im" + i);
Avatar billede w13 Novice
16. november 2007 - 14:08 #6
Men med:
var i=20;
do{
  bc.balls[i].assign("im" + i);
}while(--i);
Kommer du aldrig ned på 0, og der er vel en balls[0]?

Hvor mange bolde kan du ha' nu, før den bli'r for langsom/hakkende?
Avatar billede montago Praktikant
18. november 2007 - 22:51 #7
ahh ja... i-- istedet for --i løser dét problem

---


jeg har pt omkring 20 bolde ved 60 fps... 30-40 fps virker stadig flydende dog...

anyhoo... så er jeg gået lidt videre... en extra dimmension ikke desto mindre !!!

http://www.mdk-photo.com/Javascript/Vector3_2

men samme algoritme (stort set)...
Avatar billede montago Praktikant
30. januar 2008 - 09:11 #8
Muhahaha....
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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