
- •Основні положення теорії алгоритмів та її застосування
- •Введення до теорії алгоритмів
- •Загальні риси алгоритмів
- •Машина Поста
- •Машина т’юринга
- •Основи лямбда-числення та функціонального програмування
- •Теза Черча-т’юринга про алгоритмічну розв’язність задачі
- •Проблема розв’язності (зависання)
- •Алгоритмічно нерозв’язні задачі
- •Проблема відсутності загального методу вирішення задачі
- •Проблема інформаційної невизначеності задачі
- •Проблема логічної нерозв’язності задачі
- •Побудова машини т’юринга для обчислення деяких простих функцій
- •Введення до оцінки складності алгоритмів
- •Визначення порядку складності алгоритму
- •Оптимізація алгоритмів
- •Структури даних в алгоритмічній мові програмування
- •Визначення алгоритмічної мови програмування
- •Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
- •Поняття типу даних
- •Прості типи: числові; символьні; логічні.
- •Тип даних рядок
- •Структуровані типи даних: масиви, записи, множини
- •Типи даних за значенням і за посиланням
- •Сумісність типів та перетворення між типами даних
- •Екземпляри даних: змінні, константи
- •Видимість даних
- •Управління ходом виконання та структурування програм в алгоритмічній мові програмування
- •Вирази, операнди та операції
- •Основні операції: арифметичні; логічні; бульові; з використанням рядків
- •Поняття оператора
- •Прості оператори: присвоювання; виклику функції
- •Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
- •Структурування програм: функції та класи
- •Параметри функцій: вхідні, результуючі.
- •Рекурсивні функції
- •Файли: текстові, бінарні
- •Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
- •Чисельні методи
- •Особливості вирішення задач чисельними методами, точність та коректність рішень
- •Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
- •Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
- •Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
- •Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції
- •Вирішення системи лінійних рівнянь методом Гауса
- •Пошук екстремуму функцій одної змінної: метод золотого перетину; метод парабол.
- •Пошук екстремуму функцій багатьох змінних: метод координатного спуску; метод найскорішого спуску.
- •Алгоритми обробки масивів
- •Визначення масивів
- •Операції над масивами
- •Упорядкування масивів: сортування вибором; сортування вставкою; бульбашкове сортування; сортування методом Шелла; метод швидкого сортування.
- •Вибір методів сортування
- •Пошук в упорядкованих масивах методом половинного поділу, інтерполяційним методом
- •Застосування індексів для пошуку у невпорядкованих даних
- •Алгоритми обробки даних на основі списків та дерев
- •Визначення списку
- •Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки
- •Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку
- •Упорядкування та пошук в списках
- •Похідні структури даних: черга, стек, дек
- •Визначення дерева
- •Впорядковані дерева
- •Бінарні дерева
- •Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева
- •Балансування дерева
- •Алгоритми обробки текстових даних на основі регулярних виразів
- •Введення до теорії кінцевих автоматів
- •Графічне представлення кінцевих автоматів
- •Використання кінцевого автомату: синтаксичний аналіз.
- •Реалізація синтаксичного аналізу файлу з розділяючими комами
- •Детерміновані та недетерміновані кінцеві автомати
- •Регулярні вирази
- •Форма Бекуса-Наура для запису регулярних виразів
- •Синтаксичний аналіз регулярних виразів
- •Компіляція регулярних виразів
- •Інструменти для спрощення роботи з регулярними виразами
- •Зіставлення рядків з регулярними виразами.
- •Алгоритми систем числення
- •Введення до систем числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Системи числення з нетрадиційними основами
- •Перетворення між різними системами числення
- •Арифметика чисел з плаваючою комою
- •Точність операцій з плаваючою комою
- •Арифметика великих чисел
- •Алгоритми криптографії та хешування
- •Значення випадкових чисел у програмуванні
- •Алгоритми генерації рівномірно розподілених псевдовипадкових чисел
- •Перевірка якості випадкових чисел
- •Кодування з виправленням помилок
- •Стиснення даних
- •Стиснення даних зі словником
- •Алгоритм стиснення даних Лемпела-Зіва
- •Введення до криптографії
- •Елементи теорії порівнянь
- •Шифрування за допомогою випадкових чисел
- •Створення таємного ключа по Діффі-Хеллману
- •Система rsa
- •Алгоритми цифрового підпису
- •Введення до хешування
- •Функції хешування
- •Проста функція хешування рядків
- •Функції хешування з використанням рандомізації
- •Вирішення конфліктів за допомогою лінійного зондування
- •Псевдовипадкове зондування
- •Подвійне хешування
Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
Основні складові мови програмування (незалежно від парадигми):
Алфавіт — символи, дозволені для запису команд і даних. Як правило, це літери латинського алфавіту, арабські цифри, розділові знаки, спеціальні символи.
Команди — перелік і правила запису дій, які передбачені мовою програмування.
Дані — вхідна інформація і результати обробки. Дані, які в процесі обробки змінюють своє значення, називаються змінними. Постійні дані називаються константами.
Ідентифікатори — символьне позначення (ім’я, адреса) даних, функцій, програм тощо.
Коментарі — пояснення до команд і програм.
Синтаксис — правила запису команд, опису і позначення даних, використання розділових знаків, коментарів тощо.
Семантика — опис дій для виконання написаних без синтаксичних помилок команд і визначення даних.
Основні складові алгоритмічної мови
Ідентифікатори (імена) – послідовність символів для позначення об’єктів програми (змінних, масивів, функцій)
Операції: арифметичні; логічні; відношення; конкатенації.
Ключові слова – слова мови програмування, які мають чітко визначене значення і не можуть бути використані у якості ідентифікаторів змінних.
Дані – величини, які обробляються програмою. Типи даних – розмежування даних мови програмування за певними групами (типами). У мовах програмування зі строгою типізацією (Pascal, C-подібні мови) тип даних задається явно, існують жорсткі обмеження на неявне перетворення між типами даних. У мовах програмування з нестрогою типізацією (BASIC) тип даних можна не задавати, визначається автоматично, перетворення між типами більш гнучке. Екземпляри даних – це конкретні змінні і константи певного типу, які зберігають значення:
Константи – це дані, які зафіксовані під час виконання програми і не можуть бути змінені.
Змінні – це дані, які можуть змінювати своє значення під час виконання програми.
Складні типи даних можуть поєднувати декілька складових: масиви, записи, об’єкти.
Вирази – складові мові, які призначені для виконання потрібних обчислень, складаються із змінних, вказівників функцій, об’єднаних знаками операцій. Вирази бувають: арифметичними, логічними, рядковими.
Оператор – це елемент мови, який задає повний опис певної дії. Є закінченою фразою мови програмування. В склад операторів входять ключові слова, дані, вирази і т.п.
Структурні складові
Програма – послідовність інструкцій мови програмування, призначена для вирішення певної задачі, може складатися з одного чи декількох файлів (модулів).
Підпрограма – послідовність інструкцій для вирішення певної задачі, яка має певний ідентифікатор, однократно визначена у тексті програми і може викликатися багаторазово.
Функція – особливий різновид підпрограм, який може бути вбудований у вирази, отримувати аргументи і повертати значення.
Стандартна функція (підпрограма) – підпрограма, яка вбудована у мову програмування (стандартні бібліотеки функцій).
Класи і об’єкти
Клас – особлива структурна одиниця об’єктно-орієнтованих мов (ОО) програмування, яка поєднує дані і код, що призначений для їх обробки. За своїм характером близька до типу даних, тому у мовах програмування, які є повністю об’єктно-орієнтованими (Smalltalk), всі типи даних є класами.
Об’єкт – це екземпляр класу, тобто конкретна змінна, що зберігає дані, структура яких визначена декларацією класу.