DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Лабораторна робота № 6 «Побудова та аналіз складності рекурсивних алгоритмів»

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

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

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

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Алгоритми та методи обчислень
Група:
КН-11
Коротко про документ

Про що ця робота

У роботі досліджуються рекурсивні та ітераційні алгоритми обчислень. Наведено приклади програм на C++ та виконано аналіз їхньої трудомісткості.

У роботі розглядаються

  • Рекурсивні алгоритми
  • Ітераційні алгоритми
  • Складність алгоритмів
  • Трудомісткість
  • Програмування на C++
  • Функції в C++

Зміст і розділи

  1. Мета роботи
  2. Завдання
  3. Розв’язування
  4. Ітераційне обчислення
  5. Рекурсивне обчислення
  6. Результат виконання програми
  7. Висновок
  8. Додатки
Для кого:Студенти технічних спеціальностей закладів вищої освіти, які вивчають програмування та алгоритми.
Викладачі:Викладач кафедри

Ключові поняття

рекурсіяітераціяскладність алгоритмутрудомісткістьфункціястекпрограмаC++алгоритмобчислення

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Лабораторна робота № 6 "Побудова та аналіз складності рекурсивних алгоритмів" № варіанта = [(ASCII–код першої літери прізвища – велика латинська літера) * (день народження) ] % 37 + 1= = (84*14)%37 + 1 = 1176%37 + 1= 29 + 1=30 Львів – 2012 1. МЕТА РОБОТИ Вивчити основні методи організації рекурсивних алгоритмів та дослідження їх ефективності Завдання:. Написати програму для ітераційної та рекурсивної форм обчислення значення функції згідно з варіантом Для рекурсивної форми обчислення використати рекурсивну функцію з виконанням дій на рекурсивному під’омі (для парних варіантів) або на рекурсивному спуску (для непарних варіантів). Порівняти ефективності ітераційної та рекурсивної форм обчислення значення функції. РОЗВ’ЯЗУВАННЯ: Навести приклад обчислення при n=3 та при n=14 При n=3: y1= 2 = 1,4142 y2= 2 + 2 = 1,8477 y= 2 + 2+ 2= 1,9615 При n=4: y1= 2 = 1,4142 y2= 2 + 2 = 1,8477 y3= 2 + 2+ 2 = 1,9615 y= 2 + 2+ 2+ 2 = 1,9903 3. Ітераційне обчислення. Опис алгоритму розв’язання задачі (навести вигляд ітераційної функції обчислення y) int main(){   int n;   float y=0; 1 операція.   for(int i=n;i>0;i--){ 1 операція. Всього n-1 проходів циклу   y=sqrt(2+y); 3 операції на кожний прохід циклу  } 3 операції на кожний прохід циклу  return y;   }   3.3. Обчислення функції трудомісткості нерекурсивного алгоритму. g+(n)=0 , g*(n)=1 => fА(D) = fn(n) =1 + 1 + (n-1)*(3+3)= 6n-4=O(n); 4. Рекурсивне обчислення. 4.1. Опис алгоритму розв’язання задачі (навести вигляд рекурсивної функції обчислення y) float funkcia(int ch,float D){ float F; D=sqrt(2+D); if (ch==1){ F=D;} else { F=funkcia(ch-1,D);} return F; } 4.3. Обчислення функції трудомісткості рекурсивного алгоритму. Для аналізу трудомісткості виклику/повернення введемо значення: m -- кількість переданих фактичних параметрів, k -- кількість повернених по адресному посиланню значень, r -- кількість збережених в стеці регістрів. Тоді трудомісткість в елементарних операціях на один виклик і повернення буде виглядати так:  Аналіз трудомісткості рекурсивних алгоритмів і в деякій частині трудомісткість самого рекурсивного виклику можливо виконати різними способами в залежності від того як формується кінцева сума елементарних операцій: - окремо по ланцюгам рекурсивних викликів і повернень; - загалом по вершинам дерева рекурсивних викликів. Продемонструємо цей підхід на прикладі рекурсивного обчислення факторіала. Для розгляданого вище рекурсивного алгоритму обчислення факторіала кількість вершин рекурсивного дерева, дорівнює, очевидно, n, при цьому передається і повертається по одному значенню (m=2,k=1) ,а на останньому рекурсивному виклику значення функції обраховується безпосередньо - в кінці у припущенні про збереження чотирьох регістрів отримаємо: f(n)=n*2*(2+1+4+1) + 1*2 = 16n - 2 зауважимо що n - параметр алгоритму, а не кількість слів на вході. Результат виконання програми Висновок: На даній лабораторній роботі я визначила складність рекурсивного алгоритму, а саме знаходження факторіалу. Складність такого алгоритму для 3 викликів = , для 4 викликів = . З цих даних виходить, що даний алгоритм відноситься до складності типу N( клас кількісно-залежних по складності алгоритмів. Це алгоритми, функція складності, яких залежить від кількості вхідних даних) Додатки (тексти програм з коментарями). #INCLUDE<STDIO.H> #include<conio.h> #include<iostream> using namespace std; int main(){ int n; float y; cout<<"Vvedit kilkist povtoriv n:"; cin >> n; y=0; for(int i=n;i>0;i--){ y=sqrt(2+y); } cout<<"Pru N="<<n<<" Y="<<y; getch(); return 0; } #INCLUDE<STDIO.H> #include<conio.h> #include<iostream> using namespace std; float funkcia(int ch,float D){ float F; D=sqrt(2+D); if (ch==1){ F=D;} else { F=funkcia(ch-1,D);} return F; } int main(){ int n; float y; float f=0; cout<<"Vvedit kilkist povtoriv n:"; cin >> n; y=funkcia(n,f); cout<<"Pru N="<<n<<" Y="<<y; getch(); return 0; }
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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