No, depende de su aplicación. Las medidas de clasificación a menudo se refieren como medidas de desorden , que son funciones desde hasta , donde es la colección de todas las secuencias finitas de enteros distintos no negativos. La encuesta realizada por Estivill-Castro y Wood [1] enumera y analiza 11 diferentes medidas de trastorno en el contexto de algoritmos de clasificación adaptativa.N<NRN<N
El número de inversiones puede funcionar para algunos casos, pero a veces es insuficiente. Un ejemplo dado en [1] es la secuencia
⟨⌊n/2⌋+1,⌊n/2⌋+2,…,n,1,…,⌊n/2⌋⟩
que tiene un número cuadrático de inversiones, pero solo consta de dos carreras ascendentes. Está casi ordenado, pero esto no es capturado por las inversiones.
[1] Estivill-Castro, Vladmir y Derick Wood. "Una encuesta de algoritmos de clasificación adaptativa". Encuestas de computación ACM (CSUR) 24.4 (1992): 441-476.
Mannila [1] axiomatiza la preselección (con un enfoque en algoritmos basados en comparación) de la siguiente manera (parafraseando).
Ejemplos de tales medidas son las
Tenga en cuenta que se han definido distribuciones aleatorias que utilizan estas medidas, es decir, que hacen que las secuencias que están más / menos ordenadas sean más o menos probables. Estas se llaman distribuciones similares a Ewens [2, cap. 4-5; 3, ejemplo 12; 4], cuyo caso especial es la denominada distribución de Mallows . Los pesos son paramétricos en una constante y cumplenθ>0
Observe cómo define la distribución uniforme (para todos los ).mθ=1 m
Dado que es posible muestrear permutaciones con estas medidas de manera eficiente, este cuerpo de trabajo puede ser útil en la práctica cuando se comparan los algoritmos de clasificación.
fuente
Tengo mi propia definición de "clasificación" de una secuencia.
Dada cualquier secuencia [a, b, c, ...] la comparamos con la secuencia ordenada que contiene los mismos elementos, contamos el número de coincidencias y la dividimos por el número de elementos en la secuencia.
Por ejemplo, dada la secuencia
[5,1,2,3,4]
, procedemos de la siguiente manera:1) ordenar la secuencia:
[1,2,3,4,5]
2) compare la secuencia ordenada con la original moviéndola una posición a la vez y contando el número máximo de coincidencias:
3) El número máximo de coincidencias es 4, podemos calcular la "clasificación" como 4/5 = 0.8.
La ordenación de una secuencia ordenada sería 1, y la ordenación de una secuencia con elementos colocados en orden inverso sería 1 / n.
La idea detrás de esta definición es estimar la cantidad mínima de trabajo que tendríamos que hacer para convertir cualquier secuencia en la secuencia ordenada. En el ejemplo anterior, necesitamos mover solo un elemento, el 5 (hay muchas formas, pero mover el 5 es el más eficiente). Cuando los elementos se colocarían en orden inverso, tendríamos que mover 4 elementos. Y cuando se ordenó la secuencia, no se necesita trabajo.
Espero que mi definición tenga sentido.
fuente
Si necesita algo rápido y sucio (los signos de suma me asustan), escribí una función de desorden súper fácil en C ++ para una clase llamada Array que genera matrices int llenas de números generados aleatoriamente:
La función simplemente compara el valor de cada elemento con el índice del elemento + 1, de modo que una matriz en orden inverso tiene un valor de desorden de 1, y una matriz ordenada tiene un valor de desorden de 0. No es sofisticado, pero funciona.
Miguel
fuente