algo pour suite logique ?

algo pour suite logique ? - PHP - Programmation

Marsh Posté le 14-06-2013 à 17:16:51    

Bon aujourd'hui, j'ai le cerveau ramoli. Je n'arrive pas à trouver le bon algo pour avoir le résultat de la suite logique suivante.
J'ai besoin de tous les regroupements possibles dans une série de nombre.  
Exemple: 1-3-5-20
Ça devrait donner :
1
1-3
1-3-5
1-3-5-20
1-5
1-5-20
1-20
3
3-5
3-5-20
3-20
5
5-20
20
 
Sachant que dans mon exemple, ce sont des chiffres, mais ça pourrait être des lettres aussi.  
Des idées ?

Reply

Marsh Posté le 14-06-2013 à 17:16:51   

Reply

Marsh Posté le 14-06-2013 à 17:30:21    

En général ce genre d'algo se résout assez facilement en récursif.
 
Visiblement l'ordre ne compte pas, donc je verais bien une fonction récursive qui rend un tableau
 
Exemple en pseudo code :

Code :
  1. function build_regroupements(array_source)
  2.      1st_element = shift(array_source);//vire le 1er element
  3.      if taille(array_source)=0 then
  4.           return array(1st_element)
  5.      else
  6.          sous_regroupements  = build_regroupements(array_source); ///contruit récursivement
  7.          combinatoire = array();
  8.          foreach(sous_regroupements as sous_regroupement) do
  9.               ///Ajoute le sous regroupement dans la liste sans et avec le premier element viré au début
  10.               push(combinatoire, regroupement, array_add(regroupement,1st_element));
  11.         end for
  12.         return combinatoire;
  13. end function


 
ça doit marcher je pense...

Reply

Marsh Posté le 14-06-2013 à 17:46:22    

Me semble qu'il manque quelque chose aussi ...

Reply

Marsh Posté le 14-06-2013 à 18:19:58    

c'est vrai

Code :
  1. function build_regroupements(array_source)
  2.          1st_element = shift(array_source);//vire le 1er element
  3.          if taille(array_source)=0 then
  4.               return array(array(1st_element));
  5.          else
  6.              sous_regroupements  = build_regroupements(array_source); ///contruit récursivement
  7.              combinatoire = array(array(1st_element));
  8.              foreach(sous_regroupements as sous_regroupement) do
  9.                   ///Ajoute le sous regroupement dans la liste sans et avec le premier element viré au début
  10.                   push(combinatoire, sous_regroupement, array_add(sous_regroupement,1st_element));
  11.             end for
  12.             return combinatoire;
  13.     end function


 
trois fois rien quoi :)


Message édité par dreameddeath le 14-06-2013 à 18:20:25
Reply

Marsh Posté le 14-06-2013 à 19:06:42    

ouais j'avais déjà essayé avec cette petite correction. Mais le résultat n'est pas celui recherché.  
Merci quand même.

Reply

Marsh Posté le 14-06-2013 à 19:11:40    

j'ai vérifié (petit essai en php) et pour moi ça marche...
 
D'ailleurs dans ton exemple tu as oublié l'ensemble '1-3-20' :)

Reply

Marsh Posté le 14-06-2013 à 19:25:31    

effectivement :-)
Veux tu me donner exactement le "snippet" que tu as testé. dans mon cas, il manque plusieurs occurences.

Reply

Marsh Posté le 14-06-2013 à 22:48:35    

ou l'inverse :) mets ton code... on essayera de revoir ce qui ne va pas...

Reply

Marsh Posté le 19-06-2013 à 15:10:48    

Excuse du retard, mais merci ça marche.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed