Estoy atrapado en este problema:
Dada una matriz de los primeros números naturales permutados al azar, se construye una matriz , de modo que es el número de elementos de a que son más pequeños que .
i) Dado ¿puedes encontrar en tiempo? ii) Dado ¿puedes encontrar en tiempo?
Aquí, . Para un ejemplo concreto:
¿Alguien puede ayudarme? Gracias.
algorithms
arrays
permutations
maldito
fuente
fuente
Respuestas:
El algoritmo ingenuo para determinar de :AB A
Este algoritmo compara con todos los demás ( veces), con otros, etc., por lo que el número total de comparaciones es . Pero eso no es lo mejor que podemos hacer. Por ejemplo, mirando , ¡no tenemos que hacer ninguna comparación! porque son los primeros números naturales, y está garantizado (independientemente de la permutación) que los números naturales más bajos estarán allí. ¿Qué pasa con ? En lugar de verificar a , podríamos simplemente verificar . Es decir:A(1) n−1 A(2) n−2 (n−1)(n−2)2 B(n) B(n)=A(n)−1 n n−1 B(n−1) A(1) A(n−2) A(n)
Esto llevaría pasos, que sigue siendo . Tenga en cuenta también que al construir partir de , si entonces .2×(n2−1)(n2−2)2=(n−2)(n−4)4 O(n2) A B B(n)=A(n)−1 A(n)=B(n)+1
Pero ahora por más delicadeza. Si se nos permite espacio adicional u ordenar in situ, podemos ordenar los números a medida que los comparamos. Por ejemplo:
En lugar de verificarlos todos (o verificarlos en orden), podríamos usar la búsqueda binaria para determinar cada . Sin embargo, la clasificación todavía lleva tiempo .B(k) O(nlogn)
fuente
¡En lugar de determinar cada uno a la vez, podemos mirar hacia adelante y solo revisar cada número en una vez ! Pero usaremos espacio:B(k) A n
Podríamos ahorrar aún más tiempo al no actualizar los que ya se han determinado (es decir, no tiene sentido actualizar después del primer paso), pero en el peor de los casos, todavía tenemos que actualizar veces8 (n)(n+2)2
fuente
tanto I como II pueden resolverse usando #next_greater_element que expliqué aquí . pero es un poco más difícil que solo el problema, pero antes de la solución necesitas aprender el siguiente elemento más importante:
la segunda parte también es similar y señala que podemos obtener el valor del elemento más adecuado en EDIT: mi solución es incorrecta, parece que no tiene ninguna solucióno ( n )O(1) o(n)
fuente