Ho il seguente problema. Ho bisogno di calcolare le permutazioni di un set; tuttavia, l'insieme può contenere due elementi uguali e quindi causare permutazioni ripetute. Ad esempio:Trovare efficienze uniche in modo efficiente
Dato l'insieme [ 0 0 1 2 ]
, le permutazioni includono queste possibilità:
1 2 0 0
1 2 0 0
Tuttavia, vorrei evitare permutazioni identici come questi. In MATLAB posso semplicemente fare questo:
unique(perms([ 0 0 1 2 ]), 'rows')
Ma il problema qui è l'efficienza - Sto facendo questo più volte in un enorme for
ciclo e l'ordinamento previsto dalla unique
è troppo lento. Quindi la mia domanda è: posso calcolare permutazioni uniche di questa natura direttamente senza dover ripetere il risultato? Sto lavorando in MATLAB ma solo una soluzione generale sarebbe probabilmente utile, anche se qualcosa che può essere vettorializzato in MATLAB sarebbe probabilmente l'ideale!
Per quanto posso vedere, le domande esistenti non coprono esattamente questo problema, ma ci scusiamo se prima ci è stata data una risposta.
Quale problema stai veramente cercando di risolvere? Perché hai un ciclo in cui devi trovare permutazioni di array diversi ad alta velocità? – nibot
Buon punto, forse avrei dovuto essere più specifico, anche se diventa un po 'complicato. Sto trovando modi di serie corrispondenti di oggetti tra le immagini, sebbene gli oggetti abbiano una classe associata a loro. Prendo 5 oggetti alla volta dall'insieme A, e trovo tutti i modi di corrisponderli agli oggetti nel set B. Affronto le restrizioni di classe trovando le permutazioni all'interno di ogni classe. Questo è il motivo per cui ci sono zeri: rappresentano un oggetto che non è associato a un altro, ed è per questo che non voglio ripetere tali permutazioni. – jazzbassrob