Miért van az, hogy az online Életjátékok gyorsak, amiket pedig én írok, azok lassúak?
Itt van például ez:
A legjobb felbontás majdnem pixeles, és így hatalmas a tábla, mégis maximális sebességgel hasít. Az enyémen például 200*200-as táblán már majdnem egy másodpercig tart egy kör, így döcög. Mi lehet a titok?
Feleslegesen csinálsz dolgokat. Pl lekéred a szomszedko koordinatait egy koordináta pár listába (vagy minek hivjak ezt pythonban)... ez letrehoz tök fleselegesen minden mezore 8+1 objektumot.
Utána vegigmesz ezen a listán.
Felesleges.... cska vegig kene menni a táblán és helyben számolni a szomszedokat, sot ha 4-et már találsz, akkor le is lehet állni... Ekkor egyetlen új objektumot sem hozol létre, ami jelen tős gyorsulás. (Bár én nem pythonozok, de gondolom ott is nagyon számít...)
A fő gond, hogy létrehozol egy nagy tömböt és annak az összes elemén (példád szerint ciklusonként 200*200 lépésben) végigmész, a helyett, hogy csak a sejtekkel foglalkoznál.
Az említett webes példában is például 73*46 cella van, amiben kezdésként 5 sejt helyezkedik el. Melyik az egyszerűbb: végigvizsgálni minden egyes ciklusban a 73*46 cellát, vagy megvizsgálni azt az 5 sejtet?
Nem az a fő gond, hogy végig megy a teljes mátrixon, ez egy mai processzornak semmi. Ha sok az elő sejt, akkor nagyon belassulna egyébként. Mások is végigmennek, lásd a példákat itt:
A gond az, hogy nem csak simán megszámolja a a szomszédokat, hanem külön kigyűjti a szomszédos mezők koordinátáit egy listába, majd azokon vegigmenve számolja meg.
#12: "Melyik az egyszerűbb: végigvizsgálni minden egyes ciklusban a 73*46 cellát, vagy megvizsgálni azt az 5 sejtet?"
Végigvizsgálni, ez az egyszerűbb, ha tényleg az egyszerűséget nézzük. Viszont sajnos sok processzoridőt használ el.
Régi szabály, hogy egy programban vagy időbe, vagy memóriába kerül a feladat megoldása. Eltekintve attól, hogy az erőltetett objektumosdi megzavarja az ifjak fejét, és elfelejtkeznek a régimódi, de még mindig ugyanolyan jól működő elemi megoldásokról, erre a feladatra memória bőven fordítható. Csak akkor sajnos dinamikus listákkal, esetleg bitmaszkokkal kell bűvészkedni, ami nem egyszerű, viszont a szituációk nagyobb részében valószínűleg a listakezeléssel, relációs műveletekkel, elágazásokkal együtt is időt lehet nyerni. Épp ezért ez egy nagyon jó kis gyakorlófeladat az optimalizálásra.
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!