es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La suma del producto de todos los subarreglos de longitud igual o menor a k.

Estoy tratando de resolver el siguiente problema.

Dado un arreglo de enteros llamado A de tamaño n. Encuentra la suma del producto de todas las submatrices posibles de A con una longitud menor que k con módulo M. p.ej.

A = [9 1 90]
k = 2
M = 10

entonces la suma solicitada será:

sum = (9 + 1 + 90 + (9 * 1) + (1 * 90)) % 10 = 9

Primero intenté una programación dinámica simple mientras iteraba sobre A y tardó O(nk) y obtuvo un error de límite de tiempo. El código mencionado en C++ es el siguiente:

int main() {
    int n, k, M;
    cin >> n >> k >> M;
    long long int D[n][n];
    int sum_ = 0;
    for (size_t i = 0; i < n; i++)
    {
        int temp;
        cin >> temp;
        temp %= M;
        D[i][i] = temp;
        sum_ = ((sum_ + temp) % M);
    }

    for (size_t t = 1; t < k; t++)
    {
        size_t i = 0, j = t;
        while (j < n) {
            int mid = (i + j) / 2;
            int temp = (D[i][mid] * D[mid+1][j]) % M;
            D[i][j] = temp;
            sum_ = ((sum_ + (temp % M)) % M);
            i ++;
            j ++;
        }

    }
    cout << sum_ << endl;
    return 0;
}

Así que ahora estoy pensando en un método Divide y Conquista para resolverlo en O(nlogn), pero no puedo encontrar ninguna solución buena.

¿Hay alguna manera de resolver este problema en una complejidad de tiempo mejor que O(nk) (o O(n.n))?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible resolver este problema en complejidad de tiempo O(nk). Un enfoque es utilizar un arreglo de suma de prefijos. Este arreglo almacena la suma acumulativa de los elementos en el arreglo. Luego, para cada subarreglo de longitud k, puede calcular el producto de los elementos en el subarreglo restando la suma acumulativa de los elementos antes del subarreglo de la suma acumulativa de los elementos después del subarreglo. Este enfoque tomará una complejidad de tiempo O(nk).

Comments are closed.