Cómo dividir una matriz en 2 nuevas variables de matriz y encontrar el promedio de ellas

Este problema se puede resolver utilizando el algoritmo de divide y vencerás

  1. Necesitas dividir cada matriz en el medio
  2. Calcule la suma y devuelva la suma
  3. El caso base es cuando izquierda == derecha

Código sugerido para este problema

#include
usando el espacio de nombres estándar;
int arr [100000];
doble f (int l, int r, int sz) {
si (l == r) {
return (doble) arr [l];
}
int m = l + (rl) / 2;
doble s1 = f (l, m, (sz + 1) / 2);
doble s2 = f (m + 1, r, (sz) / 2);
doble ans = (doble) ((doble) ((doble) ((doble) s1 * (doble) ((int) ((sz + 1) / 2))) + (doble) (s2 * (doble) (( int) (sz) / 2))) / (doble) sz);
// cout << ans << "" << l << "" << r << endl;
volver ans;
}

int main () {
int n;
cin >> n;
para (int i = 0; i <n; i ++)
cin >> arr [i];
cout << f (0, n-1, n);
devuelve 0;
}

Enlace de Ideone: Ideone.com

La complejidad temporal es T (n) = 2 * T (n / 2) + O (1) = O (n)

PD: Probablemente he entendido la consulta correctamente, si tiene más consultas por favor comente.

Voto negativo

Así es como lo hice:
1 – Matriz total -> si el número impar no puede crear dos matrices separadas. En)
2 – Divide el total entre 2.
3 – Ordenar matriz (de mayor a menor) -> O (NLogN)
4 – Comienza con el número más alto y sigue intentando obtener la cantidad restante yendo al siguiente número más alto. Si no puede hacerlo, mueva el número a la otra matriz. -> Creo que el peor de los casos es O (N ^ 2).

Así que tomemos este ejemplo: 3, 19, 7, 4, 6, 40, 25, 8

  1. Total = 112
  2. Dividir entre 2 = 56
  3. Sort Array – 3, 4, 6, 7, 8, 19, 25, 40
  4. -> 40 en la lista 1 (lista 1 total = 40, 16 restantes)
    -> 25 demasiado grande, en la lista 2 (lista 2 total = 25)
    -> 19 demasiado grande, en la lista 2 (lista 2 total = 44)
    -> prueba 8 en la lista 1 (lista 1 total = 48, 8 restantes)
    -> Prueba 7 en la lista 1 (lista 1 total = 55, 1 restante)
    -> no hay forma de agregar 1 más
    -> 7 falla la prueba 6 (lista 1 total = 54, 2 restantes)
    -> no hay forma de agregar 2 más
    -> 6 falla la prueba 4 (lista 2 total – 52, 4 restantes)
    -> no hay forma de agregar 2 más
    -> 4 falla la prueba 3
    -> 3 fallas vuelve a 8
    -> Mueve 8 a la lista 2 y comienza a probar 7 (lista 1 total = 47, 9 restantes, lista 2 total = 52)
    -> Prueba 6 (lista 1 total = 53, 3 restantes)
    -> Agregar 3 elementos (Lista 1 total = 56, éxito)

Entonces las dos listas son [40,7,6,3] y [25,19,8,4]

// donde es el número de elementos en la matriz y matriz [] es la matriz de elementos

split_average_array (int n, int array [])

{

sum1 = sum2 = 0;

bandera = falso;

if (n% 2 == 0) // El número de elementos es par

loopend = n / 2;

más

{

loopend = = (n + 1) / 2;

sum2 = 0 – matriz [loopend-1]; // resta el elemento adicional que se agregará en bucle

bandera = verdadero;

}

para (i = 0; i

{

sum1 = sum1 + matriz [i];

sum2 = sum2 + matriz [(n-1) -i];

}

avg1 = sum1 / loopend;

if (bandera == verdadero)

avg2 = sum2 / (loopend -1);

más

avg2 = sum2 / loopend;

}

Esto es solo el algoritmo.