¿Se requiere transitividad para un algoritmo de clasificación?

14

¿Es posible usar un algoritmo de clasificación con una comparación no transitiva, y en caso afirmativo, ¿por qué se enumera la transitividad como un requisito para ordenar comparadores?

Antecedentes:

  • Un algoritmo de clasificación generalmente ordena los elementos de una lista de acuerdo con una función de comparación C (x, y), con

    C(X,y)={-1Si Xy0 0Si Xy+1Si Xy

    Los requisitos para este comparador son, hasta donde yo entiendo:

    • reflexivo: X:C(X,X)=0 0
    • antisimétrico: X,y:C(X,y)=-C(y,X)
    • transitivo: X,y,z,un:C(X,y)=unC(y,z)=unC(X,z)=un
    • C (x, y) se define para todas las x e y, y los resultados dependen solo de x e y

    (Estos requisitos siempre se enumeran de manera diferente en las diferentes implementaciones, por lo que no estoy seguro de haberlos hecho bien)

Ahora me pregunto acerca de una función de comparación "tolerante", que acepta los números x, y como similares si : C ( x , y ) = { - 1 si x < y - 1 0 si | x - y | 1 + 1 si x > y + 1El |X-yEl |1

C(X,y)={-1Si X<y-10 0Si El |X-yEl |1+1Si X>y+1

Ejemplos: ambos [ 1, 2, 3, 4, 5]y [1, 4, 3, 2, 5]están correctamente ordenados en orden ascendente de acuerdo con el comparador tolerante ( si x aparece antes que y en la lista) pero no lo es, ya que C (4,2) = 1C(X,y)0 0
[1, 4, 2, 3, 5]

Este comparador tolerante es reflexivo y antisimétrico, pero no transitivo.

es decir, C (1,2) = 0, c (2,3) = 0, pero C (1,3) = -1, violando la transitividad

Sin embargo, no puedo pensar en ningún algoritmo de clasificación que no produzca una salida "correctamente ordenada" cuando se le da este comparador y una lista aleatoria.

Por lo tanto, ¿no se requiere transitividad en este caso? ¿Y hay una versión menos estricta de transitividad que se requiere para que la clasificación funcione?

Preguntas relacionadas:

HugoRune
fuente
Creo que la selección rápida con "elegir siempre el medio" para el pivote fallaría usando este comparador en [3, 2, 1].
G. Bach
2
Sospecho que algún comparador no transitivo utilizado en algún algoritmo de clasificación podría causar un bucle infinito.
Karolis Juodelė
1
unyounyo+1unyounjyoj
@ G.Bach Creo que quicksort en realidad fallará por completo si su matriz tiene n veces 3, una vez 2, n veces 1, y el medio 2 se usa como primer pivote, sin importar lo que suceda después.
gnasher729

Respuestas:

11

Usted preguntó: ¿Podemos ejecutar un algoritmo de clasificación, alimentándolo con un comparador no transitivo?

La respuesta: por supuesto. Puede ejecutar cualquier algoritmo con cualquier entrada.

Sin embargo, conoces la regla: basura en la basura, basura en la basura. Si ejecuta un algoritmo de clasificación con un comparador no transitivo, puede obtener resultados sin sentido. En particular, no hay garantía de que la salida se "clasifique" según su comparador. Por lo tanto, ejecutar un algoritmo de clasificación con un comparador no transitivo probablemente no sea útil de la manera que probablemente esperaba.

[3,2,1]

DW
fuente
1
mi primer pensamiento fue que la lista [3,2,1] está ordenada de acuerdo con mi comparador, por lo que, por supuesto, la clasificación debería dejarla sin cambios; pero podría haber estado usando la definición incorrecta de ordenado. Solo comparo cada elemento con sus vecinos directos, pero eso podría ser una restricción demasiado débil para considerar una lista ordenada
HugoRune
44
@HugoRune Bueno, ese es un punto interesante. ¿Qué quieres decir con ordenado ? Si puede mostrar que un algoritmo de clasificación terminará dado un comparador no transitivo, y que cada vez que el algoritmo termina, alguna condición es verdadera, y esa condición es lo que usted considera que es la clasificación ... entonces, por supuesto, ese algoritmo ordenará su lista cada vez, por esa definición de ordenación . Si el comparador no es transitivo, puede que no tenga sentido tomar una definición de ordenado que requiere una comparación por pares de todos los elementos en la lista ordenada.
Patrick87
3
@HugoRune, con "solo se comparan vecinos" probablemente necesitará una ordenación personalizada. Los algoritmos estándar suponen la transitividad para evitar comparaciones redundantes. O puede incrustar su orden no transitivo en uno transitivo. ¿O tal vez está buscando algo similar a la clasificación topológica ?
vonbrand
Me encontré con esto hace un tiempo y descubrí que el tipo de burbuja realmente funciona bien, ya que solo compara elementos adyacentes.
Mooing Duck
4

Dado un conjunto de elementos y una relación de ordenamiento binario, se requiere transitividad para ordenar totalmente los elementos. De hecho, la transitividad incluso se requiere para definir un orden parcial en los elementos. http://en.m.wikipedia.org/wiki/Total_order

Necesitaría una definición mucho más amplia de lo que significa "ordenado" para ordenar elementos sin transitividad. Es difícil ser autoconsistente. Otra respuesta dice "En particular, no hay garantía de que la salida se 'clasifique' de acuerdo con su comparador". Pero en realidad podemos decir algo mucho más fuerte. Le garantizamos que la salida no está ordenada según su comparador.

un<sisi<CC<un

Joe
fuente
1
Interpreté la pregunta que se hacía sobre la ordenación utilizando ordenamientos parciales (de modo que las comparaciones que dicen que las cosas son desiguales son transitivas, pero las que consideran que los elementos son indistinguibles no lo son). La clasificación basada en un orden parcial a veces es útil, pero en el peor de los casos requiere N (N-1) / 2 comparaciones. Cualquier algoritmo de clasificación que en el peor de los casos tenga menos de N (N-1) / 2 comparaciones no podrá clasificar correctamente los elementos parcialmente ordenados por las razones descritas en mi respuesta.
supercat
2

Parece que lo que desea es organizar elementos de manera que todas las clasificaciones discernibles sean correctas, pero los elementos que están cerca podrían considerarse "indistinguibles". Es posible diseñar algoritmos de clasificación que funcionen con tales comparaciones, pero a menos que haya límites para cuántas comparaciones pueden informar que las cosas son indistinguibles, no hay forma de evitar que requieran N (N-1) / 2 comparaciones. Para entender por qué, elija algún número N y cualquier algoritmo de clasificación que haga menos que N (N-1) / 2 comparaciones. Luego, complete una lista L [0..N-1], establezca cada elemento L [I] en I / N y "ordénelo" utilizando su comparador (el valor mínimo será 0 y el máximo (N-1) / N , entonces la diferencia será (N-1) / N, que es menor que 1).

Debido a que hay N (N-1) / 2 pares de elementos que podrían compararse, y el tipo no hizo tantas comparaciones, debe haber algún par de elementos que no se compararon directamente entre sí. Reemplace cualquiera de estos que se ordenó primero por 1 y el otro por -1 / N, revierta todos los elementos a su posición inicial y repita la operación de clasificación. Cada operación de comparación individual producirá cero, tal como lo hizo la primera vez, por lo que se realizarán las mismas comparaciones y los elementos terminarán en la misma secuencia. Para que la lista se ordene correctamente, el "1" tendría que ordenar después del "-1 / N" (ya que difieren en más de uno) pero dado que el algoritmo de ordenación nunca compararía esos dos elementos directamente uno contra el otro, no tendría forma de saber eso.

Super gato
fuente
0

Rellene una matriz de n elementos con los valores n, n-1, n-2, ..., 2, 1. Luego intente ordenar utilizando el algoritmo de "inserción directa". Encontrará que cada elemento se considera igual al elemento justo antes y, por lo tanto, no se mueve. El resultado de la "clasificación" es la misma matriz.

gnasher729
fuente