eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCiekawy problem iteracyjnego zwalniania głębokiego drzewaRe: Ciekawy problem iteracyjnego zwalniania głębokiego drzewa
  • 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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: