¿Podemos modificar la técnica de descomposición de la raíz cuadrada a la descomposición de la raíz cúbica? Si no, ¿por qué?

Imagina que eres el probador de preguntas. Su trabajo sádico es garantizar que el número máximo de personas obtenga el “Límite de tiempo excedido” si no aplican el algoritmo requerido -> O (√N) por consulta. ¿Cómo distribuiría sus consultas? Vamos a aplicar algo de teoría del juego.

Bueno, podríamos hacer que casi todos ellos actualicen consultas. Pero una actualización será una operación O (1) en una matriz simple. Eso significa una complejidad de alrededor de O (1) por consulta. No hay salario este mes.

Del mismo modo, muchas consultas tampoco son buenas. Esto se debe a que una persona podría preprocesar y almacenar el RESULTADO de IZQUIERDA = 1 a DERECHA = 1,2,3,… .N en el tiempo O (N) y responder cada consulta como RESULTADO [DERECHA] – RESULTADO [IZQUIERDA]. O (1) operaciones por consulta nuevamente.

Las mejores pruebas resultan cuando tiene exactamente la mitad del número de actualizaciones y el resto como consultas. Esto asegura que ambas operaciones necesiten la misma cantidad de tiempo para ejecutarse.

Debemos asegurarnos de que nuestro algoritmo pueda sobrevivir a las operaciones de actualización Q y consulta Q. En la descomposición en bloque, se necesita tiempo B para una actualización. Y las consultas tardan N / B en completarse.

[matemáticas] Tiempo total = B + N / B [/ matemáticas]

Vamos a diferenciar por B para obtener los mínimos.

[matemática] d (Tiempo total) / dB = 1 – N / B ^ 2 = 0 B = √N [/ matemática]

Podemos diferenciar la cantidad nuevamente para verificar que se trata de un mínimo

[matemática] d ^ 2 (Tiempo total) / dB ^ 2 = [/ matemática] [matemática] 2N / B ^ 3> 0 [/ matemática]

La cantidad es mayor que cero y, por lo tanto, un mínimo. Por lo tanto, decimos que el mejor tamaño de bloque posible es √N.

La técnica de la que habla tomaría solo la raíz cúbica de N por actualización, pero tomaría N / cube_root (N) = N ^ (2/3) por consulta. “Límite de tiempo excedido”.

He hecho un video sobre descomposición de raíz cuadrada. Habla sobre el algoritmo y su implementación.

¡Aclamaciones!

Byte del concurso de codificación: el truco de la raíz cuadrada

La publicación de blog anterior explica por qué la raíz cuadrada es la mejor opción y no la raíz cúbica o alguna otra raíz.

¿Realmente pensaste en esto antes de publicar esta pregunta? ¿Pensó en las complejidades de tiempo para la consulta de rango y la actualización de puntos en un problema de suma de rango? ¿Pensaste en cómo se puede implementar esto? Pregunto todo esto porque lo estoy pensando ahora y me parece realmente desordenado e inviable.