Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ASD_Lecture02

.pdf
Скачиваний:
21
Добавлен:
12.02.2016
Размер:
1.02 Mб
Скачать

Теорія алгоритмів

Аналіз алгоритму 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]