Forum » Programiranje » [c++][alg] pari, mape, paketi
[c++][alg] pari, mape, paketi
Vesoljc ::
da zadovoljimo nekatere bolj napredne uporabnike (a ne yeti? :p) iscem resitev za naslednji problem:
- imamo pare id, string
- ti pari so organizirani v pakete, recimo en paket vsebuje 100 takih parov
- pari se dinamicno ne bodo spreminjali, zato je za iskanje najbolj primeren kak map
- paketi se bodo dinamicno spreminjali, recimo enega umaknemo, drugega dodamo
- uporabnik, ki potrebuje string, ve samo za id, ne ve pa v katerem paketu se par dejansko nahaja, zato potrebujemo eno kombinirano mapo, ki vsebuje vse pare
- problem nastopi, ko moramo paket zbrisati, saj par potrebuje dodaten tag, ki mu pove v katerem paketu se nahaja, tako se pac moramo sprehoditi cez celotno mapo, zato da pare, ki niso vec potrebni, umaknemo
- ena resitev je, da vsak paket ima svoj map, vendar moras v najslabsem primeru, iti cez vse pakete/mape, to pa je po zacetnih izracunih, pocasneje od kombinirane mape z vsemi pari
alternative?
- imamo pare id, string
- ti pari so organizirani v pakete, recimo en paket vsebuje 100 takih parov
- pari se dinamicno ne bodo spreminjali, zato je za iskanje najbolj primeren kak map
- paketi se bodo dinamicno spreminjali, recimo enega umaknemo, drugega dodamo
- uporabnik, ki potrebuje string, ve samo za id, ne ve pa v katerem paketu se par dejansko nahaja, zato potrebujemo eno kombinirano mapo, ki vsebuje vse pare
- problem nastopi, ko moramo paket zbrisati, saj par potrebuje dodaten tag, ki mu pove v katerem paketu se nahaja, tako se pac moramo sprehoditi cez celotno mapo, zato da pare, ki niso vec potrebni, umaknemo
- ena resitev je, da vsak paket ima svoj map, vendar moras v najslabsem primeru, iti cez vse pakete/mape, to pa je po zacetnih izracunih, pocasneje od kombinirane mape z vsemi pari
alternative?
Abnormal behavior of abnormal brain makes me normal...
Vesoljc ::
se to, stevilo aktivnih (nalozenih) paketov bo precej nizko (10), medtem ko stevilo parov na paket bo v rangu nekaj tisoc
Abnormal behavior of abnormal brain makes me normal...
Genetic ::
Za vsak paket imej seznam id-jev od parov id,string, ki so v tem paketu. Pri odstranitvi paketa iz skupne mape odstranis vse pare, ki imajo id v seznamu paketa:
foreach (id in paket.idList) skupnaMapa.Remove(id);
- ne rabis se sprehoditi po celi mapi (O(n)), ampak samo m-krat odstranis par iz mape (O = m*O(1), kjer je m velikost seznama id-jev paketa)
foreach (id in paket.idList) skupnaMapa.Remove(id);
- ne rabis se sprehoditi po celi mapi (O(n)), ampak samo m-krat odstranis par iz mape (O = m*O(1), kjer je m velikost seznama id-jev paketa)
Vesoljc ::
se pravi:
no itaq nisem mislil da bi se sprehajal rocno cez mapo O(n) pa delal compare po kljucu , ker to pac nima smisla...
struct Packet { id PacketName; map<id, string> mData; } struct MainData { map<id, Packet> mPacket; map<id, string> mCombined; } void removepacket(id) { packet = mPacket[id]; for each packet.mData mCombined.remove( packet.mData[idx].id ) }
no itaq nisem mislil da bi se sprehajal rocno cez mapo O(n) pa delal compare po kljucu , ker to pac nima smisla...
Abnormal behavior of abnormal brain makes me normal...
Genetic ::
Se ena opcija: mapo parov id,string imej v vsakem paketu, zraven pa se imej eno mapo id,paket_id:
- brisanje vseh parov v paketu je enostavno - brises paket;
- dostop do stringa z id: preko mape id,paket_id dobis v katerem paketu se dolocen par id,string nahaja, potem pa iz tega paketa preberes ustrezen string.
- brisanje vseh parov v paketu je enostavno - brises paket;
- dostop do stringa z id: preko mape id,paket_id dobis v katerem paketu se dolocen par id,string nahaja, potem pa iz tega paketa preberes ustrezen string.
Thomas ::
Jaz bi pakete ukinil, oziroma bi imel en samo paket.
Potem pa takole strukturo:
id1,address1,length1;id2,address2,length2;id3,address3,length3;id4,address4,length4;...string1;string2;string3;string4;...
S tem bi bilo potem dosti lažje delat. Ane?
Potem pa takole strukturo:
id1,address1,length1;id2,address2,length2;id3,address3,length3;id4,address4,length4;...string1;string2;string3;string4;...
S tem bi bilo potem dosti lažje delat. Ane?
Man muss immer generalisieren - Carl Jacobi
Vesoljc ::
@thomas
ne vem ce :)
sicer je header + data precej uporabna zadeva, ampak tuki res nekako ne vidim, zakaj bi bil to boljsi nacin. pakete rabim, saj nocem imeti vseh nalozenih naenkrat - potreba po modularnosti pac.
ne vem ce :)
sicer je header + data precej uporabna zadeva, ampak tuki res nekako ne vidim, zakaj bi bil to boljsi nacin. pakete rabim, saj nocem imeti vseh nalozenih naenkrat - potreba po modularnosti pac.
Abnormal behavior of abnormal brain makes me normal...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Siol IPV6 in MikrotikOddelek: Omrežja in internet | 5567 (5111) | Lonsarg |
» | Siol TV STB - softwareOddelek: Omrežja in internet | 10471 (3243) | Klemen Košir |
» | [C#] izdelava tabeleOddelek: Programiranje | 1986 (1812) | majoneza |
» | Samba portiOddelek: Omrežja in internet | 1721 (1417) | hruske |
» | Coding StyleOddelek: Programiranje | 3454 (2646) | 64202 |