Алгоритм розсувного вікна (The sliding window algorithm).

Програми для ARDUINO DUE
Відповісти
Аватар користувача
radioman
Site Admin
Повідомлень: 96
З нами з: 28 вересня 2020, 12:01
Дякував (ла): 6 разів
Подякували: 2 рази

Алгоритм розсувного вікна (The sliding window algorithm).

Повідомлення radioman »

Алгоритм обраховує максимальну суму у "вікні", котре ковзає по масиву даних. Розділивши суму на розмір вікна, можемо отримати максимальне ковзаюче середнє:

Код: Виділити все

//https://janac.medium.com/what-is-the-sliding-window-algorithm-f9fcfe92b853
// алгоритм розсувного вікна (The sliding window algorithm)
// повертає максимальну суму k суміжних елементів масиву.
int intSize = 10;                                   // розмір масиву
int k = 3;                                          // розмір вікна
int intMaxSum;                                      // максимальна сума у вікні
int intArray[] = {4, 2, 1, 7, 8, 1, 2, 8, 1, 0};    // функція поверне 1+7+8=16

void setup() {
  Serial.begin(9600);
}
void loop() {

  intMaxSum = maxSumOfSubarray2(intArray, k);
  Serial.println(intMaxSum);
}

int maxSumOfSubarray2(int*intArray, int k) {
  int sum;

  for (int i = 0; i <= (intSize - k); i++) {

    int tempSum = 0;
    for (int j = i; j < (i + k); j++) {
      tempSum += intArray[j];
    }

    if (tempSum > sum) {
      sum = tempSum;
    }
  }
  return sum;
}
Відповісти