
- •Основні положення теорії алгоритмів та її застосування
- •Введення до теорії алгоритмів
- •Загальні риси алгоритмів
- •Машина Поста
- •Машина т’юринга
- •Основи лямбда-числення та функціонального програмування
- •Теза Черча-т’юринга про алгоритмічну розв’язність задачі
- •Проблема розв’язності (зависання)
- •Алгоритмічно нерозв’язні задачі
- •Проблема відсутності загального методу вирішення задачі
- •Проблема інформаційної невизначеності задачі
- •Проблема логічної нерозв’язності задачі
- •Побудова машини т’юринга для обчислення деяких простих функцій
- •Введення до оцінки складності алгоритмів
- •Визначення порядку складності алгоритму
- •Оптимізація алгоритмів
- •Структури даних в алгоритмічній мові програмування
- •Визначення алгоритмічної мови програмування
- •Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
- •Поняття типу даних
- •Прості типи: числові; символьні; логічні.
- •Тип даних рядок
- •Структуровані типи даних: масиви, записи, множини
- •Типи даних за значенням і за посиланням
- •Сумісність типів та перетворення між типами даних
- •Екземпляри даних: змінні, константи
- •Видимість даних
- •Управління ходом виконання та структурування програм в алгоритмічній мові програмування
- •Вирази, операнди та операції
- •Основні операції: арифметичні; логічні; бульові; з використанням рядків
- •Поняття оператора
- •Прості оператори: присвоювання; виклику функції
- •Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
- •Структурування програм: функції та класи
- •Параметри функцій: вхідні, результуючі.
- •Рекурсивні функції
- •Файли: текстові, бінарні
- •Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
- •Чисельні методи
- •Особливості вирішення задач чисельними методами, точність та коректність рішень
- •Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
- •Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
- •Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
- •Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції
- •Вирішення системи лінійних рівнянь методом Гауса
- •Пошук екстремуму функцій одної змінної: метод золотого перетину; метод парабол.
- •Пошук екстремуму функцій багатьох змінних: метод координатного спуску; метод найскорішого спуску.
- •Алгоритми обробки масивів
- •Визначення масивів
- •Операції над масивами
- •Упорядкування масивів: сортування вибором; сортування вставкою; бульбашкове сортування; сортування методом Шелла; метод швидкого сортування.
- •Вибір методів сортування
- •Пошук в упорядкованих масивах методом половинного поділу, інтерполяційним методом
- •Застосування індексів для пошуку у невпорядкованих даних
- •Алгоритми обробки даних на основі списків та дерев
- •Визначення списку
- •Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки
- •Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку
- •Упорядкування та пошук в списках
- •Похідні структури даних: черга, стек, дек
- •Визначення дерева
- •Впорядковані дерева
- •Бінарні дерева
- •Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева
- •Балансування дерева
- •Алгоритми обробки текстових даних на основі регулярних виразів
- •Введення до теорії кінцевих автоматів
- •Графічне представлення кінцевих автоматів
- •Використання кінцевого автомату: синтаксичний аналіз.
- •Реалізація синтаксичного аналізу файлу з розділяючими комами
- •Детерміновані та недетерміновані кінцеві автомати
- •Регулярні вирази
- •Форма Бекуса-Наура для запису регулярних виразів
- •Синтаксичний аналіз регулярних виразів
- •Компіляція регулярних виразів
- •Інструменти для спрощення роботи з регулярними виразами
- •Зіставлення рядків з регулярними виразами.
- •Алгоритми систем числення
- •Введення до систем числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Системи числення з нетрадиційними основами
- •Перетворення між різними системами числення
- •Арифметика чисел з плаваючою комою
- •Точність операцій з плаваючою комою
- •Арифметика великих чисел
- •Алгоритми криптографії та хешування
- •Значення випадкових чисел у програмуванні
- •Алгоритми генерації рівномірно розподілених псевдовипадкових чисел
- •Перевірка якості випадкових чисел
- •Кодування з виправленням помилок
- •Стиснення даних
- •Стиснення даних зі словником
- •Алгоритм стиснення даних Лемпела-Зіва
- •Введення до криптографії
- •Елементи теорії порівнянь
- •Шифрування за допомогою випадкових чисел
- •Створення таємного ключа по Діффі-Хеллману
- •Система rsa
- •Алгоритми цифрового підпису
- •Введення до хешування
- •Функції хешування
- •Проста функція хешування рядків
- •Функції хешування з використанням рандомізації
- •Вирішення конфліктів за допомогою лінійного зондування
- •Псевдовипадкове зондування
- •Подвійне хешування
Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
Перелік питань
Чисельні методи.
Особливості вирішення задач чисельними методами, точність та коректність рішень.
Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
Чисельні методи
Чисельні методи — методи наближеного або точного розв'язування задач, які ґрунтуються на побудові послідовності дій над скінченною множиною чисел.
У програмуванні та алгоритмізації чисельні методи – це математичний інструментарій, за допомогою якого математична задача формулюється у вигляді, зручному для розв’язання на комп’ютері. У такому разі говорять про перетворення математичної задачі в обчислювальну задачу. При цьому послідовність виконання необхідних арифметичних і логічних операцій визначається алгоритмом її розв’язання. Алгоритм повинен бути ітеративним (рекурсивним) і складатися з відносно невеликих блоків, які багаторазово виконуються для різних вхідних даних.
Основні риси чисельних методів:
передбачають проведення великої кількості рутинних арифметичних обчислень за допомогою рекурсивних співвідношень, які використовуються для організації ітерацій (повторюваних циклів обчислень із зміненими початковими умовами для поліпшення результату);
направлені на локальне спрощення задачі (наприклад, лінеаризація нелінійних обчислень);
залежать від близкості початкового наближення
Особливості вирішення задач чисельними методами, точність та коректність рішень
Використання чисельних методів має певні особливості.
Зокрема, у процесі вирішення задачі виникає похибка, викликана наступними причинами:
Неточний математичний опис задачі, зокрема, вихідні дані.
Неточний метод, який використовується для задачі (використання чисельних методів само собою передбачає обмежену кількість розрахунків, а не нескінченну, яка необхідна для отримання точного результату, однак неможлива на сучасних ЕОМ).
При введенні даних і виконанні обчислень за допомогою ЕОМ відбуваються округлення.
Відповідно похибка буває:
p1 - Така, що не можна усунути:
• викликана неточністю числових даних, які входять у математичний опис задачі;
• є наслідком невідповідності математичного опису задачі реальності – похибка математичної моделі.
p2 - Похибка метода
p3 - Похибка обчислення
Повна похибка: p0 = p1 + p2 + p3.
Повна похибка визначає різницю між фактично отриманим і точним рішенням задачі.
Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
Апроксимація функцій – типова прикладна сфера використання чисельних методів, полягає у заміні оригінальної функції наближеною.
Потреба в апроксимації виникає найчастіше у ситуаціях, коли розрахунок оригінальної функції є трудомістким, а апроксимований (наближений) варіант є прийнятним.
Лінійна інтерполяція (метод хорд) – використовується у ситуаціях, коли функція лінійно залежить від параметрів. Полягає у інтерполяції P1(x) = ax + b функції f, що задана в двух точках x0 и x1 відрізку [a, b].
Виходячи
з формули прямої:
Отримаємо
для
Рисунок 4.1 – Приклад кусково-лінійної інтерполяції
Приклад коду для виконання лінійної інтерполяції
static double interpolate(double x0, double y0, double x1, double y1, double x)
{
return y0 * (x - x1) / (x0 - x1) + y1 * (x - x0) / (x1 - x0);
}
Пояснення: у вигляді параметрів задаються значення двох відомих аргументів і результатів функції (відповідно x0, x1 та y0, y1), а також значення аргументу (x), для якого необхідно здійснити інтерполяцію
Інтерполяційний многочлен Ньютона
У ситуації, коли лінійна інтерполяція не дає очікуваних результатів, слід застосувати інші (нелінійні) методи, одним за найпоширеніших серед яких є інтерполяційний многочлен Ньютона.
Якщо
дано k+1 точок даних:
(де значення xj не повторюються)
То
комбінація поліномів Ньютона буде
являтися інтерполяцією функції:
де:
якщо