Performance bei Baumstruktur iterativ



  • Hallo, ich durchlaufe eine n-äre Baumstruktur um diese auf dem Bildschirm darszustellen. Mein erster Ansatz war rekursiv, wollte aber aus performance gründen die Struktur nun iterativ durchlaufen.
    Hier im Forum war ja vor kurzem eine längere Diskussion "rekursiv vs. iterativ", in der es hieß, dass eine iterative Implementierung nicht unbedingt einen Performanceschub bringt. Genau das ist nun bei mir passiert. Extra nochmal als iterativen durchlauf programmiert und die Geschwindigkeit ist ziemlich gleich geblieben.

    struct NodeContainer
    {
       NodeContainer(const int& i, const Position& p, NodeGraphicsItem* n) : index(i), pos(p), fatherNode(n) {}
    
       int index;
       Position pos;
       NodeGraphicsItem* fatherNode;
    }
    
    void traverseIterative()
    {
       std::queue<NodeContainer> queue;
       queue.push_back(NodeContainer(0, Position(0, 0), NULL));
    
       while (!queue.empty())
       {
          const NodeContainer& currentNodeContainer = queue.front();
          const int numberChildren = tree->getNumberChilds(currentNodeContainer.index);
          const Node& node = tree->getNode(currentNodeContainer.index);
    
          Position pos = getCoordinatesOffset(node.angle, node.length) + currentNodeContainer.fatherPos;
    
          NodeGraphicsItem* fatherNode = drawNode(currentNodeContainer.index, pos, currentNodeContainer.fatherNode);
    
          for (int i = 0; i < numberChildren; i++)
             queue.push_back(NodeContainer(tree->getChildIndex(currentNodeContainer.index, i), pos, fatherNode));
    
          queue.pop_front();
       }
    }
    

    Ich denke mal, dass vor allem die Operationen auf der Queue ausbremsen. Was für Möglichkeiten gäbe es, dies effektiver zu machen?

    Gruß HamsterBacke



  • * stack statt queue nehmen
    * reserve aufrufen



  • Ok danke! Werde es später ausprobieren

    Gruß HamsterBacke


Anmelden zum Antworten