Kombinationen mit Wiederholung

8

Ich benutze Mathematica 7 und mit einer Kombinatorik-Paketfunktion kann ich alle Kombinationen einer bestimmten Zahl aus einer Liste von Elementen erhalten, bei denen die Reihenfolge keine Rolle spielt und es keine Wiederholung gibt. Beispiel:

%Vor%

Ich kann keine Funktion finden, die mir alle Kombinationen einer bestimmten Zahl aus einer Liste von Elementen gibt, bei denen die Reihenfolge keine Rolle spielt und dort eine Wiederholung ist. h. das obige Beispiel würde Elemente wie {a, a, b}, {a, a, a}, {b, b, b} usw. in der Ausgabe enthalten.

Es kann eine benutzerdefinierte Funktion erfordern. Wenn ich mit einem kommen kann, werde ich eine Antwort posten, aber für den Moment sehe ich keine offensichtliche Lösung.

Bearbeiten: Idealerweise enthält die Ausgabe keine Duplizierung einer Kombination, z.  Tupel [{a, b, c, d}, 3] gibt eine Liste zurück, die zwei Elemente wie {a, a, b} und {b, a, a} enthält die aus einer Kombination Sicht sind die gleichen.

    
dbjohn 30.11.2010, 22:12
quelle

4 Antworten

7
%Vor%     
High Performance Mark 30.11.2010, 23:47
quelle
10

Sie können jede Kombination als {na,nb,nc,nd} codieren, wobei na angibt, wie oft a angezeigt wird. Die Aufgabe besteht dann darin, alle möglichen Kombinationen von 4 nichtnegativen ganzen Zahlen zu finden, die sich zu 3 addieren.% Co_de% gibt eine schnelle Möglichkeit, all solche Kombinationen zu erzeugen, bei denen die Reihenfolge keine Rolle spielt, und Sie folgen ihr mit IntegerPartition to verschiedene Aufträge berücksichtigen

%Vor%

Nur zum Spaß, hier ist Timing-Vergleich zwischen IntegerPartitions und Tuples für diese Aufgabe in Log-Sekunden

%Vor%

Ссылка

    
Yaroslav Bulatov 30.11.2010 23:03
quelle
2

Eine leichte Variante der eleganten Methode von High Performance Mark:

%Vor%

Permutationen ist etwas vielseitiger (aber nicht wonach Sie suchen?)

Zum Beispiel:

%Vor%

gibt das folgende

Bearbeiten:

%Vor%

ist wahrscheinlich besser

Bearbeiten-2

Natürlich können auch Fälle verwendet werden. Zum Beispiel

%Vor%

Bearbeiten-3.

Die beiden Ansätze unterscheiden sich, wenn die Liste ein wiederholtes Element enthält. Die Ausgabe von Das folgende (Ansatz 2) enthält zum Beispiel Duplikate (die möglicherweise erwünscht sind oder nicht):

%Vor%

Sie können leicht loswerden:

%Vor%

Der folgende Wert ergibt 'True' (entfernt doppelte Elemente aus der Liste, die für Approach 2 angezeigt wird, und Sortiert die Liste nach Approach 1 (High Performance Mark-Methode):

%Vor%

wie folgt (Entfernen von Duplikaten aus der Ausgabe von Ansatz 2, Sortieren der Ausgabe von Ansatz 1):

%Vor%

Tut mir leid!

    
tomd 03.12.2010 10:00
quelle
1

Hier ist eine einfache Lösung, die die in Mathetmatica integrierten Funktions-Subsets nutzt und somit ein gutes Gleichgewicht zwischen Einfachheit und Leistung bietet. Es gibt eine einfache Bijektion zwischen k-Teilmengen von [n + k-1] und k-Kombinationen von [n] mit Wiederholung. Diese Funktion ändert Teilmengen in Kombinationen mit Wiederholung.

%Vor%

Also

%Vor%

ergibt

%Vor%     
Jeffrey Liese 22.02.2017 08:08
quelle