¿Cómo hacemos que una selección sea estable?

Cualquier algoritmo de ordenación puede usarse para realizar una ordenación estable . ¡Si! Incluso los que no son inherentemente estables. ¿Pero cómo? La ordenación estable conserva el orden relativo de las claves.

Considere un ejemplo con clave de entero y algún otro atributo y desea una ordenación estable. A = [1: A 2: A 1: B 2: B]. La clasificación estable A debería dar [1: A 1: B 2: A 2: B]. Pero el ordenamiento por selección, el ordenamiento rápido o cualquier otro algoritmo de ordenamiento donde la estabilidad NO esté garantizada NO puede darle ese orden.

Entonces. ¿Cuál es el truco? Agregue un atributo más: la posición del elemento en la matriz original. Construye una matriz B desde A como esta

A = [1: A 2: A 1: B 2: B]
B = [1: A (1) 2: A (2) 1: B (3) 2: B (4)]

Ahora tiene que cambiar la función de comparación utilizada para ordenar un poco. Utilice [math] (OriginalKey, ElementPosition) [/ math] como clave para ordenar. Se garantiza que esta tupla es única para todos los elementos en B. Por lo tanto, la estabilidad del tipo no importa aquí. Ahora elimine el atributo de posición y devuelva la matriz ordenada.

La complejidad del espacio sigue siendo la misma, aunque la constante aumenta. También lo hace la complejidad del tiempo.

More Interesting

¿Por qué muchos elementos utilizados en la función objetivo de un algoritmo de aprendizaje asumen todas las características centradas en cero y tienen una varianza en el mismo orden?

Si creció en una familia alcohólica, ¿cuál fue su historia y los desafíos que enfrenta personal y profesionalmente debido a la educación?

Si factoro números grandes en [matemáticas] O (n ^ 2) [/ matemáticas] ¿puedo ganar dinero con eso?

¿Cuál es la necesidad de determinar la complejidad temporal de un algoritmo o código?

Cómo aprender estructuras de datos y algoritmos para empezar

Puedo pensar en algoritmos en varias preguntas, pero cuando realmente escribo un código me enfrento a muchas dificultades. Entonces, siento que soy pobre escribiendo códigos. ¿Cómo puedo mejorar eso?

¿Alguna vez ha enviado un artículo científico sobre un algoritmo que funciona tan bien como los métodos más modernos pero realmente no sabe por qué? ¿Puedes decir 'tal vez' al explicar tu método?

¿Por qué soy tan dinámico?

Cómo probar la corrección del problema de cambio de moneda usando DP y poda

¿Cuál es la diferencia entre la altura y la profundidad de un árbol?

¿Cuál es la mejor manera de saber qué estrategia (codiciosa, dividir y conquistar, programación dinámica) funcionaría mejor para un problema de algoritmo en particular?

¿Cuáles son algunos lenguajes de programación que me permiten visualizar algoritmos?

¿Cómo funciona Swype?

¿Cuál es la última actualización de algo en SEO?

¿Cómo construir un algoritmo hash? ¿Dónde puedo aprender más?