2013-06-04 4 views
1

J'ai implémenté un arbre binaire dans Matlab en utilisant des éléments de type 'struct' comme des noeuds. Un arbre N-nœud a, disons, N structs.Matlab: liste des arbres

Mon problème est que j'ai M tels arbres, chacun ayant un nombre différent de noeuds, N_1, N_2, ..., N_M. Comment puis-je tenir ces arbres dans une liste ou un tableau qui peut être itéré? Plusieurs essais comme la structure des structures n'ont pas semblé fonctionner.

Éditer: Je veux faire quelque chose comme ce qui suit. myClassTree renvoie un arbre avec N_i nodes.

trees = struct; 
for i=1:nTrees 
    tree = myClassTree(train(bags(i,:),:), entropy, depth); 
    trees(i) = tree; 
end 
+0

Pouvez-vous ajouter un échantillon de code? Une structure de structures devrait fonctionner. Nous pouvons également parler de tableaux de cellules. – Pursuit

+0

code ajouté .... – Zoran

Répondre

2

Le plus simple est de créer un tableau de cellules. Il suffit de remplacer trees(i) = tree; par trees{i} = tree; (notez les accolades plutôt que les parenthèses).

Les tableaux de cellules sont utiles lorsque vous souhaitez stocker un tableau de types de données mixtes. Pour accéder aux éléments d'un tableau de cellules, vous pouvez réutiliser les accolades. Par exemple, cela devrait fonctionner comme prévu:

currentTree = trees{someIndex}; 

Le code que vous avez publié crée un tableau de struct, qui ne fonctionne que si les structures ont les mêmes noms de champs.

Si vous le souhaitez (non recommandé), vous pouvez créer une structure de structures, mais en faisant quelque chose comme ceci trees.(['n' sprintf('%04d',i)]) = tree;. (Mais s'il vous plaît ne le faites pas.)

+0

Merci en effet. Les arbres doivent être initialisés comme ceci: trees = {}; – Zoran

+2

En outre, vous améliorerez les performances si vous remplacez «i = 1: nTrees» par «for i = nTrees: -1: 1», en inversant l'ordre de la boucle. Cela préallège naturellement le tableau. – Pursuit

Questions connexes