¿Cómo tarda un algoritmo aleatorio de selección rápida en O (n)?

Esperamos que la posición del elemento aleatorio en la secuencia ordenada se distribuya uniformemente entre 0 y N-1, donde N es la longitud del conjunto de datos. Esto significa que hay al menos una probabilidad de 1/2 de que esté entre N / 4 y 3N / 4. Eso significa que al menos la mitad del tiempo, obtenemos un pivote que reduce el problema a no más de 3/4 del tamaño del problema anterior.

Cada selección de pivote y filtrado de los elementos por el pivote toma O (N) si quedan N elementos restantes. Con base en lo anterior, esperamos que el problema se reduzca a no más de 3/4 de su tamaño después de dos de estos pases O (N). Por lo tanto, obtenemos una relación de recurrencia de T (N) = T (3N / 4) + 2 * O (N) = T (3N / 4) + O (N), el último paso se justifica por el hecho de que las constantes pueden ser colapsó en la gran O.

Entonces, [matemáticas] T (N) = cN + T (\ frac {3} {4} N) = cN + c (\ frac {3} {4} N) + T (({\ frac {3} { 4}}) ^ 2 N) [/ matemáticas] [matemáticas]… = cN + c (\ frac {3} {4} N) + c (({\ frac {3} {4}}) ^ 2N) + … = CN (1 + \ frac {3} {4} + ({\ frac {3} {4}}) ^ 2 +…) = O (N) [/ matemáticas]

El último paso está justificado porque las series geométricas suman constantes de colapso constante y de gran O.

Selección rápida
TL; DR
El rendimiento de la selección rápida depende de la selección de los pivotes. En el peor de los casos, la complejidad del tiempo es O (n ^ 2), pero con una buena estrategia de selección de pivote, la complejidad del tiempo promedio es O (n).

El peor de los casos que toma una selección rápida aleatoria no es O (n). Es O (n ^ 2).
{El peor de los casos es cuando desea seleccionar el elemento mínimo y su pivote en cada etapa resulta ser el último elemento de la lista en esa etapa. Comente si no obtuvo esto.}

Sin embargo, el tiempo esperado que toma una selección rápida aleatoria es O (n).
Espero que entiendas la diferencia.

More Interesting

¿Cuál es la mejor transmisión para ir en el presente, Mainframe o .Net?

¿Cómo puedo entender los conceptos después de leerlos una o dos veces como máximo?

¿Es mejor trabajar en una aplicación para algoritmos de aprendizaje automático (por ejemplo, biología computacional), en lugar de trabajar en ML central, ya que el campo ya está maduro y hay menos espacio para mejorar?

¿Cómo puedo construir una simulación digital de un organismo biológico célula por célula?

¿Qué es la ingeniería de características y cuál es su importancia en diversas aplicaciones de aprendizaje automático?

AI / Machine Learning ha existido durante muchos años, ¿cómo es que de repente se ha convertido en un tema tan candente?

¿Cuáles son algunas clases abiertas en Caltech?

¿Qué es la informática estocástica?

¿Cuál es la reputación del programa de informática de Cornell, en comparación con otros programas principales? ¿Qué tan bueno es Cornell con trabajos en grandes empresas tecnológicas (por ejemplo, Facebook, etc.), frente a Carnegie Mellon o Stanford?

¿Debo permanecer en la India durante 2 años si realizo una pasantía de 3 meses en informática en la Universidad Carnegie Mellon con una visa J1?

Cómo instalar dos sistemas operativos en la misma máquina

¿Por qué la estructura de datos se considera un curso muy importante en CSE?

Estoy interesado en CS y quiero seguir investigando en el futuro. ¿DTU / NSIT o los 5 NIT principales serán mejores para mí?

¿Deberían los estudiantes de ciencias de la computación conocer el concepto de personas provisionales o fomenta la creencia de que los "diseñadores simplemente inventan cosas"?

¿Qué tan importante es la interpretabilidad para un modelo en Machine Learning?