сумма двумерного массива - PullRequest
1 голос
/ 28 марта 2011

У меня есть двумерный массив с плавающей точкой, как показано ниже

{0.2,0.0,0.3,0.0,0.0}
{0.4,0.1,0.0,0.0,0.9}
{0.0,0.0,0.0,0.3,0.6}

Я хочу получить следующий вывод

{0.6,0.0,0.3,0.0,0.0}
{0.6,0.1,0.0,0.0,1.5}
{0.0,0.0,0.0,0.3,1.5}

Если вы проанализируете, я суммирую ненулевое значение каждого столбца и обновлю все ненулевые значения этим значением суммы. Например, в первом столбце я суммирую (0,2 + 0,4 = 0,4) и обновил обе позиции значения с 0,6.

Я использую Java, как я могу это сделать? Это простой пример, в реальном времени у меня действительно большие массивы.

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Давайте назовем ваш входной массив float[][] a и параллельный выходной массив b, инициализированные для всех нулей.

float curSum = 0.0;   
first = true;
for(int i = 0; i < a[0].length; i++)
{
    for(int j = 0; j < a.length; j++)
    { 
         if(a[i][j] != 0)
         {
             if (first)
             {
                 for(int k = j; k < a.length; k++)
                     curSum += a[i][k];
                 first = false;
             }
             b[i][j] = curSum;
         }
     }
     curSum = 0.0;
     first = true;
}

Могут быть некоторые более тонкие точки, которые вы должны изменить, такие как сравнение чисел с плавающей точкой ивсе, но я думаю, что идея в этом вся

Я думаю, что она работает в O (n * m), и это не кажется отличным, но я старался сделать итерации как можно короче.Я не вижу более быстрого способа сделать это.Даже если есть три цикла for, один с k будет запускаться только один раз для каждого цикла j, так что асимптотически он вообще не увеличивает сложность.

1 голос
/ 28 марта 2011

Это работает при условии, что они все одинаковой длины.Особые случаи - упражнение для читателя

...