Algo -> Dénombrer toutes les possibilités et les stocker - Algo - Programmation
Marsh Posté le 15-05-2008 à 17:29:07
Pour faire plus simple et reformuler :
J'ai une série de n tableaux comprenant un nombre x d'éléments (pouvant être différents bien sûr)
je voudrais arriver à stocker toutes les combinaisons possibles de ces n tableaux.
Tain même en écrivant je trouve ça pas clair...
Ya quelqu'un qui a compris ce que je voulais faire au moins ?
Marsh Posté le 15-05-2008 à 17:35:33
Tu connais le nombre de choix pour chaque option ? Si oui chaque option est un tableau contenant les choix, et tu parcours les tableaux dans 5 boucles imbriquées pour générer les combinaisons...
et, comme dirait schnapsmann, c'est bidon, c'est quoi qui te pose problème au juste ?
Marsh Posté le 15-05-2008 à 17:37:02
Ton truc c'est par colonnes ?
tu peux avoir
30 - 37
ou du genre
14 - 61 - 29 - 37 ?
Marsh Posté le 15-05-2008 à 17:37:21
matrice => un tableau a deux dimension matrice[0] contient les choix a afrie en premiere , matrice[1] les seconds...
Code :
|
un truc comme ca ?
Marsh Posté le 15-05-2008 à 17:37:41
R3g a écrit : Tu connais le nombre de choix pour chaque option ? Si oui chaque option est un tableau contenant les choix, et tu parcours les tableaux dans 5 boucles imbriquées pour générer les combinaisons... |
Ce nombre est malheureusement variable.... Un article peut avoir plus ou moins d'options....
De même, selon l'article, chaque option possède plus ou moins de choix...
Donc je peux rien faire de fixe, c'est pour ça que je pensais à de la récursivité....
Marsh Posté le 15-05-2008 à 17:41:32
flo850 a écrit :
|
Bon, je suis pas sûr d'avoir tout capté....
Tu peux détailler un peu tes paramètres stp ? merci
Marsh Posté le 15-05-2008 à 17:43:50
au debut , choix deja fait est un tableau vide
possibilites[0][0] = 4;
possibilites[0][1] = 5;
possibilites[1][0] = 13;
possibilites[1][1] = 14;
possibilites[2][0] = 60;
possibilites[2][1] = 61;
possibilites[3][0] = 28;
possibilites[3][1] = 29;
possibilites[3][2] = 30;
possibilites[3][0] = 35;
possibilites[3][1] = 36;
possibilites[3][2] = 37;
Marsh Posté le 15-05-2008 à 17:44:22
xtof_83 a écrit : Ton truc c'est par colonnes ? |
Non, tu dois avoir un élément de chaque option à chaque fois.
Comme les exemples que j'ai donnés :
4 - 13 - 60 - 28 - 35
4 - 14 - 60 - 28 - 35
dans mon exemple général (et si j'ai bien apris mes leçons de proba) :
4|5|
13|14|
60|61|
28|29|30|
35|36|37|
on a donc 2 x 2 x 2 x 3 x 3 possibilités = 72 combinaisons possibles....
Je commence à m'arracher les cheveux un par un...
Marsh Posté le 15-05-2008 à 17:45:22
backdafuckup a écrit : Faut faire quoi ? fonction récursive ? |
Ca se fait relativement simplement en utilisant un algo récursif super naïf, soit pour construire un arbre (le plus simple) soit pour construire une liste de listes.
Pour le second cas, en Python ça devrait donner un truc du genre:
Code :
|
mais je suis certain que e.g. 0x90 pourrait sortir un algo plus propre
Marsh Posté le 15-05-2008 à 17:45:48
Mais y'a rien de compliqué là, c'est quoi qui te bloque ?
Marsh Posté le 15-05-2008 à 17:56:42
?
Bah faut croire que j'ai tout perdu en algo alors... Et que je sais plus faire que des lamentables interfaces web.... mais je bloque oui....
Je suis en train de tester l'algo de flo850....
Masklinn> Je sais pas lire le python... T'as plus simple ? genre je sais pas moi... vb ?
Marsh Posté le 15-05-2008 à 18:13:12
backdafuckup a écrit : Masklinn> Je sais pas lire le python... T'as plus simple ? genre je sais pas moi... vb ? |
Je crois que ça va pas être possible non.
Marsh Posté le 15-05-2008 à 18:28:47
masklinn a écrit : |
Non je déconnais hein.... Mais tout autre langage "humain" serait acceptable.... (Je ne connais pas du tout la syntaxe python)
Flo850> Ton algo donne ça comme résultat :
4|13|60|28|35|
4|13|60|28|35|36|
4|13|60|28|35|36|37|
4|13|60|28|35|36|37|29|
4|13|60|28|35|36|37|29|30|
4|13|60|28|35|36|37|29|30|61|
4|13|60|28|35|36|37|29|30|61|14|
4|13|60|28|35|36|37|29|30|61|14|5|
Ce qui fait que donc ce n'est pas bon... J'ai traduit ta fonction en vb.net, mais j'ai ptet mal fait qqc :
Code :
|
Voilà... merci de votre aide.... je sens qu'on est pas loin
Marsh Posté le 15-05-2008 à 18:35:15
backdafuckup a écrit : Non je déconnais hein.... Mais tout autre langage "humain" serait acceptable.... (Je ne connais pas du tout la syntaxe python) |
Elle est pas bien compliquée.
def permet de définir une fonction, [] crée un tableau ([[]] crée un tableau vide dans un tableau), if c'est un test booléen, not ça inverse un booléen, for a in b ça permet d'itérer dans la collection b, et a.append(b) ça ajoute b à la fin de a quand a est un tableau.
edit: ah oui, et a[b] ça renvoie l'élément situé à l'index b de la collection a, et a[b:] ça renvoie une slice, un array contenant tous les éléments de l'array a à partir de l'index b inclus (et jusqu'à la fin)
Marsh Posté le 15-05-2008 à 18:46:59
Il manque une réinitialisation qqpart sur l'algo de flo, mais j'arrive pas à trouver.....
Masklinn > et le append([item] + suboption) ça veut dire quoi ?
Sympa la slice, mais je traduis ça comment moi en vb.net ????
Marsh Posté le 15-05-2008 à 19:02:10
backdafuckup a écrit : Il manque une réinitialisation qqpart sur l'algo de flo, mais j'arrive pas à trouver..... Masklinn > et le append([item] + suboption) ça veut dire quoi ? |
[item] crée une liste d'un élément
list + list ça combine deux listes pour en créer une 3e.
Donc [item] + suboption ça ajoute item au début de la liste "suboption", mais en créant une nouvelle liste et non en modifiant suboption.
backdafuckup a écrit : Sympa la slice, mais je traduis ça comment moi en vb.net ???? |
Ben une méthode genre SubList, connerie du style
Marsh Posté le 15-05-2008 à 23:18:21
demain soir je tenterais bien de faire ce truc en vhdl
Spoiler : j'ai une vie passionnante |
Marsh Posté le 16-05-2008 à 09:51:45
Bon, je galère toujours...
je remets mon code VB (dsl Masklinn, j'arrive pas à traduire ton code en VB, ça fait planter le serveur )
pour la fonction de flo850
Code :
|
voici le résultat produit :
4|13|60|28|35|
4|13|60|28|35|36|
4|13|60|28|35|36|37|
4|13|60|28|35|36|37|29|
4|13|60|28|35|36|37|29|30|
4|13|60|28|35|36|37|29|30|61|
4|13|60|28|35|36|37|29|30|61|14|
4|13|60|28|35|36|37|29|30|61|14|5|
Et ça s'arrete la...
Ya donc une réinitialisation qui foire. le truc c'est que si je mets un
nouveauchoix.clear()
Ca fait planter le serveur....
Je suis pas très bon en récursivité, et la je continue de galérer pour des conneries....
Merci
Marsh Posté le 16-05-2008 à 10:08:13
Ca y est !!!!!!!!!
C'était bien un pb de réinitialisation...
Voici le code final en vb.net donc :
Code :
|
Merci à tous, Masklinn et flo pour vos algos, et aux autres aussi pour m'avoir aidé.
A bientôt !
Marsh Posté le 15-05-2008 à 16:53:34
Salut à tous,
Bon, j'ai pas pour habitude de demander pour un algo, mais là je perds pied, pis ça fait très longtemps que j'ai pas fait d'algos de ce type, mais il se trouve que j'en ai besoin...
J'explique le souci.
J'ai en entrée une liste d'options pour un article, chaque option ayant plusieurs choix possible.
Je dois dénombrer toutes les combinaisons possibles d'option pour un article avec cet algo.
Exemple (les choix d'option sont des numéros) :
Pour l'article 1 j'ai la chose suivante :
4|5| OPTION 0
13|14| OPTION 1
60|61| OPTION 2
28|29|30| OPTION 3
35|36|37| OPTION 4
Je dois donc trouver toutes les combinaisons possibles.
Exemple de combinaison :
4 - 13 - 60 - 28 - 35
4 - 14 - 60 - 28 - 35
etc
Voilà, et là je commence à m'arracher les cheveux...
Un ptit coup de main rapide ? (j'ai l'impression que c'est un cas d'école et que j'ai l'air ridicule, c'est horrible.....)
Faut faire quoi ? fonction récursive ?