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

  • dabadab

    titán

    válasz Ron Swanson #4165 üzenetére

    "Kis mennyiségű adatnál szépen le is fut, de ha mondjuk N = több ezer, akkor nem fut le 0,2s alatt... :("

    Ó, hát erre egyszerű a megoldás, a lista tetejéről válassz valamit: [link] :D

    Komolyabbra fordítva a szót, az a gondod, hogy kb. a vendégek számának négyzetével nő az elvégzendő számítások mennyisége. A megoldás az, ha találsz ennél kisebb ordójú algoritmust. Első blikkre ilyen lehet az, ha a vendégeket nem direktben hasonlítod össze egymással, hanem az időintervallummal machinálsz.

    Például csinálsz egy listát, amiben olyan elemek vannak, amik állnak egy időpontból, a már ott lévő vendégek számából és az abban az időpillanatban érkezett vendégek számából és simán ezen a listán mész végig minden egyes vendégre.

    Ez egyébként továbbra is algoritmikus kérdés, nem C++ - specifikus.

    Hogy ontopic legyek, a C++ kódod valami egészen rettenetes és elavult, szóval fogadni mernék, hogy ezt a magyar (felső)oktatás keretében tanultad :DDD, szerintem azt is érdemes jobb átnézni:

    1. TVendegek:
    Minek az a T? Most komolyan? Mitől lesz bárkinek is jobb attól, hogy az összes osztály neve T-vel kezdődik, mint "type" (sőt, "típus"). Szóval legyen inkább Vendegek.
    Miért Vendegek? Egyetlen vendég adatait tárolja, nem többét, szóval legyen inkább Vendeg.
    És persze kódot szigorúan angolul írunk, szóval a végleges változat az a Guest.

    2. erkezes / tavozas
    Ha már név: itt pont van értelme annak, hogy jelöljük, hogy ezek adattagok, szóval m_arrive, m_leave
    Adattagokat csak kivételes esetben érdemes kirakni publikba, ez meg semmiképpen sem az, szóval legyenek csak private-ok (és a private tagokat érdemes a publicok mögé rakni, mert így jobban olvasható a kód: az elején ott van a mindenkit érdeklő rész, a class API-ja, az implementáció meg elfér hátul).

    3. TVendegek(const int E, const int T):
    A constok itt elég feleslegesek (érték szerit átadott primitívekről van szó), a nevek meg lehetnek nyugodtan beszédesek, a C++-ban a scope-ok miatt az is tök jól működik, hogy
    C::C(int x) : x(x) {}
    De mivel a tagok neve pont az előbb kapott egy m_ előtagot, amúgy se lenne névütközés legyen inkább
    Guest(int arrive, int leave)

    ....

    és most mennem kell, majd folytatom, addig a többiek úgyis belekötnek abba, amit írtam :D

    [ Szerkesztve ]

    DRM is theft

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