Determináns számítási ideje? Részletek lent .
Megpróbálok segíteni:
Először is jó lenne ismerni a programnyelvet.
Mert egyes nyelvek gyorsabbak a másiknál.
A leggyorsabb sztem a c, vagy a c++
Egyszer az volt a feladat, hogy hasonlítsuk összes a c++ és a java mondjuk. És 17 mérés után sem akartuk elhinni hogy gyorsabb a c-nél. Végül csak arra tudtuk fogni a gyorsaságot, hogy java úgy optimalizálta a kódot, hogy használta mindkét processzormagot vagy valami hasonló. Nekünk mondjuk a Runtge-kotta módszernél kellett ezt kipróbálni, nem determináns számításakor.
De nézzük a te feladatodat:
Egy 1000*1000-es mátrixnak határoztad meg a determinánsát:
Gauss elminációval határoztad meg( legalább is remélem, mert Sarrus szabály és kifejtési tételnél túl nagy lenne a pontatlanság). Ebben az esetben nézzük hány műveletet kell elvégezni
Durva becsléssel olyan 5000 millió műveletet. (igazából megtehetnéd, hogy minden műveletnél egy float tipusú változóhoz adjon hozzá egyet. mert jó alap lehet optimalizálásnál.
Hogyan tudod optimalizálni gondolom sebességre akarsz.
-használja ki a processzor mindegyik magját. Azaz a program legyen többszálú
-a memóriában pointerekkel dolgoz
-a programkódban ha olyan programnyelvről van szó, akkor szabadítsd fel a változókat stb.
Ha tényleg 1,5 másodperc alatt ki tudod számítani egy 1000x1000-es mátrix determinánsát, akkor az nagyon jó idő. Én most Maple-lel próbáltam egy 500x500-asat, és 17 másodperc volt. Igaz nincs egy erőművem (2.5GHZ Core i5), de a Maple valószínűleg elég hatékony algoritmust használ.
Persze függ a futásidő a mátrixtól is. Én egy random matrix-szal próbáltam, melyek -100-tol 100-ig tartalmaztak egész értékeket. Szerintem valami hiba lehet az algoritmusodban. Az én random mártixom dererminánsa 1500 jegyű. Miben tárolod az értéket?
1000x1000-es 0 és 1 értékeket tartalmazó mátrix determinánsát 1 perc 34 mp alatt számolta ki a Maple. Az eredmény 1000 jegyű.
Na bocs, hogy csak most reagálok, de kicsit sűrűek voltak a az elmúlt heteim. Amúgy köszi a válaszokat!
Ha tényleg túlzóan kevésnek tűnik az a másfél másodperc, akkor ma előszedem a kódomat és leellenőrzöm mit ronthattam el. Amúgy c++ -ban próbálgattam. Egyetlen tömböt deklarálok és abban ábrázolom a mátrixomat, aldeterminánsokra bontom és az eredményeket mindig vissza írom az eredeti tömbbe.
Ha ilyen módszerrel számolod a determinánst, akkor még sokkal gyanúsabb, hogy rossz a kódod, mivel az 1000-es mátrixhoz 1000db 999-es mátrix determinánsát kell kiszámolni. Ahhoz 999db 998-ast, stb...ez a végén 1000! determináns számítás (ill 1000!/2, de ilyen szinten ez lényegtelen)
1000! egy nagyon nagy szám. Ha csak egy órajel lenne minden művelet az is nagyon sokáig tartana.
Tehát valami nagyon rossz a kódodban. Ha gyorsan szeretnél determinánst számolni akkor pedig gauss eliminációval csináld.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!