Лабораторна робота №1 АМО

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2018
Тип роботи:
Лабораторна робота
Предмет:
Алгоритми та методи обчислень

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” ЗВІТ З лабораторної роботи №1 з дисципліни “Алгоритми та методі обчислень” на тему: “Властивості, параметри та характеристики складності алгоритму” Варіант 21 1.Завдання: Скласти програму (C/C++), яка дозволяє провести порівняння трьох алгоритмів знаходження НСД за характеристикою часової складності для таких вхідних даних: 2.Варіант завдання. Варіант № 21 N1 = 526 N2 = 521 3. Алгоритм виконання завдання: / 4. Результат виконання програми: / Рис.1. Результат виконання програми 4. Складність алгоритму: Відношення часу роботи до кількості стрічок коду 1-ша алгоритм: 5563ns – 40 = 139.08 2-га алгоритм: 25ns – 21 = 1.19 3-тя алгоритм: 28ns – 19 = 1.47 Тому можна вважати, що найефективнішим алгоритмом є 2 алгоритм. 5. Висновок: На даній лабораторній роботі я навчився порівнювати часові характеристики двох алгоритмів, застосованих для вирішення одного завдання. Код програми: //to measure time it is better to run with Linux #include <stdio.h> #include <stdlib.h> #include <time.h> #define N1 526 #define N2 521 #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; }
Антиботан аватар за замовчуванням

28.05.2019 18:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!