¿Qué significa que un algoritmo de clasificación sea "estable"?
43
Al leer sobre varios algoritmos de ordenación, he visto que mencionan que algunos son "estables" y otros no. ¿Qué significa eso y qué compensaciones están involucradas sobre esa base al seleccionar un algoritmo?
Esta es una pregunta que carece de investigación propia. Respondido con una imagen de wikipedia. Y recibe muy buenos comentarios, lo que de alguna manera me pone triste. En mi humilde opinión, debe estar cerrado, y no obtener votos a favor.
Mare Infinitus
44
Por otro lado, acabo de ver esto y aprendí algo nuevo. Si hubiera sabido que no sabía esto, podría haberlo investigado, pero como el OP hizo la pregunta, ahora sé lo que no sabía que no sabía.
Kazark
44
En general, "solo googlearlo" o "buscarlo en wikipedia" no son respuestas aceptables considerables en los sitios de StackExchange. Debido a que no proporcionan una respuesta a lo que el reclamante está verificando como una pregunta válida con la llamada a las autoridades de google y wikipedia. SI la pregunta es fácilmente un duplicado de otra pregunta o preguntas dentro de programmers.stackexchange, puede quejarse.
Michael Paulukonis
Respuestas:
88
Una ordenación estable es aquella que conserva el orden original del conjunto de entrada, donde el algoritmo de comparación no distingue entre dos o más elementos.
Considere un algoritmo de clasificación que clasifique las tarjetas por rango , pero no por palo. El tipo estable garantizará que se mantenga el orden original de las tarjetas que tengan el mismo rango; el tipo inestable no lo hará.
Corrección: el algoritmo inestable exhibe un comportamiento indefinido cuando dos elementos son iguales, es perfectamente posible que a veces se conserve el orden.
@MareInfinitus: es de dominio público. Verifique la atribución en la imagen original.
Robert Harvey
2
Una buena imagen explica más rápido y más profundo que muchas palabras en el caso promedio. No quería hablar de cuestiones legales.
Mare Infinitus
3
@RobertHarvey En realidad, creo que el editor es correcto. Su publicación actualmente dice que una clasificación estable conserva el orden de las cartas del mismo palo, pero las cartas del mismo palo tendrán diferentes rangos y, por lo tanto, deben reorganizarse para lograr el orden ordenado. Por ejemplo, la ordenación no conserva el orden del 2 y el 5 de los corazones. Es el orden de las cartas con el mismo rango (y diferentes palos) lo que hace la diferencia entre estable e inestable.
David Z
26
Los algoritmos estables preservan el orden relativo de los elementos.
Por lo tanto, un algoritmo de ordenación estable retendrá el orden relativo de valores que se comparan como iguales.
Considere un algoritmo de clasificación en el que clasificamos una colección de puntos 2D según su dimensión X.
En cuanto a la compensación ... bueno, la clasificación estable es menos eficiente, pero a veces la necesitas.
Por ejemplo, cuando un usuario hace clic en el encabezado de una columna para ordenar valores en una interfaz de usuario, es razonable esperar que su orden de clasificación anterior se use en el caso de valores iguales.
¿Pero es menos eficiente? Parece "obvio", pero algunos de los mejores algoritmos de clasificación son estables por naturaleza (p. Ej., Cualquier cosa basada en la clasificación de fusión, como la clasificación de Tim), no necesitan hacer ningún trabajo adicional explícito para ser estables.
99
Estable no tiene nada que ver con el rendimiento en general. Mergesort se ejecuta en O (n * log n) y es estable. Heapsort tiene un rendimiento similar, pero no es estable.
Mare Infinitus
2
"Estable" también puede aplicarse a estructuras de datos, por ejemplo. un "montón estable" es un montón que elimina los elementos que tienen la misma prioridad en el mismo orden en que se pusieron en cola. Esto es muy importante para algoritmos eficientes de búsqueda de rutas.
BlueRaja - Danny Pflughoeft
1
No hay tipos estables que sean comparaciones de O (n ln n) y también O (1) en la memoria. La velocidad no es la única medida de eficiencia. El hecho de que no se pueda ordenar de forma estable en el lugar es importante.
Respuestas:
Una ordenación estable es aquella que conserva el orden original del conjunto de entrada, donde el algoritmo de comparación no distingue entre dos o más elementos.
Considere un algoritmo de clasificación que clasifique las tarjetas por rango , pero no por palo. El tipo estable garantizará que se mantenga el orden original de las tarjetas que tengan el mismo rango; el tipo inestable no lo hará.
fuente
Los algoritmos estables preservan el orden relativo de los elementos.
Por lo tanto, un algoritmo de ordenación estable retendrá el orden relativo de valores que se comparan como iguales.
Considere un algoritmo de clasificación en el que clasificamos una colección de puntos 2D según su dimensión X.
Colección a ordenar:
{(6, 3), (5, 5), (6, 1), (1, 3)}
Estable ordenado:
{(1, 3), (5, 5), (6, 3), (6, 1)}
Ordenado regularmente: ya sea
{(1, 3), (5, 5), (6, 3), (6, 1)}
o{(1, 3), (5, 5), (6, 1), (6, 3)}
En cuanto a la compensación ... bueno, la clasificación estable es menos eficiente, pero a veces la necesitas.
Por ejemplo, cuando un usuario hace clic en el encabezado de una columna para ordenar valores en una interfaz de usuario, es razonable esperar que su orden de clasificación anterior se use en el caso de valores iguales.
fuente