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.
- El peor de los casos comparaciones clave.
- El peor de los casos intercambios.
- Adaptativo: acelera hasta cuando los datos están casi ordenados o cuando hay pocas claves únicas.
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?
algorithms
sorting
James Faulcon
fuente
fuente
Respuestas:
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
fuente
La suavidad de Dijkstra se acerca, pero no es estable.
fuente
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.
fuente
(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
fuente