Слишком большое время работы для маленького цикла - C#

Узнай цену своей работы

Формулировка задачи:

Я реализую алгоритм SURF. Имеется уже заполненная матрица яркостей, где lockBitmap.Width и lockBitmap.Height - ширина и высота изображения в пикселях. Эта матрица заполняется быстро с помощью маршалинга.
 double[,] BrightMatrix = new double[lockBitmap.Width, lockBitmap.Height];
И есть простенький код, который вычисляет интегральное представление изображения (матрица тех же размеров, где каждый элемент - сумма яркостей всех пикселей, левее и выше текущего):
 for (int x = 0; x < lockBitmap.Width; x++)
            {
                for (int y = 0; y < lockBitmap.Height; y++)
                {
                    double Sum = 0;
                    for (int k = 0; k <= x; k++)
                    {
                        for (int l = 0; l <= y; l++)
                        {
                            Sum += BrightMatrix[k, l];
                        }
                    }
                    IntegralMatrix[x, y] = Sum;
                }
            }
Для изображения размером 50Х50 пикселей код работает шустро. Но для изображения 300Х300 требуется почти минута времени. С чем может быть связано такое большое время, если я просто гуляю по небольшому, уже заполненному массиву и просто беру из него числа?

Решение задачи: «Слишком большое время работы для маленького цикла»

textual
Листинг программы
for (int x = 0; x < source.Width; x++)
            {
                for (int y = 0; y < source.Height; y++)
                {
                    if (x == 0 && y == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y]; }
                    else if (y == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x - 1, y]; }
                    else if (x == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x, y - 1]; }
                    else { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x - 1, y] + IntegralMatrix[x, y - 1] - IntegralMatrix[x - 1, y - 1]; }
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы