Ordenar un conjunto de


8

Estoy tratando de entender cómo puedo ordenar una matriz de elementos cuando solo no está en su lugar.norteIniciar sesiónnorte

Escuché que ordenar una matriz con a lo sumo inversiones tiene complejidad . Debido a que hay elementos que no están clasificados, en mi caso, a lo sumo, hay una inversión .yoO(norteIniciar sesión(yo/ /norte))Iniciar sesiónnortenorteIniciar sesiónnorte

La respuesta a la pregunta es que es consistente con la fórmula, pero no puedo entender la "idea detrás de esto, o qué algoritmo de clasificación lo logra.O(norteIniciar sesiónIniciar sesiónnorte)

Respuestas:


9

Asumiendo que "k elementos fuera de lugar "significa que existen k elementos cuya eliminación deja el resto de la matriz ordenada, hay un O(norte+kIniciar sesiónk)-tiempo algoritmo para ordenar toda la matriz.

En pocas palabras, calcule una subsecuencia creciente de longitud al menos norte-2k, ordenar los demás y fusionar. Lo primero se puede lograr a tiempoO(norte)mediante un algoritmo de pila simple que empuja los elementos uno a la vez y saca los dos primeros cada vez que están fuera de servicio. La estrategia de eliminación óptima debe eliminar al menos uno de estos elementos, por lo que el daño total está limitado por2k eliminaciones


+1 para la idea ordenada. Solo una cosa (y probablemente estoy dividiendo pelos aquí), ¿puedes realmente hacer inserciones en lugares arbitrarios evitando elO(n)"¿Todo el mundo cambia a la derecha por favor"? Creo que deberíamos hacer un seguimiento de las inserciones en una estructura separada, haciendo una pasada final al final para producir la matriz ordenada.
Quicksort

@quicksort es mejor ordenar los desechos y fusionar mis pensamientos
David Eisenstat

1
Es lo mismo, pero la fusión es más limpia, estoy de acuerdo.
Quicksort

1
Digno de mencionar es que esto es asintóticamente óptimo (usando comparaciones) en dependencia de n y k.
aelguindy

Bueno, el algoritmo que describiste parece ser de tipo drop-merge .
Morwenn

5

Digamos que hay k elementos no en su lugar.

Divida la matriz en submatrices no decrecientes. Esto se puede hacer enΘ(norte) tiempo y dará como resultado a lo sumo 2ksubarreglos Ahora solo los combinamos por paresΘ(norteIniciar sesiónk) tiempo, produciendo una matriz ordenada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.