-
X-Received: by 10.31.183.20 with SMTP id h20mr11861vkf.8.1502879057787; Wed, 16 Aug
2017 03:24:17 -0700 (PDT)
X-Received: by 10.31.183.20 with SMTP id h20mr11861vkf.8.1502879057787; Wed, 16 Aug
2017 03:24:17 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.
iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!border2.nntp.dca1.giganew
s.com!nntp.giganews.com!m34no264675iti.0!news-out.google.com!n39ni67qtf.1!nntp.
google.com!w51no184876qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.
com!not-for-mail
Newsgroups: pl.comp.programming
Date: Wed, 16 Aug 2017 03:24:17 -0700 (PDT)
In-Reply-To: <a...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=89.70.120.200;
posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS
NNTP-Posting-Host: 89.70.120.200
References: <oms9l6$db4$1@node2.news.atman.pl>
<f...@g...com>
<0...@g...com>
<2...@g...com>
<a...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <1...@g...com>
Subject: Re: Ciekawy problem iteracyjnego zwalniania głębokiego drzewa
From: bartekltg <b...@g...com>
Injection-Date: Wed, 16 Aug 2017 10:24:17 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 145
Xref: news-archive.icm.edu.pl pl.comp.programming:211114
[ ukryj nagłówki ]On Wednesday, August 16, 2017 at 12:08:07 PM UTC+2, M.M. wrote:
> On Wednesday, August 16, 2017 at 11:40:04 AM UTC+2, bartekltg wrote:
> > On Wednesday, August 16, 2017 at 11:21:12 AM UTC+2, M.M. wrote:
> > > On Wednesday, August 16, 2017 at 2:52:19 AM UTC+2, bartekltg wrote:
> > >
> > > > Facet tu mówi o tym:
> > > > https://www.youtube.com/watch?v=JfmTagWcqoE
> > > > Ok 16 minuty zaczyna się właściwa cześć, wcześniej konstruuje
> > > > drzewo na mądrych wskaźnikach.
> > > > [...]
> > >
> > > Ja mam pytanie, w jakich zastosowaniach naprawdę jest potrzebne
> > > drzewo na wskaźnikach (jakichkolwiek)? Ja mam drzewka zazwyczaj
> > > na QVectorze, ale mogę też, jako odpowiednik allocatora, szablon
> > > drzewka sparametryzować std::vector, std::array, itd.
> >
> > A co za różnica. Tu masz wskaźniki, u siebie masz indeksy.
> > Na wskaźnikach jest ciut bardziej elastyczne jeśli chodzi
> > o zwalnianie pamięci, ale masz pierdolnik z alokacją.
> > Jeśli zrobisz pulę obiektów, to już w ogole różnicy nie będzie.
> Poza tym
> same zalety. Wszystkie operacje działają szybciej.
Wszytkie operacje poza dodawaniem i usówaniem działąją
tak samo szybko. Jak się postarać, to i dodawanie/usuwanie
nie odbiega tak bardzo.
> Dużo
> mniej pamięci potrzeba.
Dlaczego "dużo"?
@pula obiektów.
> Można zrobić prealokację.
Tak, w obu wersjach można zrobić prealokacje.
> Zwalnianie
> pamięci całego(!) drzewa zajmuje mikrosekundy.
Mało istotne.
To samo możesz zrobić korzystając z puli.
> Gdy mamy
> dużo wyszukiwań w stosunku do modyfikacji (w przypadku drzew
> poszukiwań), to można wektor posortować i szukać binarnie w
> wektorze - a to jest już o wiele szybciej.
WTF.
Jak potem chcesz odzyskać drewo?
> W przypadku
> gdy mamy wiele małych drzewek, to indeksy left, right, parent,
> mogą być typami uint8 lub uint16, to jeszcze bardziej oszczędza
> pamięć.
Już omawialiśmy.
> Jakie są jeszcze zalety... można w czasie O(1) wyszukać
> losowy element.
Nieprawda. Jeśli usuwałes z drzewa, masz wektor wypełniony
zyjącymi wierzchołkami i syfem. Ok, możesz losować do skutku,
dla niezbyt małego stopnia wypełnienia to nadal jest O(1),
ale musizz dodać tam informację, czy wierzchołek żyje.
> Może dla Was te zalety nie mają znaczenia, ale
> dla mnie są bardzo ważne, niektóre programy dzięki temu mogę
> uruchomić na komputerze z mniejszą pamięcią, inne działają np.
> o 10-30% szybciej.
To, że coś jest lepsze w jakimms szczegolnym przypadku
nijak nie oznacza, że jest lepsze. A piszłes ogólnie.
> Poza tym można ustawić wyrównanie. Poza tym malloc ma narzut,
> którego na wek
To nie używaj alokacji za każdym razem ;-)
malloc? w c++? ;-)
> > > W efekcie jest więcej trafień w
> > > cache i drzewko jest w niektórych przypadkach 1.5 raza
> > > szybsze.
> >
> > Tak, jak masz małe drzewo, to jest wiecej trafień.
> Praktyka pokazuje, że gdy mam 1-10mln elementów w drzewie, to działa
> dużo szybciej niż QMap i std::set.
Mam jakieś wątpliwości do Twoich pomiarów, jeśli na dzień dobry
porównujesz zupełnie różne kontenery;-)
>
> > > > Dośc pobieżnie, i jestem niemal pewien, ze kod, który pokazuje
> > > > jest n^2 a nie nlogn ;-) Jeśli mamy wskaźnik na parent to łatwo
> > > > naprawić.
> > > >
> > > > Pomysł, by zwalniać w pętli jeśli jest jeden potomek,
> > > > rekurencyjnie, gdy więcej, nie sprawdzi się:
> > > > /\
> > > > /\
> > > > /\
> > > > /\
> > > > /\
> > > > /\
> > > > /\
> > > > /\
> > > >
> > > > To drzewo też ma głębokość O(n), a zwalniasz je rekurencyjnie.
> > > > (do naprawienia, jeśli masz głęgokość poddrzewa, ale to bardzo
> > > > szczegolny przypadek).
> > >
> > > Ale ostatni potomek też iteracyjnie.
> >
> > Nie rozumiem.
> Gdy jest N dzieci w węźle, to po zwolnieniu N-1 dzieci, mamy tę samą
> sytuację, jakby węzeł od początku miał jedno dziecko, więc możemy
> potraktować to jako rekurencję ogonową.
Pomyśl nad tym głębiej.
Nie wiesz, która gałąź jest tą długą.
Pozdrawiam
Następne wpisy z tego wątku
- 16.08.17 15:46 Borneq
- 16.08.17 16:05 Borneq
- 16.08.17 16:06 bartekltg
- 16.08.17 16:07 M.M.
- 16.08.17 16:11 bartekltg
- 16.08.17 16:22 Borneq
- 16.08.17 16:42 M.M.
- 17.08.17 00:31 bartekltg
- 17.08.17 01:12 M.M.
- 17.08.17 02:46 Borneq
- 17.08.17 08:11 Tomasz Kaczanowski
- 17.08.17 12:26 M.M.
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-03 Re: Tani dodatkowy sim do smartwacha
- 2024-12-03 Wróblewo => Analityk finansowy <=
- 2024-12-03 Praktyczny test GPS...
- 2024-12-02 Tak się sprzedają elektryczne woldzwageny ;-)
- 2024-12-02 Akumulator do Hyundai
- 2024-12-02 Olsztyn => Sales Specialist <=
- 2024-12-02 Poznań => Technical Artist <=
- 2024-12-02 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-02 Kraków => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2024-12-02 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-02 Białystok => Delphi Programmer <=
- 2024-12-02 Poznań => Dyspozytor Międzynarodowy <=
- 2024-12-02 Szczecin => Key Account Manager (ERP) <=
- 2024-12-02 Poznań => Senior PHP Developer <=
- 2024-12-03 Usiłuję zapłacić za energetyzację...