Mam następujący problem. Muszę obliczyć permutacje zestawu; jednak zestaw może zawierać dwa elementy, które są takie same i dlatego powodują powtarzające się permutacje. Na przykład:Znalezienie unikalnych permutacji sprawnie
Biorąc pod uwagę zestaw [ 0 0 1 2 ]
, permutacje obejmują te możliwości:
1 2 0 0
1 2 0 0
Jednak chciałbym, aby uniknąć identycznych permutacje, takie jak te. W programie MATLAB może po prostu to zrobić:
unique(perms([ 0 0 1 2 ]), 'rows')
Ale tu problem jest wydajność - Robię to wielokrotnie w ogromnym for
pętli i sortowania wymagane przez unique
jest zbyt powolny. Moje pytanie brzmi: czy mogę obliczyć unikatowe permutacje tego rodzaju: bezpośrednio bez konieczności przechodzenia przez wynik później? Pracuję w MATLAB-ie, ale ogólne rozwiązanie prawdopodobnie byłoby pomocne, chociaż coś, co można wektoryzować w MATLAB-ie, byłoby prawdopodobnie idealne!
O ile mi wiadomo, istniejące pytania nie obejmują dokładnie tego problemu, ale przeprosiny, jeśli wcześniej udzielono na nie odpowiedzi.
Jaki problem próbujesz rozwiązać? Dlaczego masz pętlę, w której musisz znaleźć permutacje różnych macierzy z dużą prędkością? – nibot
Dobrze, może powinienem być bardziej konkretny, chociaż robi się trochę nieporządny. Znajduję sposoby odpowiadania zestawom obiektów między obrazami, chociaż obiekty mają przypisaną do nich klasę. Biorę 5 obiektów naraz od zbioru A i znajduję wszystkie sposoby ich dopasowania do obiektów w zbiorze B. Zajmę się ograniczeniami klasowymi, znajdując permutacje w obrębie każdej klasy. Oto dlaczego są zera: reprezentują obiekt, który nie jest sparowany z innym, dlatego nie chcę powtarzać takich permutacji. – jazzbassrob