En informática , una secuencia casi ordenada , también conocida como secuencia aproximadamente ordenada o secuencia as-sorted , es una secuencia que está casi ordenada. Por casi ordenada se entiende que ningún elemento de la secuencia está muy lejos de donde estaría si la secuencia estuviera perfectamente ordenada. Aún es posible que ningún elemento de la secuencia esté en el lugar donde debería estar si la secuencia estuviera perfectamente ordenada.
Las secuencias casi ordenadas son particularmente útiles cuando el orden exacto de los elementos tiene poca importancia. Por ejemplo, Twitter ordena casi todos los tweets, hasta el segundo, ya que no hay necesidad de mayor precisión. En realidad, dada la imposibilidad de sincronizar exactamente todos los ordenadores, una ordenación exacta de todos los tweets según el momento en el que se publican es imposible. Esta idea llevó a la creación de los Snowflake IDs .
-sorting es la operación de reordenar los elementos de una secuencia para que quede -sorted. -sorting es generalmente más eficiente que sorting. De manera similar, ordenar una secuencia es más fácil si se sabe que la secuencia está -sorted. Por lo tanto, si un programa solo necesita considerar secuencias -sorted como entrada o salida, considerar secuencias -sorted puede ahorrar tiempo.
El radio de una secuencia es una medida de preclasificación, es decir, su valor indica cuánto deben moverse los elementos de la lista para obtener un valor totalmente ordenado. En el ejemplo anterior de tweets que están ordenados hasta el segundo, el radio está limitado por la cantidad de tweets en un segundo.
Definición
Dado un número positivo , se dice que una secuencia está ordenada si para cada y para cada , . Es decir, la secuencia tiene que estar ordenada solo para pares de elementos cuya distancia sea al menos .
El radio de la secuencia , denotado [2] o [3], es el más pequeño de modo que la secuencia esté ordenada. El radio es una medida de preclasificación.
Se dice que una secuencia está casi ordenada o aproximadamente ordenada si su radio es pequeño en comparación con su longitud.
Definición equivalente
Una secuencia está -ordenada si y solo si cada rango de longitud , está -ordenado.
Propiedades
Todas las secuencias de longitud están ordenadas, es decir, . Una secuencia está ordenada si y solo si está ordenada. Una secuencia ordenada está ordenada automáticamente, pero no necesariamente ordenada.
Relación con secuencias ordenadas
Dada una secuencia a -secuencia ordenada y su permutación ordenada , es como máximo .
Algoritmos
Decidir si una secuencia es a {\estilo de visualización k}
-ordenado
La decisión sobre si una secuencia está ordenada se puede realizar en tiempo lineal y espacio constante mediante un algoritmo de streaming . Es suficiente, para cada , llevar un registro de y comprobar que .
Calcular el radio de una secuencia
El cálculo del radio de una sucesión se puede realizar en tiempo y espacio lineales. Esto se desprende del hecho de que se puede definir como .
Reducir a la mitad el radio de una secuencia
Dada una secuencia ordenada , es posible calcular una permutación ordenada de en tiempo lineal y espacio constante.
En primer lugar, dada una secuencia , digamos que esta secuencia está particionada si los elementos -más pequeños están en y los elementos -más grandes están en . Llamemos partición a la acción de reordenar la secuencia en una permutación particionada. Esto se puede hacer en tiempo lineal encontrando primero la mediana de y luego moviendo los elementos a la primera o segunda mitad dependiendo de si son más pequeños o más grandes que la mediana.
La secuencia se puede obtener dividiendo los bloques de elementos en la posición , luego dividiendo los bloques de elementos en la posición , y luego nuevamente los elementos en la posición para cada número de manera que dichas secuencias estén definidas.
Utilizando procesadores, sin acceso compartido de lectura ni escritura a la memoria, se puede aplicar el mismo algoritmo en el tiempo, ya que cada partición de una secuencia puede ocurrir en paralelo.
Fusionando dos k {\displaystyle k}
-secuencias ordenadas
La fusión de dos secuencias ordenadas se puede realizar en tiempo lineal y en espacio constante.
En primer lugar, utilizando el algoritmo anterior, ambas secuencias deben transformarse en secuencias ordenadas.
Construyamos iterativamente una secuencia de salida eliminando contenido de ambos y agregándolo en .
Si ambos están vacíos, basta con devolver . En caso contrario, supongamos que está vacío y no , basta con quitar el contenido de y anexarlo a . El caso en el que está vacío y no es similar por simetría.
Consideremos el caso en el que ninguno está vacío. Llamemos a y , que son los mayores de los primeros elementos de cada lista. Supongamos que , el otro caso es similar por simetría. Elimínelos de y elimínelos de y añádalos a .
Ordenando una k {\displaystyle k}
-secuencia ordenada
Una secuencia ordenada se puede ordenar aplicando el algoritmo de reducción a la mitad indicado anteriormente . Esto lleva tiempo en una máquina secuencial o en procesadores.
k {\displaystyle k}
-ordenar una secuencia
Como cada secuencia está necesariamente ordenada, basta con aplicar el algoritmo de reducción a la mitad varias veces. De este modo, la ordenación se puede realizar en tiempo. Este algoritmo es paróptimo, es decir, no existe ningún algoritmo secuencial con una mejor complejidad en el peor de los casos.
Referencias
- ^ Altman, Tom; Igarashi, Yoshihide (25 de agosto de 1989). "Ordenación aproximada: enfoque secuencial y paralelo". Revista de procesamiento de la información . 12 (2): 154–158.
- ^ Estivill-Castro, Vladimir; Wood, Derick (octubre de 1989). "Una nueva medida de preclasificación". Información y computación . 83 (1): 111–119. doi : 10.1016/0890-5401(89)90050-3 .