Sto cercando un metodo Pythonic per generare tutti gli accoppiamenti unici unidirezionali (dove un pairing è un sistema composto da coppie, e pairwise-unique indica che (a,b) ≠ (b,a)
) per un set contenente anche numero n
articoli.Python: Generazione di tutte le coppie pairwise-uniche
mi piace il codice here:
for perm in itertools.permutations(range(n)):
print zip(perm[::2], perm[1::2])
tranne che genera tutti, abbinamenti a due a due-unici order-unico, o (n/2)!
volte più abbinamenti di quanto io voglio (ridondanza), che, anche se posso filtrare fuori, davvero impantanarsi il mio programma in grande n
.
Cioè, per n = 4
, Cerco il seguente output (12 abbinamenti unici):
[(0, 1), (2, 3)]
[(0, 1), (3, 2)]
[(1, 0), (2, 3)]
[(1, 0), (3, 2)]
[(1, 2), (0, 3)]
[(1, 2), (3, 0)]
[(1, 3), (0, 2)]
[(2, 0), (1, 3)]
[(2, 0), (3, 1)]
[(3, 1), (0, 2)]
[(0, 3), (2, 1)]
[(3, 0), (2, 1)]
noti che (a,b) ≠ (b,a)
.
È possibile? Sto anche bene con una funzione che genera i 3 accoppiamenti unici non-pair per n = 4
dove (a,b) = (b,a)
, poiché è semplice permutare ciò di cui ho bisogno da lì. Il mio obiettivo principale è evitare le permutazioni superflue nell'ordine delle coppie nell'associazione.
Grazie in anticipo per il vostro aiuto e suggerimenti, lo apprezzo molto.
Spiegare la "unicità" degli abbinamenti. Perché [(0, 2), (3, 1)] non è e [(0, 3), (2, 1)] è nella tua lista? –
@RobertLujo L'uguaglianza delle coppie dipende dall'ordine degli elementi accoppiati, ma l'uguaglianza degli accoppiamenti non dipende dall'ordine delle coppie all'interno di quell'accoppiamento. Cioè, '(a, b) ≠ (b, a)' ma '[(a, b), (c, d)] = [(c, d), (a, b)]'. Per i casi specifici che citi, '[(0, 2), (3, 1)]' è rappresentato da '[(3, 1), (0, 2)]'. D'altra parte, '[(0, 3), (2, 1)]' è l'unica rappresentazione di se stesso. – Arman
@Arman: in base a queste definizioni di parità di paia e accoppiamento, i "12 accoppiamenti unici" elencati nella domanda non sono gli unici possibili 12 perché molti hanno equivalenti che differiscono solo nell'ordine delle coppie. Se ciò è corretto, chiamarli "unici" è in qualche modo fuorviante secondo me. Anche questi def non spiegano perché "' [(0, 3), (2, 1)] 'è l'unica rappresentazione di se stesso", perché non è '[(2, 1), (0, 3)] un altro, altrettanto valido? – martineau