Keresés

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

  • [LOLDMA]

    csendes tag

    válasz F-ECT$ #3787 üzenetére

    aludtam rá egyet, és rájöttem. Az én megoldásom nem darabolja az utazás intervallumot, hanem az elejéből mindig befele húz. Szóval a munkáknak kell egy order by a munka kezdete, és akkor aszt mondod hogy szelektálni tudod azokat a munkákat amik az adott utazáshoz tartoznak.

    a, UTAZÁS magába foglalja a MUNKÁT,
    b, MUNKA magába foglalja az UTAZÁST,
    c, MUNKA előbb kezdődik, mint az UTAZÁS és az UTAZÁS alatt ér véget,
    d, MUNKA az UTAZÁS alatt kezdődik és utána ér véget

    b, eset ekvivalens, a tiszta utazási idő 0.
    a többi eset nem ily egyszerű. Kell két változó, ami az aktuális utazás intervallumra mutat (amit éppen vizsgálunk). Kell még egy változó, amibe belerakjuk még az elején az egész utazás időtartalmát (legyen t változó, t legyen egyenlő utazas vege-utazas eleje). Egyből az elején meg kell adni az éppen aktuális utazás intervallum elejét (e legyen egyenlő utazas eleje) valamint végét (v legyen egyenlo utazas vege)

    Namármost, szépen sorban végigmegyünk a munkákon.
    az a, esetben a t változóból kivonjuk a munka vege-munka eleje-t, azaz a munka időtartalmát, valamint az e változót átállítjuk a munka végére.
    c, esetben ugye a munka előbb kezdődik, mint az aktuális utazás intervallum (de később mint az előző munka) szóval ott csak annyit kell kivonni, amennyivel belelóg a még tiszta utazási időbe. Magyarán kivonjuk t változóból a munka vege-e -t. Ezutan e-t átállítjuk a munka vege-re.
    d, esetben, mivel ugye sorrendben vannak a munkák, ez lesz az utolsó, itt a munka elejétől az utazás végéig levő intervallumot kell már csak kivonni, szóval t változóból kivonjuk a v-munka eleje. És voálá. ami marad a t-ben, az a tiszta utazási idő. Na most rohanok suliba, ígyis elkések.

  • orbano

    félisten

    válasz F-ECT$ #3787 üzenetére

    lehet hogy most késő van és hülyeséget írok, de szerintem az alábbi működne:
    1. lépésben vágnék: minden munkát feldarabolnék az utazások határainál, hogy csak olyan munkadarabjaim legyenek, amik egy adott utazásba beleestek.
    2. készítenék egy halmazt, amibe a tól-ig dátumokat beleteszem (megcímkézve nyilván, hogy tudjam mihez t artoznak, ráadásul tíusosan, azaz megkülönböztethetően a tól és az ig határokat)
    3. készítenék egy vermet (inkább egy sima halmaz talán jobb), vagy mittomén valami spéci adatszerkezetet, amibe pakolászom a tól dátumokat azaz a munkák kezdetét.
    4. elkezdem az algoritmust:
    -végigmegyek a tól-ig dátumokon növekvő sorrendben, a műveleti szabályok:
    a) Első lépésben a halmaz üres, a kezdődátum az utazás kezdete
    b) Ha a halmaz üres, létrehozok egy új "munkanélküli" intervallumot, és megadom kezdőértéknek az aktuális dátumot (ez kezdetben a kezdődátum)
    c) ha tól-t találok, beteszem a halmazba, és lezárom az éppen aktív munkanélküli intervallumot és eltárolom az eredményt adó változóba
    d) ha ig-et találok, kiveszem a tól párját a halmazból. ha nincs benne, az hiba, mert előfeltétel hogy a feladat előbb elkezdődjön, minthogy végetérne (ezt meg is adtad)
    5. a végén kiszedem az eredmények közül a 0 hosszú intervallumokat.
    e) utolsó elemnek az utazás végét veszem, ezzel lezárhatom az esetlegesen aktív munkanélküli intervallumot.

    Példa, az időt reprezentálják egész számok:
    munka1: 5..10
    munka2: 15..20
    utazás: 5..25

    tehát az intervallumok, * az igeket jelöli

    (5,)5,*10,15,*20,(, 25)

    #1: 5-ös utazáskezdet, az leső munkanélküli időszak kezdete 5
    #2: 5-ös tólt találok, a munkanálküli intervallumot lezárom (5..5) és elteszem. vagy nem teszem mert 0 hosszú, valamint felteszem a halmazba az 5-öst
    #3: 10-es záró, kiveszem a párját, a halmazból, ami most üres lesz, tehát intervallumot nyitok 10-től.
    #4: 15-ös tól intervallum, tehát zárom a munkanélküli időszakot és elraktározom (10..15)
    .... innen trivi.

    ez olyasmi lényegében, mint a lengyel forma feldolgozása, csak kicsit spécibb, testreszabott.

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

Hirdetés