Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #28594

Re: Jak poskładać rozsypane drzewko?

Path csiph.com!weretis.net!feeder4.news.weretis.net!news.roellig-ltd.de!open-news-network.org!feed.xsnews.nl!fbe001.ams.xsnews.nl!peer02.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From bartekltg <bartekltg@gmail.com>
Newsgroups pl.comp.programming
Subject Re: Jak poskładać rozsypane drzewko?
Date Tue, 17 May 2016 19:03:07 +0200
Organization ATMAN - ATM S.A.
Lines 92
Message-ID <nhfisc$382$1@node2.news.atman.pl> (permalink)
References <nhf91a$pgp$1@node2.news.atman.pl>
NNTP-Posting-Host 89-73-81-145.dynamic.chello.pl
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 8bit
X-Trace node2.news.atman.pl 1463504588 3330 89.73.81.145 (17 May 2016 17:03:08 GMT)
X-Complaints-To usenet@atman.pl
NNTP-Posting-Date Tue, 17 May 2016 17:03:08 +0000 (UTC)
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0
In-Reply-To <nhf91a$pgp$1@node2.news.atman.pl>
X-Received-Bytes 3364
X-Received-Body-CRC 1915274995
Xref csiph.com pl.comp.programming:28594

Show key headers only | View raw


On 17.05.2016 16:15, Borneq wrote:

Uwaga językowa.

 >          CChainNode *elem = vecAllElems[j];

 >              CChainNode *parent = iter->second;

 >                  CChainNode *parent = iter->second;

Nie używaj tak wskaźników.
Nie dość, że można sobie tym palca odstrzelić,
to jeszcze zmniejsza czytelność i _wydajność_!

W drugim i trzecim przypadku używasz parent tylko raz.
W ogole to nie ejst potrzebne.

 >              CChainNode *parent = iter->second;
 >              map[elem->strHashBlock] = elem;
 >              parent->Add(elem);

   ->

              map[elem->strHashBlock] = elem;
              iter->second->Add(elem);

Referencja... Lepiej, ale też nie jest jakimś szczegolnie dobrym 
rozwiązaniem do wskazywania na obiekt typu vecAllElems[j].

Ja bym pisał vecAllElems[j]. Kompilator to sobie zoptymalizuje.
W ogolnym przypadku, jeśli jesteś pewien, że _nigdy_ w tym
fragmencie kodu nie zmodyfikujesz kontenera, dla większenia
kompaktowośći tekstu użyj (prosząc w komentarzu o wybaczenie) referencji.


Ale nie w tym przypadku:

 > for (int j = 1; j < vecAllElems.size(); j++)
 >      {
 >          CChainNode *elem = vecAllElems[j];

Aż się prosi o

  for (auto itelem = begin(vecAllElems); itelem!=end(vecAllElems); itelem)
  {
Czytelniej, mniej zmiennych dla zmylenia porzeciwnika...

Albo wręcz (tylko nieśredniowieczne kompilatory):

for(auto&& elem: vecAllElems)
{
...
}
tu "elem" jest referencją do kolejnych elementów kontenera.





Problem polega na tym, zę liniowy problem rozwiązujesz kwadratowo!
(find dla każdego elementu).
>
> 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.


Jajpierw wczytaj wszystkie (tak, abyś miał powiązanie klucz->obiekt).
Doraczałbym raczej <klucz, indeks> niż <klucz, wskaźnik>.

Przelatujesz vecAllElems, patrząc na każdym miejscu j na wartość
klucza K. Tworzysz sobie unordered_map  klucz -> indeks w vecAllElems,
(od biedy wskaźnik, ale to odstrzli palucha) z elementami j->k

Przelatujesz drugi raz, tym razem patrząc na parent każdego obiekty.
Ale masz słownik, więc wiesz, pod króym indeksem jest parent.

Całość jest linioiowa, dwa przebiegi.


pzdr
bartekltg








Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


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