Considere el siguiente 'juego'. tienes una lista de números enteros ordenados en orden descendente de a . El objetivo del juego es ordenar la lista de nuevo en orden ascendente.
Solo puede comparar 2 números a la vez.
Al comparar dos números en la lista, si Es mas grande que (dónde < ) entonces se mueve 'arriba' en la lista a .
De lo contrario, no hay cambio.
Mi intuición me dice que la cantidad mínima de movimientos necesarios para reordenar la lista en orden ascendente es la misma que la cantidad de movimientos que requiere un algoritmo de clasificación de burbujas. Esta lista de enteros de a es la peor posición inicial posible para una ordenación de burbujas, por lo que requeriría se mueve ¿Estoy en lo correcto?
La pregunta anterior sobre el número mínimo de movimientos se aplica cuando puedes elegir qué 2 números comparar y el orden en el que eliges los pares de números para comparar. Pero, ¿qué pasa si extiendo la pregunta para decir que no tienes elección sobre cómo se hacen las comparaciones? Es decir, y (es decir, los índices que estamos comparando) se eligen aleatoriamente en cada movimiento (aunque < todavía se aplica). ¿Hay alguna forma de calcular cuánto tiempo tomaría en promedio volver a una lista ordenada ascendente? ¿Hay alguna manera de demostrar que se necesitaría un número finito de movimientos? Además, ¿cómo depende el tiempo que tarda en ? Este parece un problema realmente interesante, ¿se ha estudiado antes?
He intentado escribir un código para investigar esto. por ejemplo, para , toma mi script (que usa un generador de números aleatorios para elegir los índices y para comparar) alrededor de 350 movimientos para alcanzar el orden ascendente. Como referencia, calculé el 'ordenamiento' usando la fórmula de esta respuesta: https://math.stackexchange.com/a/3201037/668220 .
Pero para se necesitan alrededor de 10,000 movimientos
Para parece tomar más de 100,000 movimientos
Me interesaría mucho saber si hay una manera de describir matemáticamente este comportamiento.
El orden óptimo requerirá pasos, no . Para probarlo podemos contar el número de pares tal que pero . Inicialmente este número es , al final es , y cada paso lo disminuye como máximo .
Si elegimos elementos para comparar al azar, puede tomar un tiempo arbitrario, ya que puede haber un ciclo: orden inicial , llevar , - obtenemos . Entonces toma de nuevo , - volvemos al orden inicial.
Sin embargo, la matriz se ordenará con probabilidad después de un número finito de movimientos. Por ejemplo, número nunca se mueve a la izquierda, por lo que eventualmente llegará a la última posición. Después de eso, tenemos que ordenar el resto elementos (pasos cuando no hará nada), y se hará en un número finito de pasos casi con seguridad.
Esto también da un límite superior en promedio de movimientos que necesitamos: si es el número promedio de pasos que necesitamos para ordenar la peor (que requiere el número máximo de pasos en promedio) permutación de elementos, entonces : menos que pasos que involucran en promedio (como probabilidad de que un paso se mueva a la derecha es al menos , y necesitamos como máximo tales pasos), y después de eso necesitamos pasos que no involucran - y probabilidad de paso para no involucrar es . Este límite es, por supuesto, muy malo: es probable que no terminemos con la peor secuencia después de movernos a la última posición.
La cuenta