Erzeugen Sie eine vollständige Kombination ohne zyklische RotationenPython

Python-Programme
Anonymous
 Erzeugen Sie eine vollständige Kombination ohne zyklische Rotationen

Post by Anonymous »

Ich muss eine Binärsequenz einer bestimmten Länge generieren.
Ich verwende die Numpy-Bibliothek, um Kombinationen zu generieren. Ich habe den folgenden Code gefunden:

Code: Select all

np.array(np.meshgrid(*[[1, 0] for x in range(size)])).T.reshape(-1, size)
Es funktioniert, und es funktioniert schnell, aber es erstellt alle Kombinationen einer bestimmten Länge.
if size = 3

Code: Select all

[1 1 1]
[1 0 1]
[0 1 1]
[0 0 1]
[1 1 0]
[1 0 0]
[0 1 0]
[0 0 0]
Ich muss Kombinationen so generieren, dass alle zyklischen Kopien entfernt werden, d. h.:

[1 1 1]
[1 0 1]
[0 1 1], weil [1 0 1] und [1 1 0] zyklische Verschiebungen sind
[0 0 1]
[1 1 0]
[1 0 0]
[0 1 0]
[0 0 0]

Ich muss eine Funktion schreiben, die alle zulässigen Kombinationen beliebiger Länge von 3 bis 1000 Elementen generiert.
Das scheint zu funktionieren:

Code: Select all

def gen_matrix(size):
return np.array(np.meshgrid(*[[1, 0] for x in range(0, size)])).T.reshape(-1, size)

def build_matrix(size_row):
a = gen_matrix(size_row)
kill = True
while kill:
kill = False
for i in a:
if kill:
break
for j in range(1, size_row):
b = np.roll(i, j)
if np.array_equal(i, b):
continue
k = np.where((a == b).all(axis=1))
if np.size(k) > 0:
a = np.delete(a, k[0], 0)
kill = True
return a
Ergebnis:

Code: Select all

[1 1 1 1 1]
[1 0 1 1 1]
[0 0 1 1 1]
[0 1 0 1 1]
[0 0 0 1 1]
[0 0 1 0 1]
[0 0 0 0 1]
[0 0 0 0 0]
Was wäre ein besserer Weg?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post