Nie, to zależy od twojej aplikacji. Miary sortowania są często określane jako miary nieporządku , które są funkcjami od do , gdzie jest zbiorem wszystkich skończonych sekwencji różnych nieujemnych liczb całkowitych. Badanie Estivill-Castro i Wood [1] wymienia i omawia 11 różnych miar zaburzeń w kontekście algorytmów sortowania adaptacyjnego. R N < NN<NRN<N
Liczba inwersji może działać w niektórych przypadkach, ale czasami jest niewystarczająca. Przykładem podanym w [1] jest sekwencja
⟨⌊n/2⌋+1,⌊n/2⌋+2,…,n,1,…,⌊n/2⌋⟩
ma kwadratową liczbę inwersji, ale składa się tylko z dwóch rosnących serii. Jest prawie posortowane, ale nie jest to uchwycone przez inwersje.
[1] Estivill-Castro, Vladmir i Derick Wood. „Przegląd algorytmów adaptacyjnego sortowania”. ACM Computing Surveys (CSUR) 24.4 (1992): 441–476.
Mannila [1] aksomatyzuje uprzedzanie (z naciskiem na algorytmy porównawcze) w następujący sposób (parafrazowanie).
Przykładami takich środków są:
Zauważ, że losowe rozkłady wykorzystujące te miary zostały zdefiniowane, tj. Takie, które sprawiają, że sekwencje, które są mniej lub bardziej posortowane, są mniej lub bardziej prawdopodobne. Są to tak zwane rozkłady podobne do Ewensa [2, Ch. 4–5; 3, przykład 12; 4], którego szczególnym przypadkiem jest tak zwana dystrybucja Mallowsa . Wagi są parametryczne w stałej i spełniająθ>0
Zwróć uwagę, jak definiuje rozkład równomierny (dla wszystkich ).mθ=1 m
Ponieważ możliwe jest skuteczne próbkowanie permutacji w tych pomiarach, ta część pracy może być przydatna w praktyce podczas algorytmów sortowania porównawczego.
źródło
Mam własną definicję „sortowania” sekwencji.
Przy dowolnej sekwencji [a, b, c,…] porównujemy ją z posortowaną sekwencją zawierającą te same elementy, liczymy liczbę dopasowań i dzielimy ją przez liczbę elementów w sekwencji.
Na przykład w podanej kolejności
[5,1,2,3,4]
postępujemy w następujący sposób:1) posortuj sekwencję:
[1,2,3,4,5]
2) porównaj posortowaną sekwencję z oryginałem, przesuwając ją o jedną pozycję na raz i licząc maksymalną liczbę dopasowań:
3) Maksymalna liczba dopasowań wynosi 4, możemy obliczyć „sortowanie” jako 4/5 = 0,8.
Sortowanie posortowanej sekwencji wynosi 1, a sortowanie sekwencji z elementami umieszczonymi w odwrotnej kolejności - 1 / n.
Ideą tej definicji jest oszacowanie minimalnej ilości pracy, którą musielibyśmy zrobić, aby przekonwertować dowolną sekwencję na posortowaną sekwencję. W powyższym przykładzie musimy przesunąć tylko jeden element, 5 (istnieje wiele sposobów, ale przesunięcie 5 jest najbardziej wydajne). Gdyby elementy były umieszczone w odwrotnej kolejności, musielibyśmy przenieść 4 elementy. A po uporządkowaniu sekwencji nie jest wymagana żadna praca.
Mam nadzieję, że moja definicja ma sens.
źródło
Jeśli potrzebujesz czegoś szybkiego i brudnego (przerażają mnie znaki sumowania) napisałem w C ++ super łatwą funkcję nieporządku dla klasy o nazwie Array, która generuje tablice int wypełnione losowo generowanymi liczbami:
Funkcja po prostu porównuje wartość w każdym elemencie z indeksem elementu + 1, dzięki czemu tablica w odwrotnej kolejności ma wartość nieuporządkowania równą 1, a posortowana tablica ma wartość nieuporządkowania równą 0. Nie jest to skomplikowane, ale działa.
Michał
źródło