Lustigt problem nu löst

Allt om hård- och mjukvara samt övriga it-relaterade diskussioner.

 Moderatorer: Alien, atoms

Lustigt problem nu löst

Inläggav rdos » 2008-04-01 20:36:22

Ah, äntligen kom jag underfund med varför vissa beräkningar har tagit dubbelt så lång tid för varenda version jag lagt till. Det berodde på en simpel nollställning av om en fråga används. Funktionen anropade för varje fråga versionen tidigare för att nollställa, som då gick igenom hela versionsträdet. Det gör att exekveringstiden blir proportionell emot 2 ^ n. Med 31 versioner blir det 2 ^ 31, vilket gjorde att beräkningen tog flera timmar på en dubbel-kärne processor. Nu går samma sak på några sekunder. :wink:
Senast redigerad av rdos 2011-05-04 13:31:50, redigerad totalt 1 gång.
rdos
 
Inlägg: 14158
Anslöt: 2005-10-14
Ort: Eslöv

Re: Lustigt problem nu löst

Inläggav Kvasir » 2008-04-01 21:58:47

rdos skrev:Ah, äntligen kom jag underfund med varför vissa beräkningar har tagit dubbelt så lång tid för varenda version jag lagt till. Det berodde på en simpel nollställning av om en fråga används. Funktionen anropade för varje fråga versionen tidigare för att nollställa, som då gick igenom hela versionsträdet. Det gör att exekveringstiden blir proportionell emot 2 ^ n. Med 31 versioner blir det 2 ^ 31, vilket gjorde att beräkningen tog flera timmar på en dubbel-kärne processor. Nu går samma sak på några sekunder. :wink:


Och så brukar kritiker av komplexitetsteori tjata om att det där med exponentialitet inte är något problem i praktiken, bara i teorin. :)
Senast redigerad av Kvasir 2011-05-04 13:31:50, redigerad totalt 1 gång.
Kvasir
 
Inlägg: 14628
Anslöt: 2007-11-04
Ort: Vilse någonstans mellan coNP och P/poly

Re: Lustigt problem nu löst

Inläggav rdos » 2008-04-01 22:12:14

Kvasir skrev:Och så brukar kritiker av komplexitetsteori tjata om att det där med exponentialitet inte är något problem i praktiken, bara i teorin. :)


Ja, det är lustigt. Jag har nog aldrig råkat ut för ett sådant här problem tidigare som gett så märkbara resultat. Själva nollställningen var bara en enda programrad som anropade en annan metod. Det hela ser mycket enkelt & effektivt ut. Inte speciellt enkelt att hitta heller. Jag började tröttna när en till synes mycket enkel procedur inte var klar på en halvtimme. Då körde jag det hela i debuggern för att se vad som tog sådan förskräcklig tid.

Tänk, jag hade ju inte ens behövt byta dator om jag listat ut detta tidigare. För bara en 5-10 versioner sedan kunde en gammal maskin köra alltsammans hur bra som helst.
Senast redigerad av rdos 2011-05-04 13:31:50, redigerad totalt 1 gång.
rdos
 
Inlägg: 14158
Anslöt: 2005-10-14
Ort: Eslöv

Re: Lustigt problem nu löst

Inläggav Kvasir » 2008-04-01 22:20:50

rdos skrev:Ja, det är lustigt. Jag har nog aldrig råkat ut för ett sådant här problem tidigare som gett så märkbara resultat. Själva nollställningen var bara en enda programrad som anropade en annan metod. Det hela ser mycket enkelt & effektivt ut. Inte speciellt enkelt att hitta heller. Jag började tröttna när en till synes mycket enkel procedur inte var klar på en halvtimme. Då körde jag det hela i debuggern för att se vad som tog sådan förskräcklig tid.


Det låter onekligen väldigt ovanligt att ett så enkelt fel skulle leda till exponentiellt beteende. Det brukar oftast handla om att man använder en exponentiell algoritm när det finns effektivare alternativ eller att själva problemet kräver exponentiell tid.

Tänk, jag hade ju inte ens behövt byta dator om jag listat ut detta tidigare. För bara en 5-10 versioner sedan kunde en gammal maskin köra alltsammans hur bra som helst.


Hur många företag tror du inte har investerat i nya maskiner pga. programfel eller dålig programmering? :)

Nu har du en ny och snabb dator i alla fall, och det är ju alltid trevligt.
Senast redigerad av Kvasir 2011-05-04 13:31:50, redigerad totalt 1 gång.
Kvasir
 
Inlägg: 14628
Anslöt: 2007-11-04
Ort: Vilse någonstans mellan coNP och P/poly

Inläggav nitro2k01 » 2008-04-02 2:08:47

För öfvrigt, utförs beräkningarna på rdos eller något annat OS?
Senast redigerad av nitro2k01 2011-05-04 13:31:50, redigerad totalt 1 gång.
nitro2k01
 
Inlägg: 627
Anslöt: 2007-10-29

Inläggav rdos » 2008-04-02 7:59:45

nitro2k01 skrev:För öfvrigt, utförs beräkningarna på rdos eller något annat OS?


Just nu kör jag bara under Windows. Jag har ingen maskin med 512MB minne som kör med rdos. Annars så tror jag iofs att det skulle fungera, förutsatt att minnet räcker.

Det är iofs oxå ett problem som borde åtgärdas. Det ska inte behövas flera hundra megabyte för att göra dessa analyser, men det är inte lika enkelt att fixa till. Jag lider väl av Microsoft-sjukan när det gäller att skriva minneshungriga applikationer som tar evigheter att köra. :cry:
Senast redigerad av rdos 2011-05-04 13:31:50, redigerad totalt 1 gång.
rdos
 
Inlägg: 14158
Anslöt: 2005-10-14
Ort: Eslöv

Re: Lustigt problem nu löst

Inläggav rdos » 2008-04-02 8:05:36

Kvasir skrev:Det låter onekligen väldigt ovanligt att ett så enkelt fel skulle leda till exponentiellt beteende. Det brukar oftast handla om att man använder en exponentiell algoritm när det finns effektivare alternativ eller att själva problemet kräver exponentiell tid.


Den normala algoritmen kräver bara en tid som är proportionell emot N. Den blev exponentiell för att varje nytt steg gjorde om samma jobb som de tidigare stegen. Rekursiv programmering är ibland förädiskt.

Kvasir skrev:Hur många företag tror du inte har investerat i nya maskiner pga. programfel eller dålig programmering? :)


Säkert massor

Kvasir skrev:Nu har du en ny och snabb dator i alla fall, och det är ju alltid trevligt.


Jo, men dottern vill gärna låna den för att titta på DVD, fast hon fick min gamla. Jag får väl hjälpa henne att skaffa nya högtalare till sin dator.
Senast redigerad av rdos 2011-05-04 13:31:50, redigerad totalt 1 gång.
rdos
 
Inlägg: 14158
Anslöt: 2005-10-14
Ort: Eslöv

Re: Lustigt problem nu löst

Inläggav Kvasir » 2008-04-02 9:25:33

rdos skrev:
Den normala algoritmen kräver bara en tid som är proportionell emot N. Den blev exponentiell för att varje nytt steg gjorde om samma jobb som de tidigare stegen. Rekursiv programmering är ibland förädiskt.



Aha, så istället för ett rekursivt anrop så gjorde du två (eller flera)? Det är nog många som har gått på den niten utan att det är slarvfel, som i ditt fall. Det ser ju inte ut att vara någon stor skillnad. :)
Kvasir
 
Inlägg: 14628
Anslöt: 2007-11-04
Ort: Vilse någonstans mellan coNP och P/poly

Återgå till IT-forum



Logga in