.: [предыдущая | оглавление | следующая] :.

5.4 Алгоритмические проблемы

Предположим, Вы запрограммировали некоторый алгоритм. Программа на простых примерах работает прекрасно. Однако, подставляя реальные данные, програм- маначинаетсчитать...5мин, 10мин... 1час... Вызадачуснимаетеиначинаете анализировать на предмет зацикливания. Но зацикливания нет. Теперь очередь настает анализу алгоритма. Программист пытаетс оценить врем выполнения ал- горитма. Рассмотрим конкретный пример, предположим имеется следующий фрагмент программы:

unsigned _int64 i,k=0Xffffffffffffffff;
for(i=0; i < K; I++);
printf("Hello student!!!\n");//Интересно, сколько времени ждать привета?
Сколько времени займет вычисление,попробуйте на своем компьютере!

Ниже приведен текст программы,который позволяет сделать приблизительные расчеты.

#include <conio.h>
#include <stdio.h>
void main()
{ //
подсчет времени работы фрагмента программы
      unsigned_int64 i, k=0Xffffffffffffffff;
      printf("number of iterations=%Lu\n",k);//
число итераций в цикле
      k=k/1000000000000LU; //1 гигагерц (тактовая частота процессора)
      k=k*10; // одна итерация - 10 тактов процессора
      printf("second=%Lu\n",k); //всего секунд
      k=k/3600; //количество часов непрерывной работы
      printf("hour=%Lu\n",k);
      k=k/24; //
количество суток
      printf("day=%Lu\n",k);
      k=k/365; //
количество лет
      int d=k%365; //итого
      printf("yaers=%Lu days=%d\n",k,d);
      getch();
}
Листинг работы программы:
        number of iterations=18446744073709551615
        second=184467440
        hour=51240
        day=2135
        yaers=5 days=5

Таким образом, это достаточно большое время. Даже увеличива тактовую частоту в 100 раз, получим 21 день непрерывной работы компьютера.

.: [предыдущая | оглавление | следующая] :.