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 день непрерывной работы
компьютера.
|