Permutazioni di un array [chiuso]

-2

Ho una matrice di numeri interi di lunghezza 20, piena di quattordici 0, due 1, due 2 e due 3. È così: [0,0,0,3,0,2,0,0,3,0,0,0,1,0,2,0,0,1,0,0].

Ho bisogno di un modo per elencare tutte le sue 20! / (14! 2! 2! 2!) permutazioni, senza ripetizioni. (Si noti che nella lista ci sono elementi duplicati!)

Sto solo cercando l'idea giusta, non è necessario che tu scriva il codice. Ma se preferisci scrivere il codice, capisco solo C e Java. Grazie:)

    
posta Matteo 22.03.2014 - 17:55
fonte

1 risposta

0

Ho preso in prestito l'algoritmo da link e reso una semplice modifica ad esso in modo da ignorare gli stessi elementi durante lo scambio.

def permute(xs, low=0):
    if low + 1 >= len(xs):
        yield xs
    else:
        for p in permute(xs, low + 1):
            yield p        
        for i in range(low + 1, len(xs)):        
            if xs[low] == xs[i]:
                continue
            xs[low], xs[i] = xs[i], xs[low]
            for p in permute(xs, low + 1):
                yield p        
            xs[low], xs[i] = xs[i], xs[low]

for p in permute([0, 1, 0, 2, 0, 3]):
    print(p)
    
risposta data 22.03.2014 - 18:52
fonte

Leggi altre domande sui tag