2011-03-18 3 views
0

Existe-t-il un moyen facile de truquer un tableau multidimensionnel de taille inconnue en utilisant un tableau plat? J'ai une application où 90% des utilisations du tableau seraient plus faciles/plus rapides sans utiliser la récursivité, et une seule exigence qui doit ajouter de la profondeur au tableau. La seule façon que je peux penser qu'il serait de garder une liste courante des index de début et indices finaux, où le tableau 1D ressemblerait à ceci:Fake un tableau multidimensionnel avec un tableau plat?

[0] = 1 
[1] = 2 
[2] = 3 
[3] = 4 
[4] = 5 

... et les listes de début/fin ressemblerait à ceci :

Start  End 
-----  --- 
[0] = 1 [0] = 2 
[1] = 3 [1] = 4 

ce qui représenterait un tableau multi-dimension qui ressemble à ceci:

[0] = 1 
[1] = [0] = 2 
     [1] = 3 
[2] = [0] = 4 
     [1] = 5 

cela fonctionnerait avec plus de 2 dimensions, mais à ce moment-là, je vais avoir du mal à déterminer h Pour déterminer à quelle profondeur j'étais donné un index dans le tableau 1D original et les listes de début/fin. J'ai aussi du mal à trouver les termes de recherche à utiliser pour chercher ce genre de chose. Toute orientation générale/idées serait appréciée. Merci. Editer - Pour donner un peu de contexte, il s'agit de prendre en charge les transactions imbriquées dans une implémentation de modèle de commande. Le tableau 1D contient des commandes, et les profondeurs artificielles ne sont là que pour donner des noms à chaque transaction. Puisque les transactions seront utilisées avec parcimonie, il semble évident que passer rapidement par une petite liste d'ints serait plus rapide que de parcourir récursivement un tableau multidimensionnel de commandes, et vérifier à chaque index s'il y avait ou non une seule commande ou tableau de commandes à l'intérieur.

+2

Il me semble que tout gain que vous obtiendriez en évitant la récursivité (et pourquoi auriez-vous besoin de revenir en arrière?) Va être rattrapé par la douleur de maintenir ces niveaux artificiels de «profondeur». –

+0

Pensez-vous que la jonglerie autour de trois tableaux séparés sera plus performante que la récursivité et les tableaux multidimensionnels réels? J'espère que vous faites un benchmarking significatif avant de vous engager dans cette voie. – meagar

+0

@Marc B & @meagar: Veuillez consulter les éditions qui donnent un peu plus de contexte. – Ocelot20

Répondre

0

En général, le stockage des positions finales semble redondant. Un tableau se termine là où commence le tableau suivant, n'est-ce pas? En second lieu, le problème est que pour chaque dimension supplémentaire, vous avez besoin de listes de recherche supplémentaires, sauf si elles ont une taille fixe. Je ne sais pas si cela revient à être plus efficace que votre solution originale.

+0

Avec un tableau 2D, le tableau en cours se termine là où commence le suivant, mais dans un tableau 3D, il peut y avoir deux tableaux à l'intérieur. Ainsi, le premier niveau ne se terminerait pas lorsque le premier imbriqué se terminerait, il se terminerait lorsque le deuxième imbriqué se terminerait. – Ocelot20

+0

@ Ocelot20: Vous avez raison, cela ne vaut que pour la dernière dimension. –

Questions connexes