Hirdetés

Új hozzászólás Aktív témák

  • Gyuri16
    senior tag

    Üdv Mindenkinek!

    Lenne egy apró, ám annál idegesítőbb problémám...
    Van egy egydimenziós tömböm, amiben számok vannak, és egy szám többször is előfordulhat.
    Ebből kéne kiválogatni, hogy milyen számok vannak és hogy hányszor fordulnak elő. (eloszlás-függvény lényegében)
    Pld. a tömb elemei: [4 , 6 , 4 , 5, 4 , 5 , 9 , 12 , 9] és ebből kéne ezt csinálni -->> 3db 4-es, 2db 5-ös, 1db 6-os, 2db 9-es, 1db 12-es...

    választ előre is köszönöm :R

    tobb egyszeru megoldas is van erre, kellene ismerni a konkret korulmenyeket.

    ha tudod hogy nem tul sok fajta szam lesz (mondjuk max 100) viszont ezekbol sok (ertsd: a legtobb szam tobbszor is lesz), akkor csinalsz egy akkora tombot, kinullazod. aztan veszed a szamaid sorban, es a tombben azon az indexen levo erteket egyel noveled. igy a vegen megkapod a 100as tombben, hogy melyik szambol mennyi volt.

    ha nagy intervallumbol lehetnek a szamok, ill tul nagy pazarlas lenne a tomb (nagy ugrasok vannak a szamok kozott), akkor lancolt listaval lehet probalkozni (a lista minden eleme tartalmazza a szamot, es a gyakorisagat + pointert a kovetkezo elemre). nagyvonalakban:
    x=kovetkezo szam a tombbol
    atfutod a lancolt listat, van e mar ott x ertek
    -ha igen, akkor noveled ott a gyakorisagot
    -ha nem, akkor a megfelelo helyre beszurod (akar rakhatod a vegere is, de ha sorbarendezve lesz, akkor valamivel gyorsabb lesz), es a gyakorisagot beallitod 1-re
    kezded elolrol, amig van szam

    az elso algoritmus linearis idoben fut, viszont a felhasznalt memoria fugg a legnagyobb vart szamtol.
    a masik algoritmus kvadratikus idoben fut, es a memoria linearisan fugg a kulonbozo ertekek szamatol

Új hozzászólás Aktív témák