Próbując opracować własny algorytm sortowania, szukam optymalnego testu porównawczego, z którym mogę go porównać. W przypadku nieposortowanego uporządkowania elementów A i posortowanego uporządkowania B , jaki jest skuteczny sposób obliczenia optymalnej liczby transpozycji, które można uzyskać od A do B ?
Transpozycja jest definiowana jako zmiana pozycji 2 elementów na liście, a więc na przykład
1 2 4 3
ma jedną transpozycję (transpozycja 4 i 3), aby to zrobić
1 2 3 4
Coś jak
1 7 2 5 9 6
wymaga 4 transpozycji (7, 2), (7, 6), (6,5), (9, 7)
Aktualizacja (9.7.11): zmieniono pytanie, aby używać „transpozycji” zamiast „swapów” w odniesieniu do niesąsiadujących giełd.
Odpowiedzi:
Jeśli masz do czynienia tylko z permutacji elementów, to trzeba będzie dokładnie n - c ( gatunku ) swapy, gdzie c ( π ) jest liczba cykli w rozkładzie cyklu rozłączne z Õ . Ponieważ odległość ta jest niezmienna, przekształcenie π w σ (lub A w B lub odwrotnie) wymaga n - c ( σ - 1 ∘ π ) takich ruchów.n n - c ( π) c ( π) π π σ ZA b n - c ( σ- 1∘ π)
źródło
Odległość zamiany może być również izometrycznie osadzona w przestrzeni euklidesowej. Dla każdego łańcucha s zbuduj macierz gdzie M i j = 1, jeśli i występuje przed j, a w przeciwnym razie wynosi zero. Zatem odległość Frobeniusa ‖ M ( s ) - M ( s ′ ) ‖ 2 jest odległością wymiany d ( s , s ′ ) . (ze slajdów Grahama Cormode'a ). Nie tak elegancki jak odpowiedź Anthony'ego, ale dość łatwy do obliczenia.M.( s ) M.I j= 1 ja jot ∥ M.( s ) - M( s′) ∥2) re( s , s′)
Aktualizacja: zobacz komentarze Oleksandra
źródło