begin process at 2012 05 28 07:11:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

algorithmique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

algorithmique

vendredi 6 janvier 2006 à 12:27:34 | algorithmique

chouchou1978

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
vendredi 6 janvier 2006 à 15:22:33 | Re : algorithmique

ketchupy45

Membre Club
C'est quoi le rapport entre l'entrée et la sortie??
Explique un peu plus en détails j'ai pas compris ce que tu veux
vendredi 6 janvier 2006 à 20:08:05 | Re : algorithmique

Pamaury

Réponse acceptée !
Si j'ai bien comrpis ce que tu veux dire(pseudo C):

typedef struct Tab1D
{
   Array<int> array;
};

Array<Tab1D> Array2D;

void EnumAllPos(int row,Array<int>& cur_list)
{
    if(row==Array2D.size())
      return Print(cur_list);
    int last_index=cur_list.push();

    for(int i=0;i<Array2D[row].Size();i++)
    {
       cur_list[last_index]=Array2D[row].array[i];
       EnumAllPos(row+1,cur_list);
    }
}

Comme ce code est pas très facile à comprendre si tu code pas en C++ voilà le pseudo cod
# array[y][x] correspond à la colonne x et à la ligne y
# array.size est le nombre de lignes
# array[y].size est le nombre de colonne dans la ligne y
Array2D array;

# ref x veut dire qu'on passe la valeur en référence
function EnumAllPos( row: Integer , ref list:Array<int> ): Void
  if row == array.size then
    ret Print(list)
 
  foreach value V of array[row]
    list[row]=V
    call EnumAllPos(row+1 , list )
  end
  ret
end

Et l'appel initial:
list: Array<int>
list.size = array.size
call EnumAllPos( 0, list )

J'espère que c'est bien ce que tu veux faire
en fait il suffit pour chaque ligne de réappeler la fonction pour la ligne suivante en lui passant une liste des entier de la liste en cours et en la mettant en cours selon la valeur de la ligne

A m a u r y
samedi 7 janvier 2006 à 13:05:08 | Re : algorithmique

chouchou1978

Salut et merci

En fait, je vais essayer d'etre plus cair en decrivant ma structure de donnees. J'ai une classe PILE <T> qui est derivee de std::vector <T>. Donc, du C++ ...
Mon tableau est en fait une PILE < PILE <int> >. J'ai donc la methode size() pour connaitre le nombre de lignes, et pour chaque ligne, le nombre de colonnes. J'empile avec l'operateur "<<". Par exemple :
PILE < PILE <int> > app;
app << NULL; // je cree une nouvelle ligne
app(ind) << k; // j'ajoute la valeur k a la ligne ind (a la fin)
En sortie, je voudrais avoir une PILE < PILE <int> > qui donne toutes les solutions possibles d'enumerations comme donne dans l'exemple du 1er message. Il est evidemment possible de connaitre le nombre de possibilites a l'avance

J'avoue que je ne comprens pas tres bien le code que tu m'as donne, alors, si tu pouvais me le reexpliquer, ca m'arrangerait bien.
Merci encore

samedi 7 janvier 2006 à 16:34:54 | Re : algorithmique

MrdJack

"Il est evidemment possible de connaitre le nombre de possibilites a l'avance"
--> si tu multiplies le nombre de colonne de chaques ligne de la liste, tu as ton nombre de combinaison.

2 6
5
4 8
1

-->> 2 * 1 * 2 * 1 = 4 possibilités

2541
2581
6541
6581

voila pour le ptit detail sanqs importance...
samedi 7 janvier 2006 à 17:03:57 | Re : algorithmique

chouchou1978

Oui, sans detailler, la methode, c'est ce que je disais ...
dimanche 8 janvier 2006 à 13:50:47 | Re : algorithmique

Pamaury

Bon je vais essayer de détailler l'algo(qui est pourtant clair je trouve):
Théorie:
A chaque ligne, il a N éléments .
Pour énumérer chaque possibilité, il faut que chaque un élément de chaque ligne apparaisse donc on en choisit un parmis les N possible .
comme on veut énumérer TOUTES les possibilité il faut choisir tour à tour chaqcun des N élément de réappeler l'algorithme à la ligne d'en dessous .

Exemple:
1 2
4 5
6
7 8

liste L={}
->Première ligne: 2 éléments
     On choisit 1: L={1}
       ->Deuxième ligne: 2éléments
            On choisit 4: L={1,4}
              ->Trosième ligne: 1 élément
                   On choisit 6: L={1,4,6}
                     ->Quatrième ligne: 2 éléments
                            On choisit 7:L={1,4,6,7} PREMIRE POSSIBILITE
                            On chosit 8: L={1,4,6,8} DEUXIEME POSSIBILITE
            On chosit 5: L={1,5}
              ->Trosième ligne: 1 élément
                   On choisit 6: L={1,5,6}
                     ->Quatrième ligne: 2 éléments
                            On choisit 7:L={1,5,6,7} TROISIEME POSSIBILITE
                            On chosit 8: L={1,5,6,8} QUATRIEME POSSIBILITE
    On choisit 2: L={2}
       ->Deuxième ligne: 2éléments
            On choisit 4: L={2,4}
              ->Trosième ligne: 1 élément
                   On choisit 6: L={2,4,6}
                     ->Quatrième ligne: 2 éléments
                            On choisit 7:L={2,4,6,7} SINQUIEME POSSIBILITE
                            On chosit 8: L={2,4,6,8} SIXIEME POSSIBILITE
            On chosit 5: L={2,5}
              ->Trosième ligne: 1 élément
                   On choisit 6: L={2,5,6}
                     ->Quatrième ligne: 2 éléments
                            On choisit 7:L={2,5,6,7} SEPTIEME POSSIBILITE
                            On chosit 8: L={2,5,6,8} HUITIEME POSSIBILITE

Et comme l'a dit MrdJack: 2*2*1*2=8 possibilité
J'epsère que c'est clair comme çà

A m a u r y
dimanche 8 janvier 2006 à 16:24:08 | Re : algorithmique

chouchou1978

OK, merci. En fait, l'algo que tu m'avais donne precedemment etait tres clair. Juste une erreur d'implementation ... Corrige, avec ma structure de donnees decrites ci-dessus, ca donne ca :

bool EnumAllPos(int raw, const PILE < PILE <int> > &app, PILE <int> &pile, PILE < PILE <int> > &result)
{
    if( raw == app.size() )
    {
        result << pile;
        return true;
    }

    int i;
    for(i=0;i<app(raw).size();i++)
    {
        pile(raw) = app(raw)(i);
        EnumAllPos(raw+1,app,pile,result);
    }
}

void Test_Enum( void )
{
    PILE < PILE <int> > app;
    app << NULL;
    app(0) << 1;
    app << NULL;
    app(1) << 5;
    app(1) << 8;
    app << NULL;
    app(2) << 12;
    app(2) << 1276;
    app(2) << 3;
    app(2) << 98;
    app << NULL;
    app(3) << 15;
    app(3) << 22;

    int i, tot = 1;
    PILE <int> pi;
    pi.reserve(4);
    for (i=0;i<app.size();i++)
    {
        tot *= app(i).size();
        pi << NULL;
    }

    PILE < PILE <int> > res;
    res.reserve(tot);
    EnumAllPos(0,app,pi,res);

    for (i=0;i<res.size();i++)
        SORTIEMESSAGE("res("<<i<<")  -->  "<<res(i)<<std::endl);
}

Merci pour ton aide ...
dimanche 8 janvier 2006 à 16:33:45 | Re : algorithmique

Pamaury

ligne en anglais c'est pas "row" ?

A m a u r y


Cette discussion est classée dans : nombre, lignes, algorithmique


Répondre à ce message

Sujets en rapport avec ce message

nombre de lignes dans un fichier [ par Boa51 ] bonjour! J'ai un projet à réaliser en MFC et je voudrais savoir si il existe une fonction qui me permet de connaitre le nombre de lignes dans un fichi Compter les lignes d un fichier texte [ par DeepThroat ] Bonjour a tous !J'aimerai trouver une fontion simple qui retourne le nombre de lignes dans un fichier , ou bien qui affiche ce nombre de lignes.j'imag pb recuperer nombre de lignes [ par sergio18 ] Bonjourje fais une classe ou je recupere le contenu d'un fichier texte lignes par lignes. Pour cela,j'utilise la fonction fgets et vu qu'elle ne retou algorithmique svp c urgent [ par blastmanu ] bonjour tt le monde voila je doit faire l'algorithme puis le traduire en C++(langage descriptif) pouvez vous m'aider svp pour faire au moins l'algo.me algo urgent svp [ par blastmanu ] bonjour tt le monde voila je doit faire l'algorithme puis le traduire en C++(langage descriptif) pouvez vous m'aider svp pour faire au moins l'algo.me operateur (-) [ par mat74 ] salut a ts voila je suis en train de créer une classe de gestion des grds nombres et j'ai pas trouver comment definir l'operateur (-)pr faire sa par e Nombre limité de boutons dans Visual C++??? [ par samovian ] Bonjourje dois permettre à l'utilisateur de cliquer sur une grille de 20*20.Pour cela j'ai voulu creer (en utilisant les MFC car je debute en C) les 4 CListBox: Ajouter les lignes devant [ par themaste ] Bonjour à tous!Voila, j'aimerais pouvoir faire une sorte de log dans un listBox.Mais mon pbl, est que je ne sais pas comment faire pour insérer les él Problème de récupération des lignes d'un Edit Multiline [ par LaPatoshe ] Bonjour, j'ai un petit problème car je ne parviens pas à récupérer de façon intacte chacune des lignes rentrées dans un controle Edit en Multiline.Voi probleme de boucle... Urgent ! [ par AshenShugar ] Salut tout le monde,voila, j'ai un morceau de code qui est celui-ci :while ((Ligne 20)) { Ligne = 0; printf("\nSaisissez le nombre de lignes


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales