De la programación competitiva 3
Esta rutina de creación crea hasta [matemáticas] O (1 + 2 + 4 + 8 + \ puntos + 2 ^ {\ log_2 (n)}) = O (2n) [/ matemáticas] segmentos más pequeños y, por lo tanto, se ejecuta en [matemáticas] O (n) [/ matemáticas]. Sin embargo, como utilizamos una indexación de matriz compacta basada en 1 simple, necesitamos que st (la matriz) tenga al menos un tamaño [matemático] 2 * 2 ^ {\ lfloor (\ log_2 (n) \ rfloor + 1} [/ math ]. En nuestra implementación simplemente usamos un límite superior suelto de complejidad espacial [matemática] O (4n) = O (n) [/ matemática].
Aquí se explica que se utiliza una implementación basada en 1, esto requiere más de [math] 2n-1 [/ math] space, por lo que en lugar de calcular [math] size = 2 * [/ math] [math] (int) pow (2, floor (log2 (n)) + 1) [/ math] es más rápido usar bit-shift [math] size = (N << 2) [/ math]. Además, dado que 4 es una constante, realmente no te importa.
- ¿Cuánto tiempo / horas debo pasar todos los días para ser un buen programador de Java para poder resolver estructuras de datos y algoritmos con ese lenguaje en el futuro?
- ¿Cuáles son los rompecabezas de algoritmos de notación O más interesantes?
- ¿Cuál es el mejor algoritmo para encontrar la ruta más corta en un gráfico orientado, donde algunos bordes están bloqueados y las teclas están en algún lugar de los nodos?
- ¿Las estructuras de datos son más importantes o es el lenguaje?
- ¿Cuáles son las aplicaciones de la vida real del algoritmo de Prim?