J'ai une liste de 15 nombres. Comment puis-je produire les 32 768 combinaisons de ces nombres (c'est-à-dire, n'importe quel nombre d'éléments, dans l'ordre original) ?
J'ai pensé à parcourir les entiers décimaux de 1 à 32768 et à utiliser la représentation binaire de chaque nombre comme filtre pour sélectionner les éléments de liste appropriés. Y a-t-il une meilleure façon de le faire ?
Pour les combinaisons <strong>d'une longueur spécifique</strong>, consultez <a href="https://stackoverflow.com/questions/27974126">Obtenir toutes les combinaisons de longueur n-choose-k de longueur n</a>. Veuillez utiliser cette question pour fermer les doublons si nécessaire.
Lorsque vous fermez des questions sur la combinatoire en tant que doublons, il est très important de s'assurer de ce que l'OP <strong>veut réellement, pas</strong> les termes qui ont été utilisés pour décrire le problème. Il est extrêmement courant que les personnes qui veulent, par exemple, un produit cartésien (voir <a href="https://stackoverflow.com/questions/533905">Comment obtenir le produit cartésien de plusieurs listes</a>) posent des questions sur les "combinaisons".
18 votes
Les lecteurs doivent noter que la question de savoir si les éléments de la liste sont uniques est une considération extrêmement importante, car de nombreux algorithmes compteront alors certaines sous-ensembles (par exemple 'abccc' -> ['', 'a', 'b', 'c', 'c', 'c', 'ac', 'ac', 'ac', ...]. Une solution de contournement simple est simplement de mettre tous les éléments dans un ensemble avant d'obtenir leurs permutations.
0 votes
@ninjagecko Utiliser la bibliothèque Set n'est pas efficace car chaque opération est de l'ordre de O(n) au mieux. Ainsi, ajouter n fonctions à un ensemble est en fait de l'ordre de O(n^2)!
3 votes
En lisant attentivement la question, il semble que l'OP demande le PowerSet de sa liste de 15 nombres, et non pas toutes les combinaisons. Je pense que c'est peut-être la raison pour laquelle les réponses sont si variées.
0 votes
@Scott Biggs: êtes-vous sûr de parler de Python ici? Les insertions et les recherches dans les ensembles sont en moyenne O(1). Ils sont comme des dictionnaires. Ils utilisent le hachage. Python n'a pas de bibliothèque d'ensembles spéciale (elle est dans la bibliothèque standard). Nous insérons des nombres ici, pas des fonctions. (Ce serait toujours inefficace d'utiliser une mémoire en O(2^n); la solution appropriée pour ceux qui veulent des combinaisons plutôt que l'ensemble des puissances est une simple implémentation récursive, ou
produit
, etc.)0 votes
Voir aussi stackoverflow.com/questions/10342939/… .