Algorithme php court pour retourner toutes les combinaisons de k éléments de n (coefficient binomial) basé sur la solution java :
$array = array(1,2,3,4,5);
$array_result = NULL;
$array_general = NULL;
function combinations($array, $len, $start_position, $result_array, $result_len, &$general_array)
{
if($len == 0)
{
$general_array[] = $result_array;
return;
}
for ($i = $start_position; $i <= count($array) - $len; $i++)
{
$result_array[$result_len - $len] = $array[$i];
combinations($array, $len-1, $i+1, $result_array, $result_len, $general_array);
}
}
combinations($array, 3, 0, $array_result, 3, $array_general);
echo "<pre>";
print_r($array_general);
echo "</pre>";
La même solution mais en javascript :
var newArray = [1, 2, 3, 4, 5];
var arrayResult = [];
var arrayGeneral = [];
function combinations(newArray, len, startPosition, resultArray, resultLen, arrayGeneral) {
if(len === 0) {
var tempArray = [];
resultArray.forEach(value => tempArray.push(value));
arrayGeneral.push(tempArray);
return;
}
for (var i = startPosition; i <= newArray.length - len; i++) {
resultArray[resultLen - len] = newArray[i];
combinations(newArray, len-1, i+1, resultArray, resultLen, arrayGeneral);
}
}
combinations(newArray, 3, 0, arrayResult, 3, arrayGeneral);
console.log(arrayGeneral);
4 votes
Une préférence pour un langage de programmation ?
9 votes
Comment voulez-vous traiter les lettres en double ?
0 votes
Pas de préférence de langage, je vais le coder en ruby mais une idée générale des algorithmes à utiliser serait bien. Deux lettres de même valeur peuvent exister mais pas la même lettre deux fois.
0 votes
Solution flash as3 stackoverflow.com/questions/4576313/
0 votes
En php, ce qui suit devrait faire l'affaire : stackoverflow.com/questions/4279722/
0 votes
Un peu de ma sagesse Le programme mentionné dans le lien peut être étendu pour résoudre tout problème de nature exponentielle. Voici la structure de base. chamanchindi.blogspot.in/2008/10/
0 votes
Abacus (sur github) une bibliothèque de combinatoire pour Node.JS, Python, PHP, Actionscript (ps je suis l'auteur)
0 votes
@wcm Je n'ai pas trouvé de solution ici pour traiter les lettres en double. Je suis allé de l'avant et j'ai répondu à la question nécessitant les doublons (et nécessitant du C++) : stackoverflow.com/q/29967202/2642059
0 votes
Il y a un bon article convaincant avec ce qui semble être une implémentation efficace en C# ici : msdn.microsoft.com/fr/us/library/aa289166(v=vs.71).aspx