Après avoir exécuté une fonction récursive pour obtenir un arbre généalogique de l'employé / gestionnaire - une autre exigence est arrivée à réserver une structure globale du gestionnaire.
Donc, j'imagine que le tableau d'entrée pour regarder quelque chose comme ça P> < pré> xxx pré>
et la matrice de sortie devra ressembler à ce p> La hiérarchie doit être triée de cette manière pour montrer que le employé C conserve Le rôle du gestionnaire principal à tout moment p>
3 Réponses :
Vous pouvez le faire en deux boucles,
LOOP1: Trouvez le tableau le plus long dans la matrice d'emballage. Ce serait le chemin complet de la position la plus basse du Big Boss. Prenez ceci comme souverain. Il pourrait y avoir plus d'un tableau le plus long, en fonction de vos besoins. P>
LOOP2: Pour chaque tableau, comparez les éléments de la règle que nous avons trouvée, lorsqu'un élément inégalé a été trouvé, ajoutez une null (ou deux nulls avec ID) Elément. P>
BTW, la liste serait une meilleure datrastructure que le (s) tableau (s) pour ce problème. P>
entrée: p>
a-b-c-d-e-f x-c-e y-b-d-f
C'est une bonne idée. Donc, Loop1 - définira l'ensemble des niveaux d'employé / gestionnaire de la hiérarchie. Pour la boucle 2 - Si la situation était plus complexe où C Employé C se trouve à la position [5], puis positionner [2] - est-ce un cas de tri de la matrice afin de garantir que l'employé c est transféré [5]? Quelles informations de la règle seraient utilisées pour aider à faire une correspondance ou non?
Quelles informations dois-je obtenir de la boucle 1 - à part l'acquisition de la longueur la plus longue d'un tableau imbriqué
Dans la boucle 2, comment utiliserais la règle en conséquence - comme chaque ligne peut contenir différents gestionnaires, sous-responsables. Devrais-je commencer à comparer les éléments dans la règle pour voir si leurs positions ont changé?
@TheoldCounty a ajouté un petit exemple.
Puis comparez Y-B-D-F à celui-ci dans chaque élément du 3ème élément, vous obtenez Y-B-NULL-D-NULL-F
@TheoldCounty Si le premier nœud est toujours le plus bas, la comparaison commence à partir du 2e. Sinon, vous devez trouver l'index dans la règle trouvée et ajouter des nœuds nulles principaux.
Je suis un peu confus quant à la façon de faire tout cela en code
^ Veuillez vérifier le code de développement ci-dessous - est la logique correcte de votre solution
jsfiddle.net/y74z42ms/15 - j'ai fait cela - mais les placements nuls ne sont pas corrects - Quel est le problème avec la logique?
Si c'est probablement je dois capturer plusieurs dirigeants - quelle logique serai-je appliquer pour commuter ou incrémenter à un autre pour garder le jeu de données cohérent?
J'ai mis en œuvre quelque chose de très similaire à cette approche en Java - et cela fonctionne pour ces scénarios. "Règles multiples" serait ambiguë, car il y aurait des cas où plus d'une réponse conviendrait.
C'est la première boucle - il semble fournir la règle correctement. J'ai écrit en JavaScript ici -
************** Le dernier code ********************* 17 / 04/2015 P>
http://jsfiddle.net/y74z42ms/25/ P>
pour la boucle 2 - suis-je de boucler à travers chaque élément de tableau et de la règle - et si oui, quelle logique est appliquée pour insérer une entrée nulle? P>
--- Cela semble-t-il correct? p>
Le code tombe en cas de 2e gérants de niveau qui n'apparaissent pas dans la règle. Vous avez mentionné que ses règles multiples probables seront nécessaires - Devrais-je essayer de répertorier des règles entièrement répertoriées et contenant le nombre maximum d'éléments. Cela semble très complexe - comment j'adapterais le code pour enregistrer plusieurs règles et faire des chèques de comparaison contre ces règles
Les résultats deviennent biaisés lorsqu'il trébuche sur "Kopeck" - c'est comme si je devais devoir passer à la règle suivante - ou les résultats à nouveau contre la règle suivante
J'ai essayé de l'envelopper dans une fonction - et de transmettre la sortie à nouveau et à nouveau avec les règles les plus longues trouvées dans la séquence. - Mais aucun affect. jsfiddle.net/y74z42ms/26
Le problème vient de Kopeck - ne faisant pas partie d'une règle - et donc leur placement initial en tant que gestionnaire principal est une Miss
bâtiment sur l'idée de trouver le plus long premier, et de la prendre comme référence pour le futur boss-remplissage, donne le code suivant, qui fonctionne bien pour l'affaire ci-dessus.
L'idée est de construire un "patrons" Table de recherche, construite à partir duquel on trouve le chemin de la feuille à root le plus long. Chaque fois que nous avons un patron qui se trouve dans la table de recherche, nous veillons à ce qu'il apparaisse dans la même position qu'il apparaisse dans le chemin le plus long, rembourrage avec des nulls si nécessaire. P>
Veuillez expliquer comment cette liste contient des informations sur un arbre.
Les employés A et D sont des recrues. Employé B est un manager et un employé C est comme le Big Boss. Les entrées «null» qui doivent être insérées conserveront que, bien que le salaire C gère directement les employés D - employé C soit dans la position de Big Boss toujours
est la hauteur de votre "arbre" toujours 2? et le
C code> sera toujours la racine (uniquement) de l'arborescence?
Ceci est une version simplifiée. Généralement, bien que je pense que vous aurez un gros patron qui est la racine de la traction, mais il y aura plus de gestionnaires sous-niveaux.
Je ne suis pas sûr que la question "est largement applicable à un grand public" - je n'ai jamais vu cette façon de représenter des arbres avant, spécialement si JSON est disponible pour construire une structure hiérarchique réelle ...
Qu'est-ce qu'une "règle multiple"? Pouvez-vous fournir un exemple d'entrée / sortie en modifiant la question?
C'est un cas de recherche de l'élément le plus long en premier - en l'utilisant en règle générale - mais alors quand il trébuche sur un autre élément long pour l'utiliser aussi comme règle.