Quote (xGurke @ 25 Oct 2014 16:41)
és ezt hogyan helyettesíted / optimalizálod?
az emberek szeretnek generikus dolgokat írni, közzétenni, stb
tényleg jó dolog, az én szakdogám is erről szól -- pluginelhető AI rendszer, problémákkal, keresésekkel, stb, akármilyen .net nyelven lehet írni őket (majd csinálok F#-os example-t is még decemberig)
csak hogy ha megnézzük, generikus = nem optimalizált
mert amikor nekünk szükségünk van valamire, akkor az feltehetőleg nem a világmindenség
pl nézzük az én példámat
"{GÉ} + ({HÁ} * 2)" szintű dolgokat akarok kifejezni
első megoldásként hozzányúlhatok egy for ciklushoz és replacelhetem a betűket (ez egyenlő lesz N darab KERESÉSSEL, M-szer)
utána pedig fogok egy Evaluator szarságot, valami 3rd party full-generikus puccos menő cuccot, ami megoldja nekem
működik, fasza, 10 perc volt, hagynám is így, ha mondjuk kliens oldalon lenne, és a UI-ről valaki 10 másodpercenként egyszer lefuttatná .. mindegy hogy 3 ms, vagy 250 ms
mi a baj? a replace, és hogy a 3rd party feltehetőleg a teljes univerzum megoldására fel van készítve, így Flexert használ, Parsert, minden szart amit tanultunk FONYA-ból, és ezek képesek megoldani a legkomplexebb nyelveket (lvl3 vagy mi)
második megoldásként mondhatom hogy kikapom dictionary-be hogy <G, 0>, <H, 7>, melyik hol van, megspróltam N keresést, jobbról balra (hogy ne baszódjanak el az indexek) behelyettesítem -> bumm 1500x gyorsabb lett (de tényleg xd)
utána keresek vagy írok valami 25 soros Stack-es megoldást, ami evaluálja a kifejezést, mit tudom én mint a lengyel formula (vmi ilyet fogok mindjárt csinálni)
mindig csak abban kell gondolkozni, hogy a kód 10%-a fut az idő 90%-ában (ez amúgy még szerintem 3/97-el is igaz lenne), ha nem az alkalmazás közepén lenne ez a kód és nem futna le mp-enként 400.000-szer, én se basztatnám ezt
legtöbb alkalmazásnál ráereszted a VS Análizátort a programra, és ha megnézed egy sor lesz ami vér vörös, a többi meg ilyen <0.1%, vagy 1%
talán a legjellemzőbb ilyen "hibák" a leggyakoribb higher order parancsok miatt vannak (replace, contains, exists, stb... mindegyik kurvára lineáris és senki nem gondol bele, hogy ezeket előre fel kéne dolgozni)