Как быстрее? Кто-нибудь делал рейтинг алгоритмов?

 

Существуют разные способы решения одной и той же задачи. Есть ли у кого-нибудь конструкция, позволяющая понять быстродействие метода?

Ну, например:

if(a>b) b=a;

или

b=MathMax(a,b);


Подобные альтернативные способы есть всегда. Что выбрать. Кто-нибудь делал рейтинг алгоритмов?

 

Я не делал, но поставить эксперимент и выяснить для себя дел минут на 10.

 
ks99 >>:

Я не делал, но поставить эксперимент и выяснить для себя дел минут на 10.

Об этом и речь. Предложите универсальный тестер.

 
Svinozavr писал(а) >>

Кто-нибудь делал рейтинг алгоритмов?

Первое выражение быстрее получается. Вот скрипт.

int start()
{
   int a, b;
   int time = TimeLocal();
   for (int i = 0; i <= 100000000; i++)
   {
      a = 7; b = 5;
      // Сюда вставляем первое выражение
      if(a > b) b = a;
   }
   int d_time_1 = TimeLocal() - time;
   
   time = TimeLocal();
   for (i = 0; i <= 100000000; i++)
   {
      a = 7; b = 5;
      // Сюда вставляем второе выражение
      b = MathMax( a, b);
   }
   int d_time_2 = TimeLocal() - time;
   
   if (d_time_1 < d_time_2) Alert ("Первое выражение быстрее");
   else
   {
      if (d_time_1 > d_time_2) Alert ("Второе выражение быстрее");
      else Alert ("По барабану");
   }

   return(0);
}
 
infinum13 >>:

Первое выражение быстрее получается. Вот скрипт.

Спасибо.

Теперь осталось только составить рейтинг...

 
Svinozavr писал(а) >>

Спасибо.

Теперь осталось только составить рейтинг...

У них небольшое различие. Разница видни начиная с цикла 10^7. А при цикле в 10^6 они равны.

Тут дело не в скорости, а в простоте, просто понятнее написать MathMax( a, b); чем if(a > b) b = a;

Но если прога большая, то может помочь.

 

Можно и в милисекундах померить:

#property show_inputs

extern int Algorithm=1;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
int a,b;
int tick=GetTickCount();
MathSrand(1);
for (int i=0;i<100000;i++)
{
  a=MathRand();
  b=MathRand();
  switch(Algorithm)
  {
   case 1: if(a>b) b=a; break;
   case 2: b=MathMax(a,b);
  }
}
Alert("Calculating - ",GetTickCount()-tick," ms");
return(0);
}
Файлы:
 
Svinozavr >>:

Об этом и речь. Предложите универсальный тестер.

Вот уж действительно свинозавр. Четыре строки кода написать лень?

 
infinum13 >>:

У них небольшое различие. Разница видни начиная с цикла 10^7. А при цикле в 10^6 они равны.

Тут дело не в скорости, а в простоте, просто понятнее написать MathMax( a, b); чем if(a > b) b = a;

Но если прога большая, то может помочь.

Да, еще раз - спасибо.

Такие вопросы возникают всегда, когда пишешь. Вот что быстрее - свой алгоритм, или стандартный поиск максимального значения в массиве. И так далее.

Было бы интересно, чтоб это все было очевидным. Опубликованным. Надеюсь, что в этой ветке будут опубликованы наблюдения форумчан.

 
Xupypr >>:

Можно и в милисекундах померить:

У тебя в цикле слишком много кода, не относящего к замеряемым строкам. И тот же switch работает несимметрично.

 
gip >>:

Вот уж действительно свинозавр. Четыре строки кода написать лень?

Очень мило - переходим на личности.

Что, проблема не актуальная? Ну так что же вы тут пишите?

Причина обращения: