Actualización: amplié esta respuesta en un documento Clasificación con un promedio de comparacionesl g ( n ! ) + o ( n )l g ( n ! ) + o ( n ) .
Sí, tal algoritmo existe. Solo probaré el límite , pero bajo un supuesto de aleatorización probable también obtenemos . También describiré un intento para y .l g ( n ! ) + o ( n ) l g ( n ! ) + O ( n 1 - ε ) n 0.5 + o ( 1 ) O ( n 0.5 - ε )l g ( n ! ) + o ( n )l g (n!)+O( n1 - ε)norte0,5 + o ( 1 )O ( n0.5 - ε)
Podemos suponer que todos los elementos son distintos, anotándolos si es necesario; el caso promedio usa elementos distintos en orden aleatorio. Podemos calcular el número promedio de comparaciones sumando la pérdida de entropía para cada comparación en relación con el uso de una moneda justa.
El punto de partida es una especie de inserción con una búsqueda binaria para decidir dónde insertar el siguiente elemento en la ordenada subconjunto . Cuando , una inserción utiliza como máximo comparaciones, que (en términos de entropía) es óptima hasta un factor aditivo (y para la complejidad de caso promedio, también funciona). Ahora, cuandono está cerca de una potencia de 2, la inserción de un elemento es subóptima (incluso en el caso promedio e independientemente de cómo equilibremos cada consulta), pero si desperdiciamos comparaciones, podríamos dirigir a una distribución aproximadamente uniforme durante un intervalo deS ( 1 - ε ) 2 m ≤ | S | ≤ 2 m - 1 m O ( ε ) 2 m ≤ | S | ≤ ( 1 + ε ) 2 m | S | A o ( 1 ) A SS( 1 - ε ) 2metro≤ | SEl | ≤ 2metro- 1metroO ( ε )2metro≤ | SEl | ≤(1+ ε ) 2metroEl | SEl |UNAo ( 1 )UNAS de longitud cercana a una potencia de 2, obtenemos la óptima deseada.
Logramos esto agregando elementos en lotes y, a veces, comparando eficientemente los elementos del lote entre sí, de modo que el intervalo de correspondiente a un elemento disminuye de manera casi aleatoria (y con la distribución de probabilidad de dentro del intervalo casi uniforme), y cuando la longitud del intervalo es lo suficientemente cerca de una potencia de 2, haciendo la búsqueda binaria para insertar .S A A ASUNAUNAUNA
Construcciones comunes
Mantendremos un subconjunto de elementos ordenados, y para cada elemento no ordenado , realizaremos un seguimiento del intervalo mínimo de donde se sabe que se encuentra es la longitud de ; es por la identidad de los intervalos.S A I A S A | I A | I A I A = I BSUNAyoUNASUNAEl | yoUNAEl |yoUNAyoUNA= Yosi
Sea be: Compare con , y luego (en orden aleatorio) compare y con los elementos correspondientes de hasta que sus intervalos sean disjuntos (o tengan una longitud 1). El elemento de se elige (de manera consistente) para hacer que las probabilidades de comparación sean lo más cercanas posible a 1/2, suponiendo que cuando se llama , se distribuye uniformemente en . Debido a la desunión al final, conserva el supuesto de uniformidad.C o m p a r e ( A , B ) A B A B S S C o m p a r e ( A , B ) I A ⨯ I B C o m p a r eC o m pare(A,B)ABABSSC o m pare( A,B)IA×IsiC o m p a r e
Las siguientes secciones se pueden leer independientemente una de la otra.
A algoritmol g ( n ! ) + o ( n )l g (n!)+o(n)
Dado: una lista ordenada , y un lote de elementos sin clasificar; ; los elementos sin clasificar son al azar con respecto a .S m m ∈ ω ( 1 ) ∩ o ( | S | ) SSmetrom ∈ ω ( 1 ) ∩o(|SEl |)S
Repita (1) - (3) mientras sea posible:
1. Elija dos elementos y del lote con (cualquier opción funcionará).
2. Ejecute .
3. Siestá lo suficientemente cerca de una potencia de 2, (nota 1) eliminar del lote (sin olvidar ); y hacerlo de manera similar con . Finalmente: inserte todos los elementos en y complete la ordenación.A B I A = I B C o m p a r e ( A , B ) | I A | A I A B SUNAsiIA=Isi
C o m p a r e (A,B)
El |IAEl |UNAIUNAsi
S
Nota 1: para "lo suficientemente cerca", cualquier error relativo (en función de ) funciona siempre que los elementos se eliminen en el paso (4) (posible mediante la nota 2). Bajo un supuesto de aleatorización conjeturada, el uso de error relativo captura elementos , lo que permite a algoritmo de clasificación de comparación promedio.o ( 1 ) m m - o ( m ) c log log m / log m m ( 1 - log - Θ ( c ) m ) l g ( n ! ) + O ( n log log n / log n )o ( 1 )metrom - o ( m )cloglogm /logmetrom ( 1 - log- Θ ( c )m )l g (n!)+O( nlogIniciar sesiónn / logn )
Nota 2: Debido a que la misma secuencia de comparaciones conduce al mismo intervalo de delimitación, casi todos los elementos pasarán por el paso (1) veces (a menos que se eliminen en el paso 4). Al principio, si y elegimos , comparamos con el elemento , y cada aplicación del paso (3) a tiene probabilidad de reduciren veces. Ahora, para cada relación que no sea una potencia racional de 2, tenemos , y así obtenemos elΩ ( log m ) A < B A A S [ ≈ ( 1 - 1 / √Ω (logm )A<BAA2 )| S| ]AO(1)| IA| ≈1/(1-1/ √S[≈(1−1/2–√)|S|]AO(1)|IA|2 )una>1∀varepsilon>0∀d>0∃m,n∈N≈1/(1−1/2–√)a>11 - ε < a md 2 n <1+εo(n)∀ε>0∀d>0∃m,n∈N1−ε<amd2n<1+εo(n) Unido.
Un algoritmo probablel g ( n ! ) + O ( n 1 - ε )lg(n!)+O(n1−ε)
Con un supuesto de aleatorización, podemos lograr comparaciones promedio de la siguiente manera.l g ( n ! ) + O ( n 1 - ε )lg(n!)+O(n1−ε)
Mezcle aleatoriamente los elementos y clasifique la primera mitad en una lista , mientras mantiene la segunda mitad como un lote sin clasificar.SS
Repita hasta que el lote esté vacío:
elija aleatoriamente . Deje . Si es vacía, retire partir del lote y se insertan en . De otra manera:A ∈ lote G = { B ∈ lote : | P ( A < B ) - 0.5 | < n - 0.51 ε } G A SA∈batchG={B∈batch:|P( A <B)−0.5|<n−0.51ε}GAS
- Si hay tal que con probabilidad (digamos ≥0.05), hacedentro de error relativo de una potencia de 2, ejecute y si tiene éxito (es decir, está dentro de error relativo de una potencia de 2) , retire partir del lote y se insertan en .B ∈ G Θ ( 1 ) C o m p a r e ( A , B ) | I A | n - ε C o m p a r e ( A , B ) | I A | n - ε A Ssi∈GΘ(1)Compare(A,B)|IA|n−εCompare(A,B)|IA|n−εAS
- Si no existe tal , ejecute para un aleatorio .B ∈ G C o m p a r e ( A , B ) B ∈ GB∈GCompare(A,B)B∈G
Si nuestro supuesto de aleatorización funciona (es decir, la distribución de las longitudes y posiciones de los intervalos es lo suficientemente aleatoria), entonces, durante gran parte del proceso, una típica se puede comparar de manera eficiente con una elección de elementos (con diferentes longitudes de intervalo). Por lo tanto, generalmente podemos elegir una comparación para (1) anterior, y si no tenemos suerte con el resultado de la comparación, todavía tenemos posibilidades de , logrando así (si es lo suficientemente pequeño, digamos 0.01) a algoritmo de comparación. Con algunos cambios y aproximaciones, el cálculo total se puede hacer cuasilineal: dado un elementoA n Θ ( 1 ) n Θ ( 1 ) Θ ( log n ) ε l g ( n ! ) + O ( n 1 - ε ) A BAnΘ(1)nΘ(1)Θ(logn)εlg(n!)+O(n1−ε)A, calcule longitudes de intervalo prometedoras y luego busque s con las longitudes aproximadas correctas de centro e intervalo.B
Hay varias formas de optimizar las comparaciones, pero el obstáculo es que cada comparación puede terminar siendo desafortunada y tenemos un número limitado de comparaciones. Si después de la optimización, hace un promedio de 4 comparaciones y 'tiene éxito' con 1/4 de probabilidad, obtenemos .C o m p un r e ( A , B ) ε ≈ ( 1 - ε ) / 4 / log 4 / 3 2 ≈ 0,09Compare(A,B)ε≈(1−ε)/4/log4/32≈0.09
Un enfoque quizás mucho mejor es esperar hasta que un intervalo esté cerca de una potencia de 2, controlando no las longitudes de intervalo individuales sino las distribuciones de longitudes.
Un intento de algoritmol g ( n ! ) + n 0.5 + o ( 1 )lg(n!)+n0.5+o(1)
Supongamos que nos da un lote no ordenado de elementos con los intervalos también dados, contípicamente y con distribuido uniformemente (hasta un error aleatorio, y manteniendo con suficiente precisión incluso si está condicionado por ). Luego, podemos ordenar los elementos desperdiciando un promedio de comparaciones de la siguiente manera:
(*) Inserte todos los elementos en el orden de su inicial . De esta forma, todos los elementos se insertan cuando su longitud de intervalo es cercana a una potencia de 2.El | S | = n n I A | I A | n 1 - o ( 1 ) | I A ||S|=nnIA|IA|n1−o(1)2 ⌊ l g | I A | ⌋ A<S[i]n0,5+o(1)| IA||IA|2⌊lg|IA|⌋A<S[i]n0.5+o(1)
2 ⌊ l g | I A | ⌋|IA|2⌊lg|IA|⌋
El algoritmo de clasificación será: Aleatoriamente barajar la lista y clasificar la primera mitad . Para insertar la segunda mitad, haga la distribución correcta y haga el (*) anterior.SS
Para hacer que el derecha, podemos hacer una distribución 'aleatoria', y luego retener la fracción derecha de los elementos para cada mientras aleatoriza el resto (repitiendo si es necesario). Sin embargo, si bien esto debería corregir globalmente, no sabemos si se puede controlar localmente con la precisión requerida (de ahí la palabra "intento" anterior).El | I A |2 ⌊ l g | I A | ⌋ | IA| /2⌊lg| IA| ⌋| IA||IA|2⌊lg|IA|⌋|IA|/2⌊lg|IA|⌋2 ⌊ l g | I A | ⌋|IA|2⌊lg|IA|⌋
Para hacer una distribución 'aleatoria', podemos usar aleatoriamente con , excepto que con el inicial todos idénticos, no esperamos aleatorización a una profundidad sublogarítmica (es decir, con tiempo suficiente). Sin embargo, supongo que obtenemos la aleatorización a una profundidad sublogarítmica utilizando generalizaciones (probablemente cualquier opción razonable funcionará) de elementos to : Si mantenemos elementos enredados (es decir, conectado usando resultados de la comparación), deberíamos tener sobre opciones noncommuting para cada comparación con . Esto debería permitirC o m p a r e ( A , B ) P ( A < B ) ≈ 0.5 I A I A C o m p a r e k = ω ( 1 ) k = ω ( 1 ) k S O ( log k n + log k ) k Θ ( log k )Compare(A,B)P(A<B)≈0.5IAIAComparek=ω(1)k=ω(1)kSO(logkn+logk)profundidad de aleatorización, según se desee (suponiendo que no sea demasiado grande ya que necesitamos profundidad para desenredar los elementos). Espero que el cálculo se pueda hacer cuasilineal si se usa un suficientemente pequeño .kΘ(logk)kk
Dado que una comparación con sí, la probabilidad solo desperdicia la entropía , la aleatorización inicial y la leve no uniformidad de los elementos en sus intervalos de límite solo deberían necesitar residuos de entropía. Si la configuración de la distribución tiene éxito, el desperdicio de entropía se debe principalmente a los desajustes de longitud de intervalo durante (*) (de ahí el ).1 / 2 + n - 0,5 O ( 1 / n ) n o ( 1 ) n 0.5 + O ( 1 )1/2+n−0.5O(1/n)no(1)n0.5+o(1)
Una posible combinación :l g ( n ! ) + O ( n 0.5 - ε ) lg(n!)+O(n0.5−ε)| S | + N 0.5 + ε ≈ n 0.5 + ε ≈ n 0.5 + ε n 0,5 - ε / 2 + O ( 1 ) S n ε I A Θ ( n ε / 2 ) n 1 - O ( Si la distribución de distribución funciona lo suficientemente bien y hacemos que el tamaño del lote sea igual y rechazar selectivamente elementos en (*) (arriba), podemos insertar todos menos estos elementos con residuos de entropía siguiente manera. Divida en intervalos casi iguales, y cuando durante la inserción, establece en un intervalo, rechace (es decir, cancele la inserción) si el intervalo es demasiado largo, reduciendo así la variación en la duración de estos intervalos|S|+n0.5+ε≈n0.5+ε≈n0.5+εn0.5−ε/2+o(1)SnεIAΘ(nε/2)veces, lo que a su vez reduce las variaciones de longitud de la longitud aleatoria intervalos en veces, según sea necesario. Ahora, podemos usar el algoritmo anterior para insertar los elementos restantes con desperdicio si es pequeño suficiente.1 ) n ε / 2 - o ( 1 ) l g (n!)+O( n 1 - ε )O( n 0.5 - ε ′ ) εn1−o(1)nε/2−o(1)
La complejidad de la clasificación en el peor de los casos: lo más probable es que haya un algoritmo de clasificación con las comparaciones del peor de los casos. Para encontrar la mediana, hay una brecha lineal entre el caso promedio ( comparaciones) y el peor de los casos (al menos comparaciones). Sin embargo, para ordenar, hay mucha libertad para organizar comparaciones y para encontrar nuevos algoritmos de clasificación.l g ( n ! ) + o ( n ) 1.5 n + o ( n ) ( 2 + ε ) n - O ( 1 )