Периодически вызывайте дорогую функцию внутри цикла - PullRequest
0 голосов
/ 19 ноября 2018

Я вызываю вычислительно дорогую функцию внутри цикла:

for( int j = 0; j < Max; ++j ) {

    // ...

    processQueuedEvents(); // Computationally expensive call

    // ...

}

Однако мне не нужно запускать дорогую функцию на каждой отдельной итерации цикла, поэтому я хочу периодически вызывать ее :

for( int j = 0; j < Max; ++j ) {

    // ...

    if ( /* The condition I'm talking about */ ) 
        processQueuedEvents(); // Computationally expensive call

    // ...

}

На данный момент мне нужно разработать правильное условие для моего периодического вызова.Условие должно соответствовать Max, я имею в виду, если Max больше , дорогой вызов * меньше -часто и если Max меньше меньше дорогой звонок больше -часто.

У кого-нибудь есть какие-либо предложения или советы?По какой-то причине мне трудно найти подходящее состояние.

1 Ответ

0 голосов
/ 19 ноября 2018

Вы не предоставили достаточно информации о функции приращения, которую хотите использовать.Если вы рассматриваете линейный вариант, вы можете рассуждать с коэффициентами 10 следующим образом:

  • 0 <= Max < 10 - вызывать дорогостоящий вызов при каждом выполнении цикла.
  • 10 <= Max < 100 - вызывать дорогостоящий вызов при каждом 10-th (j % 10 == 0) выполнении цикла.
  • 100 <= Max < 1000 - вызывать дорогой вызов при каждом 100-th (j % 100 == 0) выполнении цикла.

и т. д..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...