Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1685 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  "parcours" tableau 2D

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

"parcours" tableau 2D

n°1278218
boubix
Posté le 06-01-2006 à 14:53:59  profilanswer
 

Bonjour a tous,
 
Voila ... J'ai un tableau 2D dont je connais le nombre de lignes et dont chaque ligne a un nombre de colonnes connu. Le nombre de lignes doit pouvoi etre variable entre 2 executions du code. Je voudrais enumerer toutes les possibilites. Un exemple sera plus parlant ...
 
2 6
5
4 8
1
 
(on a : t(0)(0) = 2, t(2)(1) = 8, ...)
 
Je voudrais obtenir en sortie les suites :
2 5 4 1
2 5 8 1
6 5 4 1
6 5 8 1
 
D'avance merci


Message édité par boubix le 06-01-2006 à 15:15:37
mood
Publicité
Posté le 06-01-2006 à 14:53:59  profilanswer
 

n°1278225
macgawel
Posté le 06-01-2006 à 15:03:36  profilanswer
 

Bonjour,
C'est pas très clair... Nombre de lignes et de colonnes variabes, c'est bien ça ? Il y a une limite au tableau (nombre de ligne/col. maxi) ?
Et où en es-tu ? Quelles pistes ? (Rappel : On ne fait pas tout le boulot :ange: )
 
Une possibilité simple-mais pas optimisée :
Un tableau L*C (où L est le nombre maxi de lignes, C le nombre maxi de colonnes), rempli de -1 (par exemple) par défaut.
Ensuite, tu fais deux boucles imbriquées...
 
[Edit]:Autre chose...Change le titre - On saitqu'on est dans "Algo"  :D

Message cité 1 fois
Message édité par macgawel le 06-01-2006 à 15:04:43
n°1278230
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-01-2006 à 15:08:49  profilanswer
 

si ton lagage supporte les tableaux à 2 dimensions (et non vecteurs de vecteurs), ben tu cherches la plus grande dimension des tableau de niveau 2, et tu déclale un tableau comme suit :
 
tab[x, y] avec x = nblignes et y = nbMaxColonnes
 
Ensuite t'as plusqu'à faire une boucle pour recopier les données de ton vecteur de vecteurs dans ce tableau

n°1278248
boubix
Posté le 06-01-2006 à 15:22:37  profilanswer
 

macgawel a écrit :

Bonjour,
C'est pas très clair... Nombre de lignes et de colonnes variabes, c'est bien ça ? Il y a une limite au tableau (nombre de ligne/col. maxi) ?


Pour repondre a tout ca : ma structure de donnees est une classe derivee de std::vector. j'ai donc la methode size() pour connaitre les dimensions de chaque ligne (mon tableau s'apparente en fait a un std::vector <std::vector> de int...). Il y a un nb de lignes maxi, mais pour les colonnes, on ne sait pas (c'est qd meme borne ...).
Ce que je voulais dire dans mon 1er post, c'est que pour les differentes lignes n'ont pas forcement le meme nombre de colonnes.
 

macgawel a écrit :


Et où en es-tu ? Quelles pistes ? (Rappel : On ne fait pas tout le boulot :ange: )


ben je galere un peu pq je vois pas comment gerer ca avec un systeme de boucles ...
 

macgawel a écrit :


Une possibilité simple-mais pas optimisée :
Un tableau L*C (où L est le nombre maxi de lignes, C le nombre maxi de colonnes), rempli de -1 (par exemple) par défaut.
Ensuite, tu fais deux boucles imbriquées...


 
[Edit]:Autre chose...Change le titre - On saitqu'on est dans "Algo"  :D[/quotemsg]

n°1279682
payen
Posté le 09-01-2006 à 16:50:53  profilanswer
 

Alors, j'ai une solution, mais recursive ... Le probleme, c'est, evidemment, que j'ai parfois tendance a exploser la memoire, et niveau rapidite, c'est pas top. Je la donne :
 
PILE <T> est une classe derivee de std::vector ...
 

Code :
  1. bool EnumAllPos(int raw, const PILE < PILE <int> > &app, PILE <int> &pile, PILE < PILE <int> > &result)
  2. {
  3. if( raw == app.size() )
  4. {
  5.  result << pile;
  6.  return true;
  7. }
  8. int i;
  9. for(i=0;i<app(raw).size();i++)
  10. {
  11.  pile(row) = app(raw)(i);
  12.  EnumAllPos(raw+1,app,pile,result);
  13. }
  14. }


 
Avec l'appel :
 

Code :
  1. EnumAllPos(0,app(i),pile_temp,all_pos);


 
Donc, si vous voyez un moyen pour transformer cette petite chose en algo iteratif, ca m'interesserait au plus haut point ...
Merci d'avance ...

Message cité 1 fois
Message édité par payen le 09-01-2006 à 16:52:13
n°1280271
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-01-2006 à 12:06:46  profilanswer
 

En relisant le sujet du topic, je me rends compte que j'avais un peu pas tout compris à la base :D

n°1280287
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-01-2006 à 12:16:06  profilanswer
 

Solution simple :
 
- Largeur ^ Hauteur. C'est la nouvelle dimension 1 de ton tableau
- i = 0. Tant que i < Largeur ^ Hauteur (t1)
- j = 0. Tant que j < Largeur (t2)
- tab[i, j] = oldTab[(i/Largeur^j)%Hauteur][j]
- j = j + 1
- Fin tant que (t2)
- Fin tant que (t1)
 
Regarde ce que ça donne, chuis pas sûr que ça marche, mais ça a l'air pas trop pire :)
 
Ha, et ça c'est pour un array avec un maximum de bruit (toutes lignes et colonnes remplies avec uniquement des valeurs différentes, donc le cas maximum de valeurs)
Ensuite tu fais une recherche des doublons et tu allimentes le tableau final sans ceux-ci.
 
C'est pas ce qu'il y a de plus propre, mais en revanche c'est simple, et certaiement aussi très rapide.


Message édité par Arjuna le 10-01-2006 à 12:17:40
n°1280930
Trap D
Posté le 10-01-2006 à 21:04:58  profilanswer
 

payen a écrit :

Donc, si vous voyez un moyen pour transformer cette petite chose en algo iteratif, ca m'interesserait au plus haut point ...
Merci d'avance ...

Salut
 
Tu peux t'en sortir avec une file, mais ce n'est pas top pour la rapidité.
 
 

Code :
  1. n entier : compte le nombre de lignes du tableau
  2. m entier : compte le nombre de colonnes d'une ligne du tableau
  3. l liste de nombres
  4. F : marqueur de fin d'enfilage (liste nulle ?)
  5. % initialisation de l'algo
  6. enfiler tous les nombres de la première ligne
  7. enfiler le marqueur F
  8. % algo
  9. pour n variant de 2 au nombre de lignes du tableau par pas de 1 faire
  10.   l <- defiler
  11.   tant que l est différente du marqueur de fin d'enfilage
  12.     pour m variant de 1 au nombre de colonnes de la ligne par pas de 1 faire
  13.      enfiler l auquel on ajoute l'élément tab[n,m]
  14.     fin pour
  15.     l <- defiler
  16.   fin tant que
  17.   enfiler F
  18. fin pour
  19. % a la fin tu aura dans ta file toutes les listes de nombres possibles


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  "parcours" tableau 2D

 

Sujets relatifs
passer un tableau et ses valeurs à la page suivante ?Tableau VBS
Classe abstraite et tableau d'objets[VBA]Tableau croisé dynamique sur plage variable
vba word couleur tableauTransféré un tableau entre 2 form ? Pointeur ?
Importer mots d'un fichier texte dans un tableauRécupérer la taille d'un tableau
Comment afficher/récupérer des éléments (POO) d'un tableau[Pascal] Décalaration d'un tableau
Plus de sujets relatifs à : "parcours" tableau 2D


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR