
- •Основні положення теорії алгоритмів та її застосування
- •Введення до теорії алгоритмів
- •Загальні риси алгоритмів
- •Машина Поста
- •Машина т’юринга
- •Основи лямбда-числення та функціонального програмування
- •Теза Черча-т’юринга про алгоритмічну розв’язність задачі
- •Проблема розв’язності (зависання)
- •Алгоритмічно нерозв’язні задачі
- •Проблема відсутності загального методу вирішення задачі
- •Проблема інформаційної невизначеності задачі
- •Проблема логічної нерозв’язності задачі
- •Побудова машини т’юринга для обчислення деяких простих функцій
- •Введення до оцінки складності алгоритмів
- •Визначення порядку складності алгоритму
- •Оптимізація алгоритмів
- •Структури даних в алгоритмічній мові програмування
- •Визначення алгоритмічної мови програмування
- •Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
- •Поняття типу даних
- •Прості типи: числові; символьні; логічні.
- •Тип даних рядок
- •Структуровані типи даних: масиви, записи, множини
- •Типи даних за значенням і за посиланням
- •Сумісність типів та перетворення між типами даних
- •Екземпляри даних: змінні, константи
- •Видимість даних
- •Управління ходом виконання та структурування програм в алгоритмічній мові програмування
- •Вирази, операнди та операції
- •Основні операції: арифметичні; логічні; бульові; з використанням рядків
- •Поняття оператора
- •Прості оператори: присвоювання; виклику функції
- •Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
- •Структурування програм: функції та класи
- •Параметри функцій: вхідні, результуючі.
- •Рекурсивні функції
- •Файли: текстові, бінарні
- •Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
- •Чисельні методи
- •Особливості вирішення задач чисельними методами, точність та коректність рішень
- •Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
- •Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
- •Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
- •Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції
- •Вирішення системи лінійних рівнянь методом Гауса
- •Пошук екстремуму функцій одної змінної: метод золотого перетину; метод парабол.
- •Пошук екстремуму функцій багатьох змінних: метод координатного спуску; метод найскорішого спуску.
- •Алгоритми обробки масивів
- •Визначення масивів
- •Операції над масивами
- •Упорядкування масивів: сортування вибором; сортування вставкою; бульбашкове сортування; сортування методом Шелла; метод швидкого сортування.
- •Вибір методів сортування
- •Пошук в упорядкованих масивах методом половинного поділу, інтерполяційним методом
- •Застосування індексів для пошуку у невпорядкованих даних
- •Алгоритми обробки даних на основі списків та дерев
- •Визначення списку
- •Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки
- •Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку
- •Упорядкування та пошук в списках
- •Похідні структури даних: черга, стек, дек
- •Визначення дерева
- •Впорядковані дерева
- •Бінарні дерева
- •Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева
- •Балансування дерева
- •Алгоритми обробки текстових даних на основі регулярних виразів
- •Введення до теорії кінцевих автоматів
- •Графічне представлення кінцевих автоматів
- •Використання кінцевого автомату: синтаксичний аналіз.
- •Реалізація синтаксичного аналізу файлу з розділяючими комами
- •Детерміновані та недетерміновані кінцеві автомати
- •Регулярні вирази
- •Форма Бекуса-Наура для запису регулярних виразів
- •Синтаксичний аналіз регулярних виразів
- •Компіляція регулярних виразів
- •Інструменти для спрощення роботи з регулярними виразами
- •Зіставлення рядків з регулярними виразами.
- •Алгоритми систем числення
- •Введення до систем числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Системи числення з нетрадиційними основами
- •Перетворення між різними системами числення
- •Арифметика чисел з плаваючою комою
- •Точність операцій з плаваючою комою
- •Арифметика великих чисел
- •Алгоритми криптографії та хешування
- •Значення випадкових чисел у програмуванні
- •Алгоритми генерації рівномірно розподілених псевдовипадкових чисел
- •Перевірка якості випадкових чисел
- •Кодування з виправленням помилок
- •Стиснення даних
- •Стиснення даних зі словником
- •Алгоритм стиснення даних Лемпела-Зіва
- •Введення до криптографії
- •Елементи теорії порівнянь
- •Шифрування за допомогою випадкових чисел
- •Створення таємного ключа по Діффі-Хеллману
- •Система rsa
- •Алгоритми цифрового підпису
- •Введення до хешування
- •Функції хешування
- •Проста функція хешування рядків
- •Функції хешування з використанням рандомізації
- •Вирішення конфліктів за допомогою лінійного зондування
- •Псевдовипадкове зондування
- •Подвійне хешування
Арифметика чисел з плаваючою комою
У ЄОМ для запису дійсних чисел, які можуть приймати великий діапазон значень, використовується формат представлення з плаваючою комою:
Рисунок 6.1 – Формат представлення чисел з плаваючою комою
Число складається з мантиси, старший розряд якої визначає знак числа, і порядку, для якого також є розряд, що визначає його знак.
Дійсне значення числа у системі числення q даному разі представляється наступним чином: Nq = mqp
Для запису числа з плаваючою комою використовуються так званий “нормалізований запис” – після першого значущого розряду ставиться кома, далі йдуть наступні значущі цифри мантиси, потім записується порядок (основа за ступенем), наприклад:
1,2345 * 1023
У комп’ютерній практиці для позначення порядку прийнято використовувати літеру “e” чи “E”:
1,2345E+23
Точність представлення чисел з плаваючою комою визначається кількістю значущих цифр мантиси, а діапазон можливих значень – кількістю цифр порядку.
В залежності від обсягу пам’яті, яка відводиться під зберігання числа, як точність, так і діапазон значень можуть варіюватися:
Single (32 біти) – приймає значення від -3,402823e38 до +3,402823e38 (кількість значущих цифр – 7, у внутрішніх обчисленнях кількість може досягати 9)
Double (64 біти) – приймає значення від -1,79769313486232e308 до +1,79769313486232e308 (кількість значущих цифр мантиси – 15, хоча у внутрішніх обчисленнях їх кількість може досягати 17)
Зазначені типи даних можуть також приймати значення PositiveInfinity та NegativeInfinity, а також NaN – не є числом.
Специфіка обчислень для чисел з плаваючою комою полягає у тому, що при проведенні обчислень необхідно враховувати обмеження форматів представлення чисел, зокрема:
У результаті виконання обчислень з використанням чисел з плаваючою комою допускається певна погрішність.
Якщо результатом обчислень має бути ціле число, то його необхідно округлювати для подальшого використання
Виконувати перевірку на предмет рівності чисел необхідно лише з урахуванням деякої погрішності
Порядок використання чисел з плаваючою комою у розрахунках може впливати на результат
Точність з фіксованою кількістю розрядів мантиси породжує нерівномірність розподілу значень, які можна розрізнити (різниця між числами може бути від 10E-15 до 10E+293
Числа з плаваючою комою не підходять для розрахунків, які мають повертати точний результат (наприклад, фінансових)
Точність операцій з плаваючою комою
Машинний епсілон – це найменше додатнє число ε таке, що виконується наступна умова: 1 ε ≠ 1
Якщо для чисел a і b виконується наступна умова: 1 < a/b < 1 + ε, то ці числа для комп’ютерної програми не будуть розрізнятися (тобто буде виконуватися рівність a =b)
Якщо числа a і b будуть розрізнятися більше, ніж на кількість порядків, рівну значущій кількості цифр у мантисі, то виконання арифметичних операцій додавання і віднімання, у яких ці числа будуть використовуватися одночасно, може призвести до нехтування значенням меншого числа, оскільки в результаті операції вирівнювання порядків всі розряди меншого числа отримають нульове значення