J'ai une liste de N articles et je me demande comment je peux parcourir la liste pour obtenir chaque combinaison. Il n'y a pas de double, donc j'ai besoin de tout N! commandes. La mémoire supplémentaire n'est pas un problème, j'essaie de penser à l'algorithme le plus simple mais j'ai des problèmes.Algorithme C++ pour N! commandes
Répondre
Bon appel (pour ainsi dire). Pour être juste, l'OP a demandé l'algorithme * le plus simple *. –
C++ STL a next_permutation à cet effet.
expansion sur les réponses des autres, voici un exemple de std :: next_permutation adapté de cplusplus.com
#include <iostream>
#include <algorithm>
using namespace std;
void outputArray(int* array, int size)
{
for (int i = 0; i < size; ++i) { cout << array[i] << " "; }
}
int main()
{
int myints[] = { 1, 2, 3, 4, 5 };
const int size = sizeof(myints);
cout << "The 5! possible permutations with 5 elements:\n";
sort (myints, myints + size);
bool hasMorePermutations = true;
do
{
outputArray(myints, size);
hasMorePermutations = next_permutation(myints, myints + size);
}
while (hasMorePermutations);
return 0;
}
+1 pour fournir un exemple. –
Il ne semble pas y avoir de point dans la variable 'bool'. Vous pouvez juste 'faire {...} while (std :: next_permutation (...));' –
@Charles: C'est vrai, je pourrais le faire. À des fins d'enseignement, j'ai sorti la next_permutation, car c'était l'objet du code. – Bill
algorithme simple en utilisant la récursivité:
pseudocode
getPermutations(CurItemList , CurPermList)
if CurItemList.isempty()
return CurPermList
else
Permutations = {}
for i = 1 to CurItemList.size()
CurPermList.addLast(CurItemList.get(i))
NextItemList = CurItemList.copy()
NextItemList.remove(i)
Permutations.add(getPermutations(NextItemList, CurPermList))
CurPermList.removeLast()
return Permutations
// To make it look better
Permutations(ItemList)
return getPermutations(ItemList, {})
I n'a pas testé, mais devrait fonctionner. Peut-être que ce n'est pas la façon la plus intelligente de le faire, mais c'est un moyen facile. Si quelque chose ne va pas, faites-le moi savoir!
Essayez de construire récursivement l'ensemble des combinaisons avec un nombre fixe d'éléments possibles. L'ensemble de toutes les combinaisons possibles sera l'union des ensembles de combinaisons de 1 élément, 2 éléments, ... jusqu'à N éléments.
Ensuite, vous pouvez attaquer chaque combinaison de taille fixe individuellement.
- 1. Besoin d'un algorithme pour pixelliser une hypersphère n-dimensionnelle
- 2. Comment calculer n log n = c
- 3. Algorithme de clustering rapide (<n^2)
- 4. min-conflits algorithme pour Solve N-Queen Proplem
- 5. algorithme mergesort en C++
- 6. Algorithme C# pour trouver différentes combinaisons possibles
- 7. algorithme pour python itertools.permutations
- 8. N Enregistrements effectués R à la fois Algorithme
- 9. Algorithme de distance de Levenshtein meilleur que O (n * m)?
- 10. Algorithme C# pour colorer un certain pourcentage
- 11. Algorithme pour l'implémentation C# yield statement
- 12. Regex (C#): Remplacer \ n avec \ r \ n
- 13. algorithme pour k-Fibonacci
- 14. Algorithme Grassfire en C++
- 15. algorithme spirale en C#
- 16. algorithme pour les combinaisons dynamiques
- 17. Comment écrire un algorithme binaire pour C/C++
- 18. meilleur algorithme pour l'échange?
- 19. algorithme flashsort
- 20. Existe-t-il un algorithme O (nlog (n)) pour inverser une liste simplement liée?
- 21. Un algorithme pour convertir un nombre base-10 en un nombre base-N
- 22. Qu'est-ce qu'un algorithme pour minimiser certaines distances D entre N éléments?
- 23. Bit twiddling en C: comment convertir 2^N en N?
- 24. Démontrer ou réfuter n^2 - n + 2 ∈ O (n)
- 25. Latex: page n de m pour \ frontmatter et page n de m pour \ mainmatter
- 26. aide pour l'exécution d'un algorithme
- 27. Générer des nombres aléatoires de -n à n dans C
- 28. Comment modéliser une relation n-à-n en Objective-C?
- 29. Algorithme de rupture d'optimisation C
- 30. URL Slugify algorithme en C#?
est-ce une combinaison ou une permutation? – sud03r
Voir aussi une explication de deux algorithmes différents à http://stackoverflow.com/questions/352203/generating-permutations-lazily/ – ShreevatsaR