Ich habe n Elemente in einer Menge U (wir nehmen an, dass sie durch ein Array der Größe n dargestellt wird). Ich möchte alle möglichen Wege finden, die Menge U in zwei Mengen A und B zu unterteilen, wobei |A| + |B| = n.
Wenn also zum Beispiel U = {a,b,c,d}, wären die Kombinationen:
- A = {a} -- B = {b,c,d}
- A = {b} -- B = {a,c,d}
- A = {c} -- B = {a,b,d}
- A = {d} -- B = {a,b,c}
- A = {a,b} -- B = {c,d}
- A = {a,c} -- B = {b,d}
- A = {a,d} -- B = {b,c}
Beachten Sie, dass die beiden folgenden Fälle als gleichwertig betrachtet werden und nur einer berechnet werden sollte:
Fall 1: A = {a,b} -- B = {c,d}
Fall 2: A = {c,d} -- B = {a,b}
Beachten Sie auch, dass keine der Mengen A oder B leer sein kann.
Die Art und Weise, die ich denke, es zu implementieren ist, indem nur verfolgen Indizes in das Array und verschieben Sie Schritt für Schritt. Die Anzahl der Indizes wird gleich der Anzahl der Elemente in der Menge A sein, und die Menge B wird alle verbleibenden nicht indizierten Elemente enthalten.
Ich habe mich gefragt, ob jemand eine bessere Implementierung kennt. Im suchen für eine bessere Effizienz, weil dieser Code auf eine ziemlich große Menge an Daten ausgeführt werden.
Merci !