0 / 0 / 0
Регистрация: 26.03.2018
Сообщений: 5
1

Алгоритм Евклида, показать время выполнения алгоритма

29.03.2018, 14:58. Показов 778. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N1  386
#define N2  381
 
#define MIN(a,b) (((a)<(b))?(a) : (b))
#define MAX(a,b) (((a)>(b))?(a) : (b))
 
#define REPEAT_COUNT 1000000
#define REPEATOR(count, code) \
for (unsigned int indexIteration = (count); indexIteration--;){ code; }
#define TWO_VALUES_SELECTOR(variable, firstValue, secondValue) \
    (variable) = indexIteration % 2 ? (firstValue) : (secondValue);
 
double getCurrentTime() {
    clock_t time = clock();
    if (time != (clock_t)-1) {
        return ((double)time / (double)CLOCKS_PER_SEC);
    }
    return 0.; // else  
}
 
unsigned long long int f1_GCD(unsigned long long int variableN1, unsigned long long int variableN2) {
    unsigned long long int returnValue = 1;
 
    for (unsigned long long int i = 1, k = MIN(variableN1, variableN2); i <= k; i++) {
        if (!(variableN1 % i || variableN2 % i)) {
            returnValue = i;
        }
    }
 
    return returnValue;
}
 
unsigned long long int f2_GCD(unsigned long long int a, unsigned long long int b) {
    for (unsigned long long int aModB;
        aModB = a % b,
        a = b,
        b = aModB;
        );
 
    return a;
}
 
unsigned long long int f3_GCD(unsigned long long int a, unsigned long long int b) {
    if (!b) {
        return a;
    }
 
    return f3_GCD(b, a % b); // else
}
 
int main() {
    unsigned long long int vN1 = N1, vN2 = N2, a = MAX(vN1, vN2), b = MIN(vN1, vN2),
        vN1_ = vN1, vN2_ = vN2, a_ = a, b_ = b,
        returnValue;
 
    double startTime, endTime;
 
    // f1_GCD 
    startTime = getCurrentTime();
    REPEATOR(REPEAT_COUNT,
        TWO_VALUES_SELECTOR(vN1, 16, vN1_);
    TWO_VALUES_SELECTOR(vN2, 4, vN2_);
    returnValue = f1_GCD(a, b);
    )
        endTime = getCurrentTime();
    printf("f1_GCD return %d \r\nrun time: %dns\r\n\r\n",
        returnValue,
        (unsigned int)((endTime - startTime) * (double)(1000000000 / REPEAT_COUNT)));
 
    // f2_GCD 
    startTime = getCurrentTime();
    REPEATOR(REPEAT_COUNT,
        TWO_VALUES_SELECTOR(a, 16, a_);
    TWO_VALUES_SELECTOR(b, 4, b_);
    returnValue = f2_GCD(a, b);
    )
        endTime = getCurrentTime();
    printf("f2_GCD return %d \r\nrun time: %dns\r\n\r\n",
        returnValue,
        (unsigned int)((endTime - startTime) * (double)(1000000000 / REPEAT_COUNT)));
 
    // f3_GCD 
    startTime = getCurrentTime();
    REPEATOR(REPEAT_COUNT,
        TWO_VALUES_SELECTOR(a, 16, a_);
    TWO_VALUES_SELECTOR(b, 4, b_);
    returnValue = f3_GCD(a, b);
    )
        endTime = getCurrentTime();
    printf("f3_GCD return %d \r\nrun time: %dns\r\n\r\n",
        returnValue,
        (unsigned int)((endTime - startTime) * (double)(1000000000 / REPEAT_COUNT)));
 
    printf("Press any key to continue . . .");
    getchar();
    return 0;
}
Когда запускаю програму, то показывает 0 наносекунд (время выполнения алгоритма). Как сделать, чтоб показывало нормальное время?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2018, 14:58
Ответы с готовыми решениями:

Время выполнения алгоритма
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;time.h&gt; using namespace std; void...

Рассчитать время выполнения алгоритма
рассчитать время выполнения алгоритма со сложностью О (n^2) для n=10000 если время выполнения для...

Время выполнения алгоритма
Доброго времени суток! Ниже напишу что нужно сделать, но я не знаю как это все правильно называется...

Показать форму на время выполнения длительного процесса
Добрый вечер форумчане! Есть главная форма и длительный процесс. Как можно сделать так, чтоб во...

4
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
29.03.2018, 17:27 2
Цитата Сообщение от centurion98 Посмотреть сообщение
unsigned long long int
И не лень было везде такое писать? Есть же using. Да и в стандартной библиотеке есть тип std::unit64_t.
C++
1
using ulong = unsigned long long; // int можно не писать
Цитата Сообщение от centurion98 Посмотреть сообщение
Как сделать, чтоб показывало нормальное время?
Попробуй вводить числа по-больше. Скажем 109 и 108.
0
0 / 0 / 0
Регистрация: 26.03.2018
Сообщений: 5
29.03.2018, 20:08  [ТС] 3
Иначе никак? Просто тогда время выполнения будет очень длинноё
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
29.03.2018, 20:49 4
Цитата Сообщение от centurion98 Посмотреть сообщение
Иначе никак?
Ну подбери сам себе числа какие надо. Можно взять 10^7 и 10^6.
0
0 / 0 / 0
Регистрация: 26.03.2018
Сообщений: 5
29.03.2018, 21:18  [ТС] 5
Безрезультатно, програма зависает (
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2018, 21:18
Помогаю со студенческими работами здесь

Время выполнения алгоритма на С++ и Делфи
Доброе время суток, уважаемые программисты. Вашему вниманию представляется реализация шифра...

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

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

Время выполнения рекурсивного и итерационного алгоритма быстрой сортировки
Почему вот это : void sort(int *ar, int L, int R){ int i, j, x, buf; x = ar; i =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru