Não, isso depende da sua aplicação. As medidas de ordenação são freqüentemente chamadas de medidas de desordem , que são funções de a , onde é a coleção de todas as seqüências finitas de números inteiros não negativos distintos. A pesquisa de Estivill-Castro e Wood [1] lista e discute 11 medidas diferentes de desordem no contexto de algoritmos de classificação adaptativa. R N < NN<NRN<N
O número de inversões pode funcionar em alguns casos, mas às vezes é insuficiente. Um exemplo dado em [1] é a sequência
⟨⌊n/2⌋+1,⌊n/2⌋+2,…,n,1,…,⌊n/2⌋⟩
que possui um número quadrático de inversões, mas consiste apenas em duas execuções ascendentes. Está quase classificado, mas isso não é capturado por inversões.
[1] Estivill-Castro, Vladmir e Derick Wood. "Uma pesquisa de algoritmos de classificação adaptativa". Pesquisas ACM Computing (CSUR) 24.4 (1992): 441-476.
Mannila [1] axiomatiza a pré-classificação (com foco em algoritmos baseados em comparação) da seguinte maneira (parafraseando).
Exemplos de tais medidas são os
Observe que foram definidas distribuições aleatórias usando essas medidas, ou seja, que tornam as seqüências mais / menos ordenadas mais ou menos prováveis. Estes são chamados de distribuições do tipo Ewens [2, cap. 4-5; 3, exemplo 12; 4], cujo caso especial é a chamada distribuição de Mallows . Os pesos são paramétricos em uma constante e cumpremθ > 0
.Pr( X) = θm ( X)∑Y∈ Σ⋆∩ Σ| X|θm ( Y)
Observe como define a distribuição uniforme (para todos os m ).θ = 1 m
Como é possível amostrar permutações através dessas medidas de forma eficiente, esse corpo de trabalho pode ser útil na prática ao comparar os algoritmos de classificação.
fonte
Eu tenho minha própria definição de "ordenação" de uma sequência.
Dada qualquer sequência [a, b, c,…], a comparamos com a sequência classificada que contém os mesmos elementos, contamos o número de correspondências e a dividimos pelo número de elementos na sequência.
Por exemplo, dada sequência
[5,1,2,3,4]
, procedemos da seguinte forma:1) classifique a sequência:
[1,2,3,4,5]
2) compare a sequência classificada com a original movendo-a uma posição de cada vez e contando o número máximo de correspondências:
3) O número máximo de correspondências é 4, podemos calcular a "classificação" como 4/5 = 0,8.
A classificação de uma sequência classificada seria 1 e a classificação de uma sequência com elementos colocados em ordem inversa seria 1 / n.
A idéia por trás dessa definição é estimar a quantidade mínima de trabalho que precisaríamos fazer para converter qualquer sequência na sequência classificada. No exemplo acima, precisamos mover apenas um elemento, o 5 (existem várias maneiras, mas mover 5 é o mais eficiente). Quando os elementos seriam colocados em ordem inversa, precisaríamos mover 4 elementos. E quando a sequência foi classificada, nenhum trabalho é necessário.
Espero que minha definição faça sentido.
fonte
Se você precisar de algo rápido e sujo (os sinais de soma me assustam), escrevi uma função de desordem super fácil em C ++ para uma classe chamada Array, que gera matrizes int preenchidas com números gerados aleatoriamente:
A função simplesmente compara o valor em cada elemento com o índice do elemento + 1, de modo que uma matriz na ordem inversa tenha um valor de desordem igual a 1 e uma matriz classificada com um valor de desordem igual a 0. Não sofisticado, mas funcional.
Michael
fonte