En las estructuras de datos, ¿cuál puede ser un ejemplo general utilizado para explicar el peor de los casos, los tiempos de ejecución amortizados y esperados?

No puede haber nada mejor que una clasificación rápida para responder a esto basado en la teoría de la aleatorización.

Considere que tiene 7 números: 7 6 5 4 3 2 1

1) peor de los casos: si adoptamos una estrategia para usar constantemente el número izquierdo como pivote, la partición no ayudará mucho, ya que todo el número residiría en el lado izquierdo del pivote, haciendo que el árbol de partición esté sesgado. Resultado, un algoritmo de complejidad de tiempo O (n ^ 2).

2) Tomando el mismo conjunto de datos, si elegimos aleatoriamente el pivote del conjunto, existe una gran posibilidad de que caiga en el rango de corchetes BUENOS SUFICIENTES (n / 4 a 3n / 4) con una altura del árbol de partición del peor de los casos como registro 4/3 n (esto es simple de probar con pivote constantemente elegido para particionar datos en tamaño 1/4 y 3/4 en el peor de los casos). Esta elección de pivote aleatorio podría dar como resultado un tiempo amortizado de O (nlogn) en general.

3) Es por esta razón que el tiempo de ejecución esperado de clasificación rápida es generalmente cercano a O (nlogn) ya que la aleatorización resulta principalmente en un equilibrio de pivotes buenos a lo suficientemente buenos a malos …

¿Qué tal una lista de cambio de tamaño dinámico?

Considere una lista de matriz con la siguiente configuración:

  • La lista se construyó originalmente con algún tamaño n .
  • Se pueden agregar hasta n elementos a la lista.
  • Cuando se agrega un elemento a la lista después de que se han agregado n elementos, se asigna un nuevo bloque de memoria de tamaño 2n , y la memoria se copia del bloque original al segundo bloque. Luego se agrega el elemento.

En este caso, el peor tiempo de ejecución es O (n), cuando tiene que duplicar la lista y copiar cada uno de los n elementos.

Sin embargo, esto solo sucederá cada n adiciones. Por lo tanto, el tiempo de ejecución esperado es O (n / n) = O (1). Este es un tiempo de ejecución amortizado .

More Interesting

Para aprender la codificación, ¿primero se debe aprender un lenguaje o algoritmos?

Normalmente me canso después de resolver 2 - 3 problemas algorítmicos en Leet Code. ¿Qué debo hacer para resolver más problemas diariamente?

¿Cuál es la complejidad del algoritmo criptográfico RSA?

¿Cómo agrupa Google News las historias?

¿Cuál es el mejor curso de algoritmo para comenzar a resolver problemas y convertirse en un ingeniero de software? Encontré tres cursos. ¿Me pueden ayudar a elegir uno?

Ahora que los bitcoins son famosos y caros, ¿cómo reaccionaría el mercado ante un clon de Bitcoin que utiliza un algoritmo, tecnología, etc. idénticos?

¿Cuál es uno de tus problemas favoritos que has encontrado en mecánica / dinámica clásica?

¿Por qué las personas priorizan el método estadístico para el sistema de reconocimiento de entidades de nombre a la coincidencia exacta algorítmica?

¿Cómo debo comenzar a aprender estructuras de datos y algoritmos? ¿Cuáles son algunos buenos libros, cursos en línea e idiomas preferidos?

¿Cómo podemos implementar las funciones de deshacer y rehacer en una cola de doble final?

¿Dónde se puede encontrar una foto y detalles biográficos de Burton Howard Bloom, inventor del filtro Bloom?

¿Cuál es una explicación simple del algoritmo del modelo oculto de Markov?

¿Cómo se construye exactamente una estructura de datos de árbol en JavaScript?

Cómo escribir un orden de fusión en SQL sin formato

¿Puede alguien ayudarme a preparar un plan para preparar estructuras de datos y algoritmos en un mes de tiempo desde el punto de vista de las entrevistas?