eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak usunąć najlepiej element z drzewa ? › Re: Jak usunąć najlepiej element z drzewa ?
  • X-Received: by 10.31.161.197 with SMTP id k188mr211830vke.8.1521206762534; Fri, 16
    Mar 2018 06:26:02 -0700 (PDT)
    X-Received: by 10.31.161.197 with SMTP id k188mr211830vke.8.1521206762534; Fri, 16
    Mar 2018 06:26:02 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!go
    blin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.gig
    anews.com!r16no467947qtn.1!news-out.google.com!c39ni832qta.0!nntp.google.com!j2
    3no52151qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-ma
    il
    Newsgroups: pl.comp.programming
    Date: Fri, 16 Mar 2018 06:26:02 -0700 (PDT)
    In-Reply-To: <p8et3h$la0$1@node1.news.atman.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=77.254.42.226;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    NNTP-Posting-Host: 77.254.42.226
    References: <p8cgcv$bd7$1@node1.news.atman.pl> <p8d69b$p3b$1@node2.news.atman.pl>
    <p8dia4$4c4$1@node2.news.atman.pl> <p8dlhd$eah$1@node1.news.atman.pl>
    <p8drp1$d3l$1@node2.news.atman.pl> <p8ds7o$l09$1@node1.news.atman.pl>
    <p8dtuu$f4c$1@node2.news.atman.pl>
    <9...@g...com>
    <p8ee5g$6h9$1@node1.news.atman.pl>
    <9...@g...com>
    <p8epa1$hic$1@node1.news.atman.pl>
    <1...@g...com>
    <p8et3h$la0$1@node1.news.atman.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <b...@g...com>
    Subject: Re: Jak usunąć najlepiej element z drzewa ?
    From: "M.M." <m...@g...com>
    Injection-Date: Fri, 16 Mar 2018 13:26:02 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Lines: 138
    Xref: news-archive.icm.edu.pl pl.comp.programming:212340
    [ ukryj nagłówki ]

    On Thursday, March 15, 2018 at 11:46:10 PM UTC+1, Borneq wrote:
    > W dniu 15.03.2018 o 23:00, M.M. pisze:
    > > Hmmm a po co usuwasz węzeł w drzewie do reprezentacji wyrażeń
    > > arytmetycznych?
    >
    > Po to by zastąpić zmienną całym wyrażeniem.

    Zastanów się, czy na stosie tego nie można zrobić. Bo jeśli się da, to
    zaoszczędzisz sobie mnóstwa pracy. Rozumiesz... notacja polska, albo
    jeszcze lepiej odwrotna notacja polska pana Łukasiewicza, ze stosu
    zdejmujesz operandy, potem operator, wykonujesz operację i wyniki
    wrzucasz znowu na stos i tak w kółko aż na stosie zostanie wynik.

    Pozdrawiam


    > Coś takiego:
    > ma symbolicznie robić operację postawiania:
    > na przykład gdy liczymy pierwiastek z n to ze wzoru (wybierając x
    > początkowe)
    > x:= (x+n/x)/2
    > druga iteracja, podstawiamy wszędzie gdzie x całe wyrażenie:
    > otrzymujemy ((x+n/x)/2+n/((x+n/x)/2))/2
    > możemy dalej
    > (((x+n/x)/2+n/((x+n/x)/2))/2+n/(((x+n/x)/2+n/((x+n/x
    )/2))/2))/2
    >
    > Działa już klonowanie (można podczepić całe drzewko do swojej podgałęzi,
    > jeszcze nie mam tu replace- jest innej wersji , gdzie nie działało
    > klonowanie), trzeba dorobić dziedziczenie:
    > #include <memory>
    > #include <string>
    > #include <vector>
    > #include <assert.h>
    >
    > using namespace std;
    >
    > class Node
    > {
    > vector<shared_ptr<Node>> childs;
    > Node* parent = nullptr;//not shared_ptr! because of memory leaks of
    > circular dependency
    > int level = 0;
    > public:
    > string name;
    > Node(string name)
    > {
    > this->name = name;
    > }
    > ~Node()
    > {
    > printf("delete %s\n",name.c_str());
    > }
    > shared_ptr<Node> cloneOne()
    > {
    > shared_ptr<Node> result = make_shared<Node>(name+"a");
    > return result;
    > }
    >
    > shared_ptr<Node> cloneTree()
    > {
    > shared_ptr<Node> newElem = cloneOne();
    > for (size_t i = 0; i<childs.size(); i++)
    > {
    > shared_ptr<Node> subElem = childs[i]->cloneTree();
    > newElem->AddOneChild(subElem);
    > }
    > return newElem;
    > }
    >
    > void erase()
    > {
    > printf("erase from %s\n", name.c_str());
    > childs.clear();
    > }
    > void deleteChild(int index)
    > {
    > printf("delete child %d from %s - %s\n", index, name.c_str(),
    > childs[index]->name.c_str());
    > childs.erase(childs.begin()+index);
    > }
    >
    > void setLevel(int level)
    > {
    > this->level = level;
    > for (size_t i = 0; i<childs.size(); i++)
    > childs[i]->setLevel(level+1);
    > }
    >
    > void AddOneChild(shared_ptr<Node> node)
    > {
    > childs.push_back(node);
    > node->parent = this;
    > }
    >
    > void AddTree(shared_ptr<Node> node)
    > {
    > shared_ptr<Node> clone = node->cloneTree();
    > AddOneChild(clone);
    > clone->setLevel(level+1);
    > }
    > shared_ptr<Node>& at(int index)
    > {
    > return childs[index];
    > }
    > void print()
    > {
    > for (int i = 0; i<level; i++)
    > printf(" ");
    > printf("%s->",name.c_str());
    > if (parent) printf("%s", parent->name.c_str());
    > printf("\n");
    > for (size_t i=0; i<childs.size(); i++)
    > childs[i]->print();
    > }
    > };
    >
    > int main()
    > {
    > shared_ptr<Node>root,rootB;
    > root = make_shared<Node>("1");
    > root->AddTree(make_shared<Node>("2"));
    > root->AddTree(make_shared<Node>("3"));
    > root->at(0)->AddTree(make_shared<Node>("4"));
    > root->at(0)->AddTree(make_shared<Node>("5"));
    > root->at(1)->AddTree(make_shared<Node>("6"));
    > root->at(1)->AddTree(make_shared<Node>("7"));
    > root->at(1)->AddTree(root);
    > root->print();
    > return 0;
    > }

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

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: