ASD_Lecture02
.pdfТеорія алгоритмів
Аналіз алгоритму Fib1
Відповіді:
1.Звичайно, коректний. Він просто реалізує визначення.
2.Нехай T(n) — час роботи (кількість операцій) алгоритму Fib1 на вході n.
•T(n) = T(n - 1) + T(n - 2) + 3
•Значить, T(n) >=Fn! Час роботи алгоритму є експоненційним, що означає, що він практично невирішуваний на практиці.
Лекція 2
Теорія алгоритмів
Аналіз алгоритму Fib1 (2)
Відповіді:
• Наприклад, для обчислення F200 буде потрібно біля
2138 операцій.
Тоді навіть суперкомп’ютеру, який виконує 40 трильйонів операцій за секунду, знадобиться 292
секунд.
• За законом Мура комп’ютери стають швидкодійнішими
приблизно в 1,6 разів кожного року. Час роботи
алгоритму Fib1 як раз приблизно дорівнює 1,6n. Тобто,
якщо сучасні комп’ютери дозволяють обчислити в цьому
році F100, то у наступному році ми обчислимо F101, через
два роки — F102.
3. На щастя, існує швидший алгоритм
Лекція 2
Теорія алгоритмів
Чому алгоритм Fib1 такий повільний?
Тому що він багато разів обчислює одне і те ж.
Лекція 2
Теорія алгоритмів
Поліноміальний алгоритм
Алгоритм Fib2(n)
•якщо n = 0: повернути 0
•створити масив f [0:n]
•f [0] = 0, f [1] = 1
•для i = 2...n:
f [i] = f [i - 1] + f [i - 2]
•повернути f [n]
Час роботи
Час роботи такого алгоритму є лінійним.
Лекція 2
Теорія алгоритмів
Детальніший аналіз
•В аналізі попередніх алгоритмів ми підраховували кількість елементарних операцій, припускаючи, що кожна така операція займає сталий час.
•Однак чи є додавання чисел елементарної операцією?
•Якщо б всі розглянуті числа були, скажімо, не більше ніж 32-бітними, то можна було б так вважати.
•Але кількість біт у записі Fn приблизно дорівнює
0,694n і, отже, може бути і більше 32.
•Два k-бітних числа можна скласти за лінійний по k час (у стовпчик, наприклад).
•Таким чином, кількість операцій алгоритму Fib1 приблизно дорівнює nFn, а алгоритму Fib2 - n2.
Лекція 2
Теорія алгоритмів
Сортування вставками
Лекція 2
Теорія алгоритмів
Сортування вставками
Алгоритм Insertion-Sort(A)
для j = 2..length[A] key = A[j]
i = j - 1
поки i > 0 і A[i] > key A[i + 1] = A[i]
i = i - 1
A[i + 1] = key
Лекція 2
Теорія алгоритмів
Сортування вставками
Лекція 2
Теорія алгоритмів
Аналіз алгоритму
•Зрозуміло, що чим більший масив, тим більше потрібно часу на його сортування.
•Проте важливий і порядок елементів вхідного масиву.
•Як же вимірювати розмір входу?
•У різних завданнях по-різному: іноді розглядається кількість елементів, іноді загальна кількість бітів у записі вхідних даних, іноді використовується декілька параметрів входу (наприклад, кількість вершин і ребер графа).
• Під розміром входу задач сортування ми будемо розуміти кількість елементів у вхідному масиві.
Лекція 2
Теорія алгоритмів
Аналіз алгоритму (2)
•Якщо масив відсортований, то алгоритм працює лінійний час.
•Якщо ж масив відсортований у зворотному порядку, то час роботи сортування вставками буде максимальним, оскільки кожний елемент A [j] доведеться порівняти з усіма його попередниками A [1],.., A [j - 1].
•Час роботи у такому випадку складе
Лекція 2