combinaison de n parmi p (arrangement)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : combinaison de n parmi p (arrangement)

combinaison de n parmi p (arrangement)

par julesMartin » 15 sept. 2016, 13:17

bonjour,

Je cherche à remplir un tableau avec l'ensemble des combinaisons dans l'ordre possible de n parmi p.
J'ai trouvé plusieurs sujets qui proposent une solution mais juste dans le désordre et avec ordre ne fonctionne pas car il y a remise je pense.
exemple : http://www.developpez.net/forums/d10...mi-n-elements/

Code :

Code : Tout sélectionner

$liste2 = array("banane",5,"escalier",9,11); function partition2($index, $p, $n, $ordered, $liste) { global $liste2; if ($index>=$p) {// la liste est construite -> FIN echo implode(" - ", $liste)."<br/>"; return; } // ajoute un nouvel element candidat dans la liste // - sans ordre -> candidat: tous les elements // - avec ordre -> candidat: seulement les elements supérieurs au précédent $start=0; if ($ordered && $index>0) { $start = array_search($liste[$index-1], $liste2) + 1; } for($i=$start;$i<$n;$i++) { $liste[$index] = $liste2[$i]; partition2($index+1, $p, $n, $ordered, $liste); } } partition2(0, 4, count($liste2), $ordered = false, $liste = array());
Ce code propose le calcule sans ordre mais ça ne fonctionne pas pour moi car il remise l'ensemble des numéros.
Ex pour 5 parmi 8 : array(1, 2, 3, 4, 5, 6, 7, 8)
le code avec "$ordered=false" me donne ce type de résultat :
11124
44321
...
Or je cherche a obtenir l'ensemble des combinaisons avec des chiffres distincts.
avec "$ordered=true" il me manque énormément de combinaison car 12345 = 54321

Je pense que ce code est adaptable mais je ne vois pas du tous a quel niveau.
Est-ce que quelqu'un à déjà eu besoin de réaliser ce calcul ? et si oui pouvez vous m'aider a adapter ce code voire le refondre totalement.

info complémentaire : tous les éléments de la liste de départ sont distincts

Merci d'avance