Quel est le moyen le plus efficace de générer toutes les combinaisons, dispositions et permutations d'un tableau en PHP?Combinaisons, dispositions et permutations en PHP
Répondre
Voici le code pour obtenir toutes les permutations:
http://www.php.net/manual/en/function.shuffle.php#90615
Avec le code pour obtenir le jeu de puissance, les permutations sont celles d'une longueur maximale, le jeu de puissance doit être toutes les combinaisons. Je n'ai aucune idée de ce que sont les dispositions, donc si vous pouvez les expliquer, cela aiderait.
Vous pouvez utiliser cette classe: http://pear.php.net/package/Math_Combinatorics
et de l'utiliser comme:
$combinatorics = new Math_Combinatorics;
$words_arr = array(
'one' => 'a',
'two' => 'b',
'three' => 'c',
'four' => 'd',
);
for ($i=count($words_arr)-1;$i>=1;$i--) {
echo '<br><br>' . $i . ':<br>';
$combinations_arr = $combinatorics->combinations($words_arr, $i);
foreach ($combinations_arr as $combinations_arr_item) {
echo implode(', ', $combinations_arr_item) . '<br>';
}
}
/* Combinations */
function nCr($n, $r)
{
if ($r > $n)
{
return NaN;
}
if (($n - $r) < $r)
{
return nCr($n, ($n - $r));
}
$return = 1;
for ($i = 0; $i < $r; $i++)
{
$return *= ($n - $i)/($i +1);
}
return $return;
}
/* Permutations */
function nPr($n, $r)
{
if ($r > $n)
{
return NaN;
}
if ($r)
{
return $n * (nPr($n -1, $r -1));
}
else
{
return 1;
}
}
Je voudrais suggérer ma solution d'un CombinationsGenerator, qui génère des combinaisons d'éléments du tableau .
Il est limité à toutes les combinaisons sont de la pleine longueur, et ne répète pas n'importe quel élément. Mais je crois que la mise en œuvre ne serait pas trop difficile.
class CombinationsGenerator
{
public function generate(array $list): \Generator
{
if (count($list) > 2) {
for ($i = 0; $i < count($list); $i++) {
$listCopy = $list;
$entry = array_splice($listCopy, $i, 1);
foreach ($this->generate($listCopy) as $combination) {
yield array_merge($entry, $combination);
}
}
} elseif (count($list) > 0) {
yield $list;
if (count($list) > 1) {
yield array_reverse($list);
}
}
}
}
$generator = new \CombinationsGenerator();
foreach ($generator->generate(['A', 'B', 'C', 'D']) as $combination) {
var_dump($combination);
}
Il est dans le style PHP7, il utilise un \Generator
parce que je crois qu'il ya de bonnes raisons de le faire.
- 1. permutations et combinaisons
- 2. combinaisons/permutations sans répétitions selon les groupes
- 3. Recherche de permutations et de combinaisons à l'aide de Python
- 4. Récursivité et permutations
- 5. Dispositions et tailles minimales
- 6. Combinaisons de tableaux PHP
- 7. Permutations de taille variable
- 8. générer intelligemment des combinaisons de combinaisons
- 9. PHP Trouver toutes les combinaisons
- 10. Permutations en python 2.5.2
- 11. permutations en C++
- 12. Quels sont les équivalents Ruby de Python itertools, esp. combinaisons/permutations/groupby?
- 13. Combinaisons jtables et personnalisées
- 14. Générer des combinaisons PHP pour la taille et la couleur
- 15. Calcul des permutations en F #
- 16. ce qui est la colonne de la cellule suivante dans Excel - combinaisons/permutations
- 17. Dispositions de grails et balises META
- 18. sortie Array PHP 2D toutes les combinaisons
- 19. Ruby Programmation et méta-combinaisons
- 20. Permutations F #
- 21. combinaisons linéaires en python/numpy
- 22. Permutations en python, avec une torsion
- 23. Dispositions de flash fluide
- 24. Générer des permutations en utilisant bash
- 25. permutations calculées en utilisant une annotation Java
- 26. Recherche de toutes les permutations dans un tableau PHP imbriqué
- 27. permutations de deux listes en python
- 28. Essayer toutes les permutations
- 29. permutations de BST
- 30. permutations allées mal
bonne recherche VL –