Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #28592
| Path | csiph.com!goblin2!goblin.stu.neva.ru!news.nask.pl!news.nask.org.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail |
|---|---|
| From | Borneq <borneq@antyspam.hidden.pl> |
| Newsgroups | pl.comp.programming |
| Subject | Jak poskładać rozsypane drzewko? |
| Date | Tue, 17 May 2016 16:15:05 +0200 |
| Organization | ATMAN - ATM S.A. |
| Lines | 57 |
| Message-ID | <nhf91a$pgp$1@node2.news.atman.pl> (permalink) |
| NNTP-Posting-Host | 91.239.205.105 |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8; format=flowed |
| Content-Transfer-Encoding | 8bit |
| X-Trace | node2.news.atman.pl 1463494506 26137 91.239.205.105 (17 May 2016 14:15:06 GMT) |
| X-Complaints-To | usenet@atman.pl |
| NNTP-Posting-Date | Tue, 17 May 2016 14:15:06 +0000 (UTC) |
| User-Agent | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 |
| X-Mozilla-News-Host | news://news.atman.pl:119 |
| Xref | csiph.com pl.comp.programming:28592 |
Show key headers only | View raw
(w C++)
Mam elementy drzewka typy (klucz, klucz parenta), root ma własny klucz i
klucz parenta==NULL. Są umieszczone w pliku losowo, można do
optymalizacji założyć że nie całkiem losowo.
Zabrałem się to tego tak:
klucz jest haszem - stringiem
biorę mapę unordered_map<string, CChainNode*> map;
następnie pierwsza faza:
pętla po wszystkich elementach przy założeniu że trochę jest po kolei:
szukanie parenta i te, które nie znaleziono, dodawane do wektora:
for (int j = 1; j < vecAllElems.size(); j++)
{
CChainNode *elem = vecAllElems[j];
unordered_map<string, CChainNode*>::const_iterator iter =
map.find(elem->strHashPrevBlock);
if (iter == map.end())
{
vecNotFound.push_back(elem);
}
else
{
CChainNode *parent = iter->second;
map[elem->strHashBlock] = elem;
parent->Add(elem);
}
}
Następnie próbowałem, ale to mi nie wychodzi, bo bardzo długo oblicza:
while (foundInRund>0)
{
int j = 0;
foundInRund = 0;
while (j < vecNotFound.size())
{
CChainNode *elem = vecNotFound[j];
unordered_map<string, CChainNode*>::const_iterator iter =
map.find(elem->strHashPrevBlock);
if (iter == map.end())
j++;
else
{
CChainNode *parent = iter->second;
map[elem->strHashBlock] = elem;
vecNotFound.erase(vecNotFound.begin() + j);
foundInRund++;
parent->Add(elem);
break; //from beginning
}
}
}
Skoro jest while (foundInRund>0), to powinien znaleźć wszystkie , choć
to może długo trwać, ale dla niektórych danych znajduje coś za mało.
Jak zrobić? może tworzyć wiele (tysięcy nawet) osobnych niepowiązanych
drzewek, a potem łączyć je w jedno?
Problemem jest to, że często najpierw w pliku występuje child a potem
parent.
Back to pl.comp.programming | Previous | Next — Next in thread | Find similar | Unroll thread
Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 16:15 +0200
Re: Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 17:54 +0200
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 19:03 +0200
Re: Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 19:44 +0200
Re: Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 20:06 +0200
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 20:14 +0200
Re: Jak poskładać rozsypane drzewko? "M.M." <mmarszik@gmail.com> - 2016-05-17 13:32 -0700
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 22:43 +0200
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 22:49 +0200
Re: Jak poskładać rozsypane drzewko? "M.M." <mmarszik@gmail.com> - 2016-05-18 04:59 -0700
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-18 14:27 +0200
csiph-web