Encuentra la media de las medias de los subarreglos en una array dada

Se le proporciona una array de n elementos, debe encontrar la media de la array como la media de todos los m elementos consecutivos de la array para todas las posibles arrays de longitud m con elementos consecutivos. 
Ejemplos: 
 

Input :arr[] = {3, 5, 1, 8, 9, 4}, 
           m = 4 
Output : Mean = 5.16667
Explanation : {3, 5, 1, 8}, {5, 1, 8, 9}, 
{1, 8, 9, 4} are three set of m-consecu-
tive elements. Mean of mean of sets 
is (17/4 + 23/4 + 22/4 )/ 3

Input : arr[] = {9, 4}, m = 1
Output : Mean = 6.5
Explanation : {9}, {4} are two set of
1-consecutive element. Mean of means 
of sets is (9 + 4 )/ 2

Una solución simple es considerar todos los subarreglos de tamaño m, calcular sus medias. Finalmente devuelve la media de las medias.
Una solución eficiente es usar el Algoritmo de Ventana Deslizante para este problema donde encontramos la suma de la ventana de longitud m y luego sumamos la media de cada ventana a una suma de valor. Por fin tendremos nuestro resultado al dividir la suma total por el número de ventanas posibles y eso también es suma /(n-m+1).
 

C++

// CPP program to find mean of means
#include <bits/stdc++.h>
using namespace std;
 
// function to find mean value
float findMean(int arr[], int n, int m)
{
    // declare sum and winSum (window sum)
    float sum = 0, winSum = 0;
    int i = 0;
 
    // find sum for 1st m-length window
    for (; i < m; i++)
        winSum += arr[i];
    sum += (winSum / m);
 
    // iterate over array to find sum
    // of all m-length means
    for (; i < n; i++) {
        winSum = winSum - arr[i - m] + arr[i];
        sum += (winSum / m);
    }
 
    // mean of means will be sum of means
    // divided by no of such means
    return (sum / (n - m + 1));
}
 
// Driver code
int main()
{
    int arr[] = { 2, 5, 7, 1, 9, 3, 9 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int m = 4;
    cout << "Mean = " << findMean(arr, n, m);
    return 0;
}

Java

// Java program to find mean of means
import java.util.*;
import java.lang.*;
 
public class GeeksforGeeks{
     
    // function to find mean value
    public static float findMean(int arr[], int n,
                                          int m){
     
        // declare sum and winSum (window sum)
        float sum = 0, winSum = 0;
        int i = 0;
 
        // find sum for 1st m-length window
        for (; i < m; i++)
            winSum += arr[i];
        sum += (winSum / m);
 
        // iterate over array to find sum
        // of all m-length means
        for (; i < n; i++) {
            winSum = winSum - arr[i - m] + arr[i];
            sum += (winSum / m);
        }
 
        // mean of means will be sum of means
        // divided by no of such means
        return (sum / (n - m + 1));
    }
     
    // driver code
    public static void main(String argc[]){
    int arr[] = { 2, 5, 7, 1, 9, 3, 9 };
    int n = 7;
    int m = 4;
    System.out.println("Mean = " +
                      findMean(arr, n, m));
    }
}
 
/*This code is contributed by Sagar Shukla.*/

Python3

# Python3 program to find mean of means
 
# function to find mean value
def findMean(arr, n, m) :
     
    # declare sum and winSum (window sum)
    sum = float(0)
    winSum = float(0)
    i = 0
 
    # find sum for 1st m-length window
    while (i < m):
        winSum = winSum + arr[i]
        i = i + 1
    sum = sum + (winSum / m);
 
    # iterate over array to find sum
    # of all m-length means
    while (i < n):
        winSum = winSum - arr[i - m] + arr[i]
        sum = sum + (winSum / m)
        i = i + 1
 
    # mean of means will be sum of means
    # divided by no of such means
    return (sum / (n - m + 1));
 
# Driven code
arr = [ 2, 5, 7, 1, 9, 3, 9 ]
n = len(arr)
m = 4
print ("Mean = ", findMean(arr, n, m))
 
# This code is contributed by "rishabh_jain".

C#

// Java program to find mean of means
using System;
 
public class GeeksforGeeks{
     
    // function to find mean value
    public static float findMean(int []arr, int n,
                                            int m)
    {
     
        // declare sum and winSum (window sum)
        float sum = 0, winSum = 0;
        int i = 0;
 
        // find sum for 1st m-length window
        for (; i < m; i++)
            winSum += arr[i];
             
        sum += (winSum / m);
 
        // iterate over array to find sum
        // of all m-length means
        for (; i < n; i++) {
            winSum = winSum - arr[i - m] + arr[i];
             
            sum += (winSum / m);
        }
 
        // mean of means will be sum of means
        // divided by no of such means
        return (sum / (n - m + 1));
    }
     
    // driver code
    public static void Main(){
    int []arr = { 2, 5, 7, 1, 9, 3, 9 };
    int n = 7;
    int m = 4;
     
    Console.WriteLine("Mean = " +
                    findMean(arr, n, m));
    }
}
 
/* This code is contributed by vt_m.*/

PHP

<?php
// PHP program to find mean of means
 
// function to find mean value
function findMean($arr, $n, $m)
{
     
    // declare sum and
    // winSum (window sum)
    $sum = 0;
    $winSum = 0;
    $i = 0;
 
    // find sum for 1st
    // m-length window
    for (; $i < $m; $i++)
        $winSum += $arr[ $i];
    $sum += ( $winSum / $m);
 
    // iterate over array to find sum
    // of all m-length means
    for (; $i < $n; $i++)
    {
        $winSum = $winSum - $arr[ $i - $m] +
                                 $arr[ $i];
        $sum += ( $winSum / $m);
    }
 
    // mean of means will be sum of means
    // divided by no of such means
    return ($sum / ($n - $m + 1));
}
 
    // Driver code
    $arr = array(2, 5, 7, 1, 9, 3, 9);
    $n =count($arr);
    $m = 4;
    echo "Mean = ", findMean($arr, $n, $m);
 
// This code is contributed by anuj_67
?>

Javascript

<script>
 
// Javascript program to find mean of means
 
// function to find mean value
function findMean(arr, n, m)
{
    // declare sum and winSum (window sum)
    var sum = 0, winSum = 0;
    var i = 0;
 
    // find sum for 1st m-length window
    for (; i < m; i++)
        winSum += arr[i];
    sum += (winSum / m);
 
    // iterate over array to find sum
    // of all m-length means
    for (; i < n; i++) {
        winSum = winSum - arr[i - m] + arr[i];
        sum += (winSum / m);
    }
 
    // mean of means will be sum of means
    // divided by no of such means
    return (sum / (n - m + 1));
}
 
// Driver code
var arr = [ 2, 5, 7, 1, 9, 3, 9 ];
var n = arr.length;
var m = 4;
document.write( "Mean = " + findMean(arr, n, m));
 
</script>

Producción:  

Mean = 4.9375 

Publicación traducida automáticamente

Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *