( bucko | 2021. 11. 21., v – 01:43 )

Jézusmáriaszentjózsef! Csak nem OV rejtőzködik a nick mögött? ;)

Bizony, ha így fogod fel, akkor beszóltam. Kinek? Hát annak, aki offtopic köntösbe bújtatva kritizál egy olyan programot, ami egyébként formailag hibátlan, a topicnyitó kérdését maradéktalanul lefedi és pontosan működik. Az ilyen tevékenység nem offtopic, nem kekeckedés, hanem felesleges.

Ezt a megoldást csak azért küldtem, mert feljebb a string vagy numerikus témakör is problémát okozott egyeseknek. Az awk pont jó ebben, de ezt inkább C-ben oldanám meg, mert a topicnyitó állítása szerint: "előfordulásokat most vizsgáljuk így 44 millió példán".

No, a futásidőre is láthattunk egy sikeres ellenpéldát kb. 3380 adatsor felhasználásával. ;) (Ha nem érted: lottóhúzás 1957 óta van vs. "letöltöttem a teljes magyarországi ötös lottóhízások eredményét tartalmazó CSV-t") Tudod, az ifjú titánokat - "most teszteltem le a programot pécén 1,5 M adattal" - már régen is elhajtottam: nekem 10 M adattal kellett futtatnom AIX alatt. Almát a körtével!

Ami meg a későbbiekben sem volt világos - íme egy vektorban számlálás (részlet, C):

ix=0;
for (i=0;i<Count;i++)
{
        if ( adat[i] >= '0' )
        {
                ix<<=8;
                ix+=adat[i];
        }
        else
        {
                tomb[rindex[ix]]++;
                ix=0;
        }
}

ahol

- Count a adat[]-ba beolvasott karakterek száma== adatfájl (unix text, mit a topicnyitóban)

- rindex a reverz index, pl.: rindex[0x0000000000003339]=39

- tomb a 91 elemű számláló vektor

Fogadjunk, hogy ez shell, awk, python stb-hez képest nagyságrendekkel gyorsabban fut! Ráadásul stringből dolgozik, amit nem kell átalakítani az indexeléshez. Az ilyen "sort" futásideje mindig a legkisebb.

A program meg olyan egyszerű, hogy nem is érdemes assemblerben megírni. ;)