eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCiekawy problem iteracyjnego zwalniania głębokiego drzewaRe: Ciekawy problem iteracyjnego zwalniania głębokiego drzewa
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
    OSTED!not-for-mail
    From: Borneq <b...@a...hidden.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Ciekawy problem iteracyjnego zwalniania głębokiego drzewa
    Date: Mon, 14 Aug 2017 17:11:42 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 61
    Message-ID: <omsejb$hoj$1@node2.news.atman.pl>
    References: <oms9l6$db4$1@node2.news.atman.pl>
    <d...@g...com>
    <omsd0p$g87$1@node2.news.atman.pl> <omsd87$g87$2@node2.news.atman.pl>
    <7...@g...com>
    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 1502723500 18195 91.239.205.105 (14 Aug 2017 15:11:40
    GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 14 Aug 2017 15:11:40 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101
    Thunderbird/52.2.1
    In-Reply-To: <7...@g...com>
    Content-Language: pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:211055
    [ ukryj nagłówki ]

    W dniu 14.08.2017 o 16:50, M.M. pisze:
    > Jak jest ciąg węzłów z jednym potomkiem, to zwalniaj w pętli, gdy
    > są dwa, to rekurencyjnie - może to wystarczy, nie wiem co dokładnie
    > robisz. 100tys na desktop/laptop to nie jest aż tak dużo.

    No włąśnie, teeen algorytm powinien mniej więcej tak wyglądać.
    100 tys za dużo na stos, nawet 3 tysiące! przechodzi 2 tysiące

    #include <stdint.h>
    #include <random>

    const int height = 2000;
    uint8_t choos[height];

    int active = 0;

    struct Node
    {
    Node()
    {
    active++;
    for (int i=0; i<3; i++)
    children[i] = nullptr;
    }
    ~Node()
    {
    for (int i = 0; i<3; i++)
    if (children[i]) delete children[i];
    active--;
    }
    Node *children[3];
    };

    int main()
    {
    std::mt19937 gen(0);
    std::uniform_int_distribution<int16_t> dis(0, 2);
    std::uniform_int_distribution<int16_t> dis2(1, 2);
    std::uniform_int_distribution<int16_t> disoth(0, 5);
    Node *node;
    Node *child = new Node;
    Node *head = child;
    for (int i = 0; i < height; i++)
    {
    node = child;
    choos[i] = dis(gen);
    child = new Node;
    node->children[choos[i]] = child;
    if (dis(gen) == 0)
    {
    int second = (choos[i] + dis2(gen)) % 3;
    node->children[second] = new Node;
    }
    }
    delete head;
    return 0;
    }




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: