J'ai des objets dans une structure arborescente, je voudrais agréger les informations d'état des noeuds enfants et mettre à jour le noeud parent avec l'état agrégé. Disons que le noeud A a les enfants B1, B2 et B1 a C1, C2, C3 comme enfants. Chacun des nœuds a un attribut d'état. Maintenant, si C1, C2, C3 sont toutes terminées, je voudrais marquer B1 comme terminé. Et si C4, C5, C6, C7 sont complets, complétez B2. Lorsque B1 et B2 sont tous les deux remplis, marquez A comme terminée.Algorithme pour agréger les valeurs des noeuds enfant
Je peux passer ces nœuds en mode de force brute et faire des mises à jour, quelqu'un pourrait-il suggérer un algorithme efficace pour le faire.
A { B1 {C1, C2, C3}, B2 {C4, C5, C6, C7} }
Tout ce qui va aider à sauver les cycles de CPU/mémoire. – tech20nn
Quelle est la taille de votre arbre? À quelle fréquence effectuez-vous cette opération? Pouvez-vous permettre une certaine "staleness"? La façon de résoudre cela plus efficacement n'est généralement pas à travers une optimisation de bas niveau, mais en utilisant toutes les connaissances que vous avez sur votre problème. Vous pouvez mettre en cache des résultats dans certains sous-arbres, propager des drapeaux "incomplets" dans l'arbre quand un enfant devient incomplet, etc. –
J'ai environ 5000 arbres. Chaque arbre a de 3 à 4 niveaux de profondeur. Chaque niveau pourrait avoir environ 20-50 nœuds. Je prévois d'exécuter ce processus une fois par jour. Le processus pour les arbres individuels peut être exécuté sur demande. On dirait qu'avec ces données, je n'ai pas besoin de mise en cache, mais je vais l'explorer. Merci de faire ressortir ces paramètres importants. – tech20nn