Частина тексту файла (без зображень, графіків і формул):
ЛАБОРАТОРНА РОБОТА №1
Тема: Часова ефективність алгоритмів. Рекурентні рівняння
Мета роботи: Визначення часу виконання для заданих фрагментів програм та для заданих рекурентних співвідношень.
Завдання 1 (b)
Фрагмент коду програми:
Виконання:
Цей фрагмент коду складається з циклу while, який виконується n разів, тобто його час виконання залежить від значення n.
Час виконання цього фрагменту коду можна визначити за допомогою формули:
T(n) = 7n + 5
Блок-схема:
Завдання 2 b)
Рекурентне рівняння:
?(?)= 1, ?=0;
?(?)= 2?(?−1)+1, ?≥1.
Щоб визначити складність алгоритму, можна скористатися методом підстановки.
Рекурсивно розв'язуючи рівняння, отримаємо:
T(n) = 2T(n-1) + 1
T(n) = 2[2T(n-2) + 1] + 1
T(n) = 2^2T(n-2) + 2 + 1
T(n) = 2^2[2T(n-3) + 1] + 2 + 1
T(n) = 2^3T(n-3) + 2^2 + 2 + 1
Після k кроків отримаємо:
T(n) = 2^kT(n-k) + (2^{k-1} + 2^{k-2} + \dots + 2^1 + 1)
Якщо T(0) = 1, то n-k = 0 і T(n-k) = 1.
Отже, при n кроках (коли n - k = 0), отримуємо:
T(n) = 2^nT(0) + 1 + 2 + 2^2 + … + 2^{k-1} = 2^n * 1 + 2^k – 1 = 2^n + 2^n -1 = 2^{n+1} – 1.
Відповідь: T(n) = 2^{n+1} – 1.
Висновок: на цій лабораторній роботі я визначила час виконання фрагменту програми та розв’язала рекурентне рівняння. Закріпила отримані теоретичні знання та практичні навички при виконанні даної лабораторної роботи.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!