¿No hay un algoritmo de clasificación con todas las propiedades deseadas específicas?

22

En el sitio web de Algoritmos de clasificación , se realiza el siguiente reclamo:

El algoritmo de ordenación ideal tendría las siguientes propiedades:

  • Estable: las claves iguales no se reordenan.
  • Opera en su lugar, requiriendo espacio extra.O(1)
  • El peor de los casos comparaciones clave.O(nlg(n))
  • El peor de los casos intercambios.O(n)
  • Adaptativo: acelera hasta cuando los datos están casi ordenados o cuando hay pocas claves únicas.O(n)

No existe un algoritmo que tenga todas estas propiedades, por lo que la elección del algoritmo de clasificación depende de la aplicación.

Mi pregunta es, ¿es cierto que

no existe un algoritmo [de clasificación] que tenga todas estas propiedades

Y si es así, ¿por qué? ¿Qué tienen estas propiedades que hace que todas sean simultáneamente imposibles de cumplir?

James Faulcon
fuente
44
Probablemente solo significan que ningún algoritmo de clasificación conocido tiene todas estas propiedades.
Yuval Filmus
3
¿Hay incluso un tipo de reunión basada en la comparación 3 y 4?
barba gris
44
@JohnFeminella Necesita al menos comparaciones , pero ¿cómo nos dice eso algo sobre el número de intercambios? Ω(nlog(n))
Tom van der Zanden
2
@JohnFeminella Nitpick: "mejor que " es una declaración vacía. Debe usar Ω o Θ si desea hablar sobre los límites inferiores. O(_)ΩΘ
Raphael
1
Cualquier algoritmo de ordenación puede estabilizarse agregando como clave secundaria la posición del elemento original. Sin embargo, eso hace que no esté en su lugar, ya que tomaría O (n) memoria adicional.
Giovanni Botta

Respuestas:

6

WikiSort y GrailSort son dos algoritmos bastante recientes que hacen comparaciones de teclas estables, en el peor de los casos . Desafortunadamente, no los entiendo lo suficientemente bien como para saber si se acercan a los intercambios O ( n ) o son adaptativos, por lo que no sé si violan las condiciones cuarta y quinta que tiene.O(n lg(n))O(n)

Al mirar el documento "Combinación in situ estable basada en la relación", por Pok-Son Kim y Arne Kutzner enlazados por la página WikiSort GitHub, Kim y Kutzner afirman tener una operación de 'fusión' que es (WikiSort es una variante de Mergesort) pero no estoy seguro de si eso se traduce en que WikiSort tengaO(n)intercambios. Se dice que GrailSort es más rápido (en la página WikiSort GitHub), por lo que me imagino que es probable que ambos tengan el peor de losintercambiosO(n)y que sean adaptativos.O(m(nm+1))O(n)O(n)

Si alguien logra entender WikiSort y / o GrailSort, agradecería que también respondan mi pregunta abierta al respecto

usuario834
fuente
5

La suavidad de Dijkstra se acerca, pero no es estable.

vonbrand
fuente
3

Ningún algoritmo conocido satisface todas estas propiedades. Estas propiedades se volvieron solicitadas a medida que desarrollamos más algoritmos de clasificación. Por ejemplo, la clasificación de burbujas (posiblemente el algoritmo de clasificación más primitivo) probablemente no era estable en la primera implementación, pero fue diseñada para ser estable ya que los científicos informáticos buscaron hacerlo más eficiente en implementaciones posteriores. Entonces, los científicos informáticos probablemente eligieron los mejores rasgos de los mejores algoritmos, y como resultado, ha sacado una lista de todos estos rasgos deseables. En realidad, es difícil tener lo mejor de todos los mundos en cualquier cosa. No imposible, pero posiblemente imposible con nuestras arquitecturas actuales.

OΩΘ

Siggy
fuente
1
¡Bienvenido! Esto es bueno, pero no veo qué tiene que ver la estabilidad con la eficiencia: es simplemente una preferencia que las secciones de la lista con claves idénticas no se permuten "al azar" por el algoritmo.
David Richerby
Sí, pero ¿es posiblemente posible o imposible?
James Faulcon
1

(Aunque esta es una vieja pregunta, me topé con ella y otros también podrían hacerlo).

De hecho, hay un algoritmo que satisface (1) - (4) y la segunda mitad de (5), por lo que se acerca mucho al requisito anterior. Se describe en [1] y combina varios trucos inventados en las últimas décadas.

[1]: Franceschini, G. Theory Comput Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1

Sebastian
fuente