¿Hay algoritmos con complejidad [math] \ mathcal {O} [/ math] [math] (\ sqrt {\ log (n)}) [/ math]?

Pensemos en los algoritmos [matemática] o (n) [/ matemática] en general. Debe ser obvio desde el principio que tal algoritmo es posible solo si no tiene que leer o examinar todos los datos. De lo contrario, el paso de lectura ya sería [math] \ Omega (n) [/ math]. Para poder calcular algo en un conjunto de datos sin leerlo todo, debe confiar en una propiedad estadística o estructural del mismo. Entonces, por ejemplo, calcular el promedio aproximado de un conjunto de datos grande podría ser [matemática] o (n) [/ matemática] ya que podría leer una muestra aleatoria de los datos para hacerlo.

Dejemos a un lado los métodos estadísticos por ahora y analicemos la estructuración de los datos para permitir cálculos [matemáticos] o (n) [/ matemáticos]. Por ejemplo, sabemos que la búsqueda binaria en un conjunto de datos ordenado es [math] \ mathcal {O} (\ log n) [/ math]. Tenemos que ignorar la clasificación inicial de los datos para llegar a este límite de complejidad.

Entonces, ¿existen algoritmos efectivos, razonables y prácticos que se basen en la estructura de los datos para lograr un límite [matemático] \ matemático {O} (\ sqrt {\ log n}) [/ matemático]? ¡Si! El algoritmo de búsqueda rápida de unión con compresión de ruta le permitirá probar si dos elementos pertenecen al mismo conjunto en [math] \ mathcal {O} (\ log ^ {*} n) [/ math] una vez que haya organizado los datos en camino poco profundo árboles comprimidos. Los detalles de cómo hacer la compresión de ruta se encuentran en el enlace PDF [1] a continuación.

Aquí, [math] \ log ^ {*} [/ math] es la función de logaritmo iterado [2], que es [math] o (\ sqrt {\ log n}) = \ mathcal {O} (\ sqrt {\ log n}) [/ math].

Editar: Después de pensar en esto un poco más, encontré un problema con cualquier cosa que sea [matemática] o (\ log n) [/ matemática]. El problema es que si intenta colocar elementos de datos [matemáticos] n [/ matemáticos] en la memoria, entonces los punteros, el índice o lo que necesite para acceder a ellos deben ser de tamaño [matemático] \ Omega (\ log n) [/matemáticas]. El análisis habitual de la búsqueda binaria o este algoritmo de búsqueda de unión supone que cada acceso a la memoria es [matemática] O (1) [/ matemática], pero desde un punto de vista de la teoría de la complejidad pura, debe considerarse [matemática] \ Omega (\ log n) [/ math] si involucra indirección a través de un índice o puntero. Por lo tanto, la búsqueda binaria es realmente [math] \ mathcal {O} (\ log ^ {2} n) [/ math] y la parte find de union-find es realmente [math] \ mathcal {O} (\ log ^ { *} n \ log n) [/ math].

Notas al pie

[1] https://www.cs.princeton.edu/~rs…

[2] Logaritmo iterado – Wikipedia

¡Por supuesto! Para cualquier función f (n), donde n es el tamaño de una entrada, hay un número infinito de algoritmos que se ejecutan en f (n). Un ejemplo es el siguiente, para f (n) = sqrt (log (n)):

Vacío inútil (entrada de matriz []) {
int limit = sqrt (log (n));
Para (int i = 0; i print (“hola mundo”);
}

Puedes pensar en O (√log (n)) como tiempo constante para todos los propósitos prácticos. Por lo tanto, el tiempo de ejecución asintótico de obtener un elemento en un índice dado de una matriz, que es una operación O (1), puede considerarse como limitado anteriormente por O (√log (n)).

More Interesting

¿Qué estructura de datos usa internamente un objeto en los lenguajes OOP? ¿Qué algoritmo se usa para la búsqueda de propiedades en un objeto?

¿Cuáles son las aplicaciones de la estructura de datos de conjuntos disjuntos?

Recientemente llegué a un llamado indicador de opciones binarias del sitio web 'www.investoo.com' que afirma una tasa de éxito del 83% al predecir el resultado de las opciones binarias. ¿Es una estafa?

En la programación de computadoras, ¿es cierto que una recursión funcionará mejor para encontrar todas las rutas posibles que los bucles anidados?

¿Qué estrategias o algoritmos se utilizan para agrupar rutas de pasajeros en función de la ubicación y la hora de salida?

¿Qué tipo de algoritmo utiliza Google para clasificar los correos?

¿Cuál es el mejor algoritmo para encontrar el número más pequeño (mínimo 40 dígitos) cuyo último dígito se mueve al frente y es nueve veces el número original?

¿Cuál es el enfoque algorítmico para encontrar el tamaño de la submatriz rectangular máxima que tiene todos los 1 de una matriz que contiene 0 y 1?

¿Por qué y cómo son importantes los algoritmos en nuestra vida diaria?

Tengo la cadena de entrada, también tengo la cadena encriptada. ¿Cómo averiguo qué algoritmo de cifrado se utilizó?

Cómo resolver la pregunta 'Mango Plantation' en Codechef

¿Es necesario tener datos estacionarios para aplicar algún tipo de algoritmo de aprendizaje automático?

¿Cómo ordenar una matriz de enteros proporcionados como una cadena como entrada desde la línea de comandos, usando lenguaje C?

Si creció en una familia alcohólica, ¿cuál fue su historia y los desafíos que enfrenta personal y profesionalmente debido a la educación?

Yoshua Bengio: ¿Puede el aprendizaje profundo encontrar un nuevo algoritmo de clasificación?