
- •Основні положення теорії алгоритмів та її застосування
- •Введення до теорії алгоритмів
- •Загальні риси алгоритмів
- •Машина Поста
- •Машина т’юринга
- •Основи лямбда-числення та функціонального програмування
- •Теза Черча-т’юринга про алгоритмічну розв’язність задачі
- •Проблема розв’язності (зависання)
- •Алгоритмічно нерозв’язні задачі
- •Проблема відсутності загального методу вирішення задачі
- •Проблема інформаційної невизначеності задачі
- •Проблема логічної нерозв’язності задачі
- •Побудова машини т’юринга для обчислення деяких простих функцій
- •Введення до оцінки складності алгоритмів
- •Визначення порядку складності алгоритму
- •Оптимізація алгоритмів
- •Структури даних в алгоритмічній мові програмування
- •Визначення алгоритмічної мови програмування
- •Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
- •Поняття типу даних
- •Прості типи: числові; символьні; логічні.
- •Тип даних рядок
- •Структуровані типи даних: масиви, записи, множини
- •Типи даних за значенням і за посиланням
- •Сумісність типів та перетворення між типами даних
- •Екземпляри даних: змінні, константи
- •Видимість даних
- •Управління ходом виконання та структурування програм в алгоритмічній мові програмування
- •Вирази, операнди та операції
- •Основні операції: арифметичні; логічні; бульові; з використанням рядків
- •Поняття оператора
- •Прості оператори: присвоювання; виклику функції
- •Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
- •Структурування програм: функції та класи
- •Параметри функцій: вхідні, результуючі.
- •Рекурсивні функції
- •Файли: текстові, бінарні
- •Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
- •Чисельні методи
- •Особливості вирішення задач чисельними методами, точність та коректність рішень
- •Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
- •Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
- •Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
- •Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції
- •Вирішення системи лінійних рівнянь методом Гауса
- •Пошук екстремуму функцій одної змінної: метод золотого перетину; метод парабол.
- •Пошук екстремуму функцій багатьох змінних: метод координатного спуску; метод найскорішого спуску.
- •Алгоритми обробки масивів
- •Визначення масивів
- •Операції над масивами
- •Упорядкування масивів: сортування вибором; сортування вставкою; бульбашкове сортування; сортування методом Шелла; метод швидкого сортування.
- •Вибір методів сортування
- •Пошук в упорядкованих масивах методом половинного поділу, інтерполяційним методом
- •Застосування індексів для пошуку у невпорядкованих даних
- •Алгоритми обробки даних на основі списків та дерев
- •Визначення списку
- •Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки
- •Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку
- •Упорядкування та пошук в списках
- •Похідні структури даних: черга, стек, дек
- •Визначення дерева
- •Впорядковані дерева
- •Бінарні дерева
- •Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева
- •Балансування дерева
- •Алгоритми обробки текстових даних на основі регулярних виразів
- •Введення до теорії кінцевих автоматів
- •Графічне представлення кінцевих автоматів
- •Використання кінцевого автомату: синтаксичний аналіз.
- •Реалізація синтаксичного аналізу файлу з розділяючими комами
- •Детерміновані та недетерміновані кінцеві автомати
- •Регулярні вирази
- •Форма Бекуса-Наура для запису регулярних виразів
- •Синтаксичний аналіз регулярних виразів
- •Компіляція регулярних виразів
- •Інструменти для спрощення роботи з регулярними виразами
- •Зіставлення рядків з регулярними виразами.
- •Алгоритми систем числення
- •Введення до систем числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Системи числення з нетрадиційними основами
- •Перетворення між різними системами числення
- •Арифметика чисел з плаваючою комою
- •Точність операцій з плаваючою комою
- •Арифметика великих чисел
- •Алгоритми криптографії та хешування
- •Значення випадкових чисел у програмуванні
- •Алгоритми генерації рівномірно розподілених псевдовипадкових чисел
- •Перевірка якості випадкових чисел
- •Кодування з виправленням помилок
- •Стиснення даних
- •Стиснення даних зі словником
- •Алгоритм стиснення даних Лемпела-Зіва
- •Введення до криптографії
- •Елементи теорії порівнянь
- •Шифрування за допомогою випадкових чисел
- •Створення таємного ключа по Діффі-Хеллману
- •Система rsa
- •Алгоритми цифрового підпису
- •Введення до хешування
- •Функції хешування
- •Проста функція хешування рядків
- •Функції хешування з використанням рандомізації
- •Вирішення конфліктів за допомогою лінійного зондування
- •Псевдовипадкове зондування
- •Подвійне хешування
Державний вищий навчальний заклад
«Українська академія банківської справи Національного банку України»
Кафедра економічної кібернетики
ЗАТВЕРДЖУЮ
завідувач кафедри
канд. техн. наук, доцент
__________________ С.М. Новак
2009.08.30
КОНСПЕКТ ЛЕКЦІЙ
з дисципліни " Економічна кібернетика. Алгоритмізація"
освітньо-професійної програми підготовки за напрямом 6.030502 – "Економічна кібернетика" для денної форми навчання
Укладач, канд. екон. наук. _________________ В.В. Колдовський
2009.08.30
Розглянуто та схвалено на засіданні кафедри, протокол від 2009.08.30 № 1
Суми - 2009
ПЕРЕДМОВА
Конспект лекції розроблений відповідно до вимог робочої навчальної програми з дисципліни "Алгоритмізація" варіативної освітньо-професійної програми підготовки за спеціальністю 6.050102 – "Економічна кібернетика", схваленої на засіданні кафедри, економічної кібернетики протокол від 2009.08.30 № 19.
Конспект лекцій містить зміст лекційного курсу, завдання до самостійного вивчення теоретичного матеріалу курсу що вивчається в позааудиторний час, список рекомендованої літератури і ресурсів Інтернет, ілюстративний матеріал до лекцій.
ЗМІСТ
Лекція 1. Основні положення теорії алгоритмів та її застосування 6
Лекція 2. Структури даних в алгоритмічній мові програмування 28
Лекція 3. Управління ходом виконання та структурування програм в алгоритмічній мові програмування 44
Лекція 4. Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим 62
Лекція 5. Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції 70
Лекція 6. Алгоритми обробки масивів 79
Лекція 7. Алгоритми обробки даних на основі списків та дерев 97
Лекція 8. Алгоритми обробки текстових даних на основі регулярних виразів 131
Лекція 9. Алгоритми систем числення 142
Лекція 10. Алгоритми криптографії та хешування 156
ВСТУП
Дисципліна «Економічна кібернетика. Алгоритмізація» є складовою варіативної компоненти освітньо-професійної програми підготовки (ОПП) за напямом 6.030502 – «Економічна кібернетика» напрямку 0305 – «Економіка і підприємництво».
Основна мета вивчення дисципліни: формування системи теоретичних знань і практичних навичок з розробки комп’ютерних програм з використанням сучасних мов і технологій програмування.
Завдання дисципліни: вивчення теоретичних і практичних підходів до постановки і аналізу задач з програмування, розробки алгоритмів і комп’ютерних програм, набуття вмінь застосовувати знання і навички в діяльності, пов'язаній з інформатизацією економіки.
Предметом дисципліни: задачі, які потребують свого вирішення шляхом створення комп’ютерних програм.
Зміст дисципліни розкривається у наступних темах:
Введення до теорії алгоритмів та програмування
Фундаментальні структури даних: прості типи даних, масиви, записи, множини та зберігання даних у файлах
Динамічний розподіл пам’яті
Лінійні списки
Древовидні структури даних
Основи теорії алгоритмів: машина Т’юринга та алгоритмічно нерозв’язні задачі
Рекурсивні алгоритми
Арифметика, системи числення та перетворення між ними
Алгоритми сортування
Алгоритми пошуку та виборки
Випадкові числа, кодування та основи алгоритмів криптографії
Алгоритми хешування та побудови хеш-таблиць
Кінцеві автомати та регулярні вирази
Паралельні алгоритми
Методи аналізу ефективності та оптимізації алгоритмів
Основні положення теорії алгоритмів та її застосування
Перелік питань:
Введення до теорії алгоритмів.
Загальні риси алгоритмів.
Машина Поста
Машина Т’юринга.
Основи лямбда-числення та функціонального програмування.
Теза Черча-Т’юринга про алгоритмічну розв’язність задачі.
Проблема розв’язності (зависання).
Алгоритмічно нерозв’язні задачі.
Проблема відсутності загального методу вирішення задачі.
Проблема інформаційної невизначеності задачі.
Проблема логічної нерозв’язності задачі.
Побудова машини Т’юринга для обчислення деяких простих функцій.
Введення до оцінки складності алгоритмів.
Визначення порядку складності алгоритму.
О-нотація для оцінки складності алгоритмів.
Фіксований час О(1).
Лінійний час О(N).
Квадратичний час О(N2).
Логарифмічний час О(log N) та О(N log N).
Час факторіалу О(N!).
Оптимізація алгоритмів.
Самостійна робота:
СР.01 – Приклади алгоритмічно нерозв’язних задач та поширені задачі класу складності NP
Приклади алгоритмічно нерозв’язних задач [2, С. 311-314]
Поширені задачі класу складності NP [2, с. 239-249]
Введення до теорії алгоритмів
Теорія алгоритмів – окремий розділ математики який вивчає загальні властивості алгоритмів, виник в 30-х роках XX ст.
Задача теорії алгоритмів – створення формальних моделей алгоритмів, надання алгоритмам точного математичного визначення і дослідження їх властивостей.
Вперше сучасне поняття алгоритму з’явилося в працях Е.Бореля (1912) та Г. Вейля (1921).
З алгоритмами ви уже знайомі ще зі школи, навіть якщо їх так не називали: алгоритм складання натуральних чисел у стовпчик (множення, ділення), алгоритм Евкліда, алгоритм вирішення квадратного рівняння…
Найпростіше визначення: алгоритм – набір чітко визначених кроків для вирішення певної задачі.
Походження слова «алгоритм» - від імені арабського вченого аль-Хорезмі, який приблизно у 825 році дав опис винайденій в Індії позиційній десятковій системі числення. У перекладі книжка містила ім’я вченого, від якого пішло слово «алгоритм», а від оригінальної назви пішло слово «алгебра».
Зв’язок математики і теорії алгоритмів.
Теорія алгоритмів виникла як розділ математичної логіки, поняття алгоритму тісно пов'язане з поняттям числення. Перші та найчисельніші застосування теорія алгоритмів має саме в математичній логіці. Теорія алгоритмів є теоретичним фундаментом програмування, вона має застосування всюди, де зустрічаються алгоритмічні проблеми (основи математики, теорія інформації, теорія керування, конструктивний аналіз, обчислювальна математика, теорія ймовірності, лінгвістика, економіка та ін.).
Основні поняття теорії алгоритмів.
Областю застосовності алгоритму називається сукупність тих об’єктів, до яких його можна застосувати, тобто в застосуванні до яких він дає результат. Про алгоритм A кажуть, що він:
1) «обчислює функцію f», коли його область застосування збігається з областю визначення f, і A перетворює будь-який х зі своєї області застосування в f(х);
2) «розв’язує множину M відносно множини X», коли він застосовується до будь-якого х з X, і перетворює будь-який х з X∩M (з перетину множин) на слово «так», а будь-який х з Х\M (різниці множин) — на слово «ні»;
3) «перераховує множину B», коли його область застосування є натуральний ряд, а сукупність результатів є B.
Функція називається обчислюваною, якщо існує алгоритм, що її обчислює.
Множина називається розв’язною відносно X, якщо існує алгоритм, що розв’язує її відносно X.
Множина називається перераховуваною, якщо або вона порожня, або існує перераховуючий її алгоритм.
Детальний аналіз поняття «алгоритм» виявляє, що (I) область можливих вихідних даних і область застосовності будь-якого алгоритму є перераховуваними множинами. Своєю чергою, (II) для будь-якої пари вкладених одна в другу перераховуваних множин можна підібрати алгоритм, у якого більша множина слугує областю можливих вихідних даних, а менша – областю застосовності.