-
Data: 2018-03-16 14:26:02
Temat: Re: Jak usunąć najlepiej element z drzewa ?
Od: "M.M." <m...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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;
> }
Najnowsze wątki z tej grupy
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
Najnowsze wątki
- 2025-07-19 Zakrzewo => SAP HCM Consultant <=
- 2025-07-19 Poznań => Konsultant SAP HCM <=
- 2025-07-19 Poznań => SAP HCR Consultant <=
- 2025-07-18 celnicy pobili policjanta
- 2025-07-18 Warszawa => Technik IT - Konfiguracja i Wsparcie Sprzętowe <=
- 2025-07-18 Warszawa => Specjalista ds. Sprzętu IT i Wsparcia Technicznego <=
- 2025-07-18 Białystok => Kotlin Developer <=
- 2025-07-18 Warszawa => Sales Director (Cloud solutions) <=
- 2025-07-18 Spalinowa trauma
- 2025-07-18 Polska => Senior Key Account Manager <=
- 2025-07-18 Białystok => Programista Kotlin <=
- 2025-07-18 Szczecin => Key Account Manager IT <=
- 2025-07-18 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-18 Łódź => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-18 Lublin => Delphi Programmer <=