Die Erzeugung aller Kombinationen, die mindestens ein element einer gegebenen Menge in Matlab
Benutze ich combnk
zu generieren eine Liste von Kombinationen. Wie kann ich die erzeugen eine Teilmenge von Kombinationen, die auch immer gehören bestimmte Werte. Zum Beispiel, für combnk(1:10, 2)
brauche ich nur die Kombinationen enthalten, die 3 und/oder 5. Gibt es einen schnellen Weg, dies zu tun?
- Wenn Sie nicht, zu beschränkt von der Leistung, könnte man nur brute-force, d.h. eine große Anzahl von Kombinationen und dann nur die Auswahl des guten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, in deinem konkreten Beispiel, die Wahl von zwei ganzen zahlen aus der Menge {1, ..., 10}, so dass eine der gewählten zahlen ergeben 3 oder 5 Erträge 9+9-1 = 17 bekannte Kombinationen, so können Sie nur aufzuzählen.
Im Allgemeinen finden alle n-choose-k-Kombinationen aus den ganzen zahlen {1, ..., n} das ganzzahlige m, das ist der gleiche wie der Suche nach dem (n-1)-wählen-(k-1) Kombinationen von Ganzzahlen {1, ..., m-1, m+1, ..., n}.
In matlab, das wäre
(Dieser code ist noch gültig, auch wenn
m
1 oder n.)Für eine brute-force-Lösung, die Sie erzeugen kann, die alle Ihre Kombinationen mit COMBNK dann die Funktionen verwenden, die JEDER und ISMEMBER zu finden, werden nur diejenigen Kombinationen enthalten, eine oder mehrere von einer Teilmenge von zahlen. Hier ist, wie können Sie das mit Ihrer obigen Beispiel:
EDIT:
Für eine elegantere Lösung, es sieht aus wie Steve und ich hatte eine ähnliche Idee. Aber, ich habe verallgemeinert die Lösung, so dass es funktioniert für eine beliebige Anzahl von erforderlichen Elementen und für wiederholte Elemente in
v
. Die Funktion SUBCOMBNK finden Sie alle Kombinationen vonk
Werte aus einem Satzv
dass mindestens einer der Werte im setvSub
:Testen kann man diese Funktion gegen die brute-force-Lösung oben, um zu sehen, dass es gibt dieselbe Ausgabe zurück:
Ich weiter getestet, diese Funktion gegen die brute-force-Lösung mit
v = 1:15;
undvSub = [3 5];
für Werte vonN
im Bereich von 2 bis 15. Die Kombinationen, die geschaffen wurden, waren identisch, aber SUBCOMBNK war deutlich schneller wie angezeigt durch den durchschnittlichen Laufzeiten (in MS) angezeigt unter:Nur zu verbessern, Steve ' s Antwort : in Ihrem Fall (Sie möchten, dass alle Kombinationen mit 3 und/oder 5) es wird
Leicht verallgemeinert für jeden anderen Fall von diesem Typ.