ASD_Lecture01
.pdfТеорія алгоритмів
Приклад псевдокоду
Вхідні дані
•відсортована послідовність n (n >0) чисел (база даних)
•одне число (запит)
Вихідні дані
• індекс знайденого числа або NIL
a1, a2, a3,….,an; q |
|
j |
||||
2 |
5 |
4 |
10 |
11; |
5 |
2 |
|
||||||
2 |
5 |
4 |
10 |
11; |
9 |
NIL |
Лекція 1
Теорія алгоритмів
Приклад псевдокоду
Вхідні дані: A[1..n] – масив цілих чисел, q – ціле число. Вхідні дані: A[1..n] – масив цілих чисел, q – ціле число.
Вихідні дані: індекс j такий, що A[j] = q. NIL, якщо j (1 j n): A[j] q Вихідні дані: індекс j такий, що A[j] = q. NIL, якщо j (1 j n): A[j] q
j 1 j 1
поки j n і A[j] q поки j n і A[j] q
виконуй j++ виконуй j++
якщо j n тоді повернути j якщо j n тоді повернути j інакше повернути NIL інакше повернути NIL
Алгоритм використовує техніку brute-force (грубої сили) – послідовно сканує вхідні дані.
Код написано на недвозначному псевдокоді і ВХІДНІ і ВИХІДНІ дані алгоритму чітко визначені
Лекція 1
Теорія алгоритмів
Аналіз алгоритмів
Час обчислення як функція від розміру
вхідних даних
for j 2 to n |
вартість |
час |
|
c1 |
n |
||
do key A[j] |
c2 |
n-1 |
|
Вставити A[j] у відсортовану |
0 |
n-1 |
|
послідовність A[1..j-1] |
c3 |
n-n1 |
|
i j-1 |
|||
while i>0 and A[i]>key |
c4 |
nj 2tj |
|
|
c |
5 |
nj 2(tj 1) |
do A[i+1] A[i] |
|
j 2(tj 1) |
|
i-- |
c6 |
||
A[i+1]:=key |
c7 |
n-1 |
Лекція 1
Теорія алгоритмів
Кращий/гірший/середній випадок
Кращий випадок: елемени вже відсортовані tj=1, час виконання = f(n),
тобто, лінійний.
Гірший випадок : елементи відсортовані у зворотньому порядку
tj=j, час виконання = f(n2), тобто,
квадратичний
Середній випадок : tj=j/2, час виконання = f(n2), тобто, квадратичний.
Лекція 1
Теорія алгоритмів
Кращий/гірший/середній випадок
Для визначеного розміру вхідних даних n, провести дослідження часу виконання для різних наборів вхідних даних:
6n
5n
4n
3n
2
n 1n
Лекція 1
Теорія алгоритмів
Наступне заняття
•Коректність алгоритмів
•Асимптотична нотація великого О, відома також як нотація Ландау
Лекція 1
Теорія алгоритмів
Машина Поста
Склад машини Поста
Дії каретки підпорядковані програмі, яка складається з пронумерованого набору команд (команди можна представляти як рядки програми). Команди бувають шести типів:
1.записати 1 (мітку), перейти до i-го рядка програми;
2.записати 0 (стерти мітку), перейти до i-го рядка програми;
3.переміститися вліво, перейти до i-го рядка програми;
4.переміститися вправо, перейти до i-го рядка програми;
5.зупинка;
6.якщо 0, то перейти до i-го рядка програми, інакше перейти до j-го рядка програми.
Лекція 1
Теорія алгоритмів
Графічне представлення команд машини Поста
→ |
Крок вправо |
← |
Крок вліво |
V |
Записати мітку |
X |
Стерти мітку |
? a: b |
Переглянути комірку: якщо в комірці |
|
знаходиться 0, тоді перейти на команду з |
|
номером а, інакше на командуз номером b. |
! |
Зупинка |
Лекція 1
Теорія алгоритмів
Машина Поста
Не дивлячись на примітивність машини Поста, будь-
який існуючий алгоритм може бути записаний у
вигляді програми для машини Поста. У теорії
алгоритмів існує так звана «теза Поста»: «Будь-який
алгоритм можна представити у вигляді машини
Поста». Ця теза одночасно є і формальним
визначенням алгоритму. Алгоритм (за Постом) - програма для машини Поста, що приводить до вирішення поставленої задачі.
Лекція 1
Теорія алгоритмів
Машина Тюрінга
Алан Тьюрінґ висловив припущення, що будь-який алгоритм в інтуїтивному значенні цього слова може бути представлений еквівалентною машиною Тюрінґа. Це припущення відоме як теза Чорча–Тюрінґа. Кожний комп’ютер може моделювати машину Тюрінґа (операції перезапису комірок, порівняння і переходу до іншої сусідньої комірки з урахуванням зміни стану машини).
Отже, він може моделювати алгоритми в будь-якому формалізмі, і всі комп’ютери (незалежно від потужності, архітектури тощо) еквівалентні з погляду принципової можливості рішення алгоритмічних задач.
Лекція 1