
- •Основні положення теорії алгоритмів та її застосування
- •Введення до теорії алгоритмів
- •Загальні риси алгоритмів
- •Машина Поста
- •Машина т’юринга
- •Основи лямбда-числення та функціонального програмування
- •Теза Черча-т’юринга про алгоритмічну розв’язність задачі
- •Проблема розв’язності (зависання)
- •Алгоритмічно нерозв’язні задачі
- •Проблема відсутності загального методу вирішення задачі
- •Проблема інформаційної невизначеності задачі
- •Проблема логічної нерозв’язності задачі
- •Побудова машини т’юринга для обчислення деяких простих функцій
- •Введення до оцінки складності алгоритмів
- •Визначення порядку складності алгоритму
- •Оптимізація алгоритмів
- •Структури даних в алгоритмічній мові програмування
- •Визначення алгоритмічної мови програмування
- •Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
- •Поняття типу даних
- •Прості типи: числові; символьні; логічні.
- •Тип даних рядок
- •Структуровані типи даних: масиви, записи, множини
- •Типи даних за значенням і за посиланням
- •Сумісність типів та перетворення між типами даних
- •Екземпляри даних: змінні, константи
- •Видимість даних
- •Управління ходом виконання та структурування програм в алгоритмічній мові програмування
- •Вирази, операнди та операції
- •Основні операції: арифметичні; логічні; бульові; з використанням рядків
- •Поняття оператора
- •Прості оператори: присвоювання; виклику функції
- •Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
- •Структурування програм: функції та класи
- •Параметри функцій: вхідні, результуючі.
- •Рекурсивні функції
- •Файли: текстові, бінарні
- •Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
- •Чисельні методи
- •Особливості вирішення задач чисельними методами, точність та коректність рішень
- •Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
- •Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
- •Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
- •Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції
- •Вирішення системи лінійних рівнянь методом Гауса
- •Пошук екстремуму функцій одної змінної: метод золотого перетину; метод парабол.
- •Пошук екстремуму функцій багатьох змінних: метод координатного спуску; метод найскорішого спуску.
- •Алгоритми обробки масивів
- •Визначення масивів
- •Операції над масивами
- •Упорядкування масивів: сортування вибором; сортування вставкою; бульбашкове сортування; сортування методом Шелла; метод швидкого сортування.
- •Вибір методів сортування
- •Пошук в упорядкованих масивах методом половинного поділу, інтерполяційним методом
- •Застосування індексів для пошуку у невпорядкованих даних
- •Алгоритми обробки даних на основі списків та дерев
- •Визначення списку
- •Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки
- •Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку
- •Упорядкування та пошук в списках
- •Похідні структури даних: черга, стек, дек
- •Визначення дерева
- •Впорядковані дерева
- •Бінарні дерева
- •Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева
- •Балансування дерева
- •Алгоритми обробки текстових даних на основі регулярних виразів
- •Введення до теорії кінцевих автоматів
- •Графічне представлення кінцевих автоматів
- •Використання кінцевого автомату: синтаксичний аналіз.
- •Реалізація синтаксичного аналізу файлу з розділяючими комами
- •Детерміновані та недетерміновані кінцеві автомати
- •Регулярні вирази
- •Форма Бекуса-Наура для запису регулярних виразів
- •Синтаксичний аналіз регулярних виразів
- •Компіляція регулярних виразів
- •Інструменти для спрощення роботи з регулярними виразами
- •Зіставлення рядків з регулярними виразами.
- •Алгоритми систем числення
- •Введення до систем числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Системи числення з нетрадиційними основами
- •Перетворення між різними системами числення
- •Арифметика чисел з плаваючою комою
- •Точність операцій з плаваючою комою
- •Арифметика великих чисел
- •Алгоритми криптографії та хешування
- •Значення випадкових чисел у програмуванні
- •Алгоритми генерації рівномірно розподілених псевдовипадкових чисел
- •Перевірка якості випадкових чисел
- •Кодування з виправленням помилок
- •Стиснення даних
- •Стиснення даних зі словником
- •Алгоритм стиснення даних Лемпела-Зіва
- •Введення до криптографії
- •Елементи теорії порівнянь
- •Шифрування за допомогою випадкових чисел
- •Створення таємного ключа по Діффі-Хеллману
- •Система rsa
- •Алгоритми цифрового підпису
- •Введення до хешування
- •Функції хешування
- •Проста функція хешування рядків
- •Функції хешування з використанням рандомізації
- •Вирішення конфліктів за допомогою лінійного зондування
- •Псевдовипадкове зондування
- •Подвійне хешування
Видимість даних
Область видимості – це межі, в рамках яких конкретний екземпляр чи тип даних, або метод є доступними.
Всередині одного методу видимість даних починається з моменту їх декларації і до кінця блоку. Дані є доступними всередині блоку, в якому були задекларовані, а також у всіх вкладених блоках.
Управління ходом виконання та структурування програм в алгоритмічній мові програмування
Перелік питань
Вирази, операнди та операції.
Основні операції: арифметичні; логічні; бульові; з використанням рядків.
Поняття оператора.
Прості оператори: присвоювання; виклику функції.
Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу.
Структурування програм: функції та класи.
Параметри функцій: вхідні, результуючі.
Рекурсивні функції.
Файли: текстові, бінарні.
Вирази, операнди та операції
Вираз – це конструкція на мові програмування, результатом якої є певне значення.
Вираз складається із операндів, об’єднаних операціями. Кожен операнд, в свою чергу, може бути виразом. Результат (значення) виразу залежить від розміщення знаків операцій у круглих дужках у виразі, а також від пріоритету виконання операцій.
Операнд – це константа, літерал, ідентифікатор, виклик методу, індексний вираз, вираз вибору елементу чи більш складних вираз, сформований комбінацією операндів, знаків операцій та круглих дужок, які визначають порядок виконання. Будь-який операнд, який має константне (незмінне) значення називається константним значенням. Кожен операнд має тип. Якщо у якості операнда використовується константа, то йому відповідає значення і тип цієї константи. У іншому разі значення визначається як результат певних обчислень чи зчитання значення змінної, а тип залежить від типу обчислень чи змінних.
Операції визначають дії, які виконуються над операндами. Операції визначаються операторами. В залежності від кількості операндів, які приймають в них участь, поділяються на унарні, бінарні та тернарні.
Основні операції: арифметичні; логічні; бульові; з використанням рядків
Арифметичні операції належать до бінарних, оскільки вимагають двох операндів і позначаються знаками “+”, “-”, “*”, “/” і “%” (залишок від ділення).
Арифметичні операції вимагають числових типів даних – цілих чи дійсних чисел.
Логічні або бульові операції повертають результат “істина” (true) або “хибність” (false) і поділяються на дві категорії: ті, які виконуються над логічними значеннями операндів, і ті, які виконують логічну операцію над бітами операндів.
Перелік логічних операцій:
І (AND) - логічне множення: &,
АБО (OR) - логічне додавання: |
виключальне АБО (XOR) - множення з переносом: ^
еквівалентність (рівність): ==
нееквівалентність (нерівність) : !=
інверсія (заперечення): ~, !
порівняння (відношення): >, <, <=, >=
умовне І (коротке І): &&
умовне ЧИ (коротке ЧИ): ||
Операція конкатенації виконується над типом даних “рядок” і передбачає поєднання рядків.
Поняття оператора
Оператор – це закінчений вираз, який полягає у здійсненні обчислення, виклику методу, присвоювання значення, перевірки умови і т.д.
Оператори розділяються знаком “;”.
Приклад операторів:
j++;
y = x + b;
SomeClass.SomeFunc(par1, par2);
Складений оператор або блок являє собою декілька операторів, що поєднані фігурними дужками:
{
x1 = y1 + y2;
x2 = z1 + z2;
}