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 | 6285 (5829) | Lonsarg |
| » | Siol TV STB - softwareOddelek: Omrežja in internet | 10696 (3468) | Klemen Košir |
| » | [C#] izdelava tabeleOddelek: Programiranje | 2086 (1912) | majoneza |
| » | Samba portiOddelek: Omrežja in internet | 1826 (1522) | hruske |
| » | Coding StyleOddelek: Programiranje | 3713 (2905) | 64202 |