
- •Основні положення теорії алгоритмів та її застосування
- •Введення до теорії алгоритмів
- •Загальні риси алгоритмів
- •Машина Поста
- •Машина т’юринга
- •Основи лямбда-числення та функціонального програмування
- •Теза Черча-т’юринга про алгоритмічну розв’язність задачі
- •Проблема розв’язності (зависання)
- •Алгоритмічно нерозв’язні задачі
- •Проблема відсутності загального методу вирішення задачі
- •Проблема інформаційної невизначеності задачі
- •Проблема логічної нерозв’язності задачі
- •Побудова машини т’юринга для обчислення деяких простих функцій
- •Введення до оцінки складності алгоритмів
- •Визначення порядку складності алгоритму
- •Оптимізація алгоритмів
- •Структури даних в алгоритмічній мові програмування
- •Визначення алгоритмічної мови програмування
- •Базові елементи сучасної мови програмування: типи даних; екземпляри даних; вирази; оператори; функції; класи.
- •Поняття типу даних
- •Прості типи: числові; символьні; логічні.
- •Тип даних рядок
- •Структуровані типи даних: масиви, записи, множини
- •Типи даних за значенням і за посиланням
- •Сумісність типів та перетворення між типами даних
- •Екземпляри даних: змінні, константи
- •Видимість даних
- •Управління ходом виконання та структурування програм в алгоритмічній мові програмування
- •Вирази, операнди та операції
- •Основні операції: арифметичні; логічні; бульові; з використанням рядків
- •Поняття оператора
- •Прості оператори: присвоювання; виклику функції
- •Оператори управління ходом виконання: розгалуження; вибору; цикли; переходу
- •Структурування програм: функції та класи
- •Параметри функцій: вхідні, результуючі.
- •Рекурсивні функції
- •Файли: текстові, бінарні
- •Алгоритми чисельних методів, апроксимації функцій, інтегрування та вирішення рівнянь з одним невідомим
- •Чисельні методи
- •Особливості вирішення задач чисельними методами, точність та коректність рішень
- •Апроксимації функцій: лінійна інтерполяція; інтерполяційний многочлен Ньютона.
- •Чисельне інтегрування: метод трапецій; метод Сімпсона; метод Сімпсона з оцінкою погрішності.
- •Вирішення рівнянь з одним невідомим: метод простих ітерацій; метод Ньютона; метод парабол.
- •Алгоритми вирішення системи лінійних рівнянь, пошуку екстремуму функції
- •Вирішення системи лінійних рівнянь методом Гауса
- •Пошук екстремуму функцій одної змінної: метод золотого перетину; метод парабол.
- •Пошук екстремуму функцій багатьох змінних: метод координатного спуску; метод найскорішого спуску.
- •Алгоритми обробки масивів
- •Визначення масивів
- •Операції над масивами
- •Упорядкування масивів: сортування вибором; сортування вставкою; бульбашкове сортування; сортування методом Шелла; метод швидкого сортування.
- •Вибір методів сортування
- •Пошук в упорядкованих масивах методом половинного поділу, інтерполяційним методом
- •Застосування індексів для пошуку у невпорядкованих даних
- •Алгоритми обробки даних на основі списків та дерев
- •Визначення списку
- •Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки
- •Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку
- •Упорядкування та пошук в списках
- •Похідні структури даних: черга, стек, дек
- •Визначення дерева
- •Впорядковані дерева
- •Бінарні дерева
- •Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева
- •Балансування дерева
- •Алгоритми обробки текстових даних на основі регулярних виразів
- •Введення до теорії кінцевих автоматів
- •Графічне представлення кінцевих автоматів
- •Використання кінцевого автомату: синтаксичний аналіз.
- •Реалізація синтаксичного аналізу файлу з розділяючими комами
- •Детерміновані та недетерміновані кінцеві автомати
- •Регулярні вирази
- •Форма Бекуса-Наура для запису регулярних виразів
- •Синтаксичний аналіз регулярних виразів
- •Компіляція регулярних виразів
- •Інструменти для спрощення роботи з регулярними виразами
- •Зіставлення рядків з регулярними виразами.
- •Алгоритми систем числення
- •Введення до систем числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Системи числення з нетрадиційними основами
- •Перетворення між різними системами числення
- •Арифметика чисел з плаваючою комою
- •Точність операцій з плаваючою комою
- •Арифметика великих чисел
- •Алгоритми криптографії та хешування
- •Значення випадкових чисел у програмуванні
- •Алгоритми генерації рівномірно розподілених псевдовипадкових чисел
- •Перевірка якості випадкових чисел
- •Кодування з виправленням помилок
- •Стиснення даних
- •Стиснення даних зі словником
- •Алгоритм стиснення даних Лемпела-Зіва
- •Введення до криптографії
- •Елементи теорії порівнянь
- •Шифрування за допомогою випадкових чисел
- •Створення таємного ключа по Діффі-Хеллману
- •Система rsa
- •Алгоритми цифрового підпису
- •Введення до хешування
- •Функції хешування
- •Проста функція хешування рядків
- •Функції хешування з використанням рандомізації
- •Вирішення конфліктів за допомогою лінійного зондування
- •Псевдовипадкове зондування
- •Подвійне хешування
Функції хешування з використанням рандомізації
Рандомізація – процес, який здійснюється над вихідними даними у процесі їх обробки і передбачає, як правило, використання випадкових чисел для формування непередбачуваного результату.
Найпоширеніше застосування рандомізації у криптографії
Рандомізація у хешуванні використовується для скорочення колізій.
PJW-хешування з використанням рандомізації
Вирішення конфліктів за допомогою лінійного зондування
Лінійне зондування – процес, який дозволяє усувати конфлікти (колізії) за рахунок використання вільних комірок у хеш-таблицях.
Лінійне зондування відноситься до схем з відкритою адресацією.
Алгоритм розміщення елементів у хеш-таблиці з використанням лінійного зондування:
Розрахувати хеш-код елемента і перейти до комірки у таблиці, яка відповідає цьому хеш коду
Якщо комірка вільна, то помістити елемент до неї, у даному разі здійснювати лінійне зондування не потрібно
Якщо комірка зайнята, то необхідно перейти до наступної комірки, доки не буде знайдено вільну комірку. Якщо досягнуто кінець таблиці, то необхідно продовжити пошук вільної комірки з початку до тих пір, доки не буде обійдена вся таблиця. Якщо вільних комірок немає, то припинити роботу і повідомити про помилку. інакше занести елемент до знайденої вільної комірки.
Алгоритм пошуку елементів у хеш-таблиці з використанням лінійного зондування:
Розрахувати хеш-код і перейти до відповідної комірки
Видалення елементів із хеш-таблиці з лінійним зондуванням
Якщо комірка зайнята, однак елемент шуканому не відповідає, то необхідно переходити до наступного елемента, доки не буде знайдено шуканий елемент, чи не виявиться вільна комірка, чи не буде обійдена вся таблиця (елемент не знайдено)
Клас хеш-таблиць з лінійним зондуванням
Приклад здійснення лінійного зондування
Інші схеми відкритої адресації
Існують інші схеми відкритої адресації
Квадратичне зондування
Квадратичне зондування – процес, ідентичний лінійному зондуванню за винятком того, що пошук вільної комірки здійснюється не лінійно, а у зростаючій квадратичній прогресії – 1, 4, 9, 16, 25, 36 і т.д.
Квадратичне зондування дозволяє звільнитися від проблеми “кластерів”, які можуть утворюватися за умови лінійного зондування, однак погано підходить для невеликих хеш-таблиць, оскільки не дозволяє обійти усі доступні комірки
Квадратичне зондування більш прийнятне для великих хеш-таблиць
Псевдовипадкове зондування
Псевдовипадкове зондування – схема хешування з відкритою адресацією, призначена для уникання колізій за рахунок пошуку вільного місця у хеш-таблиці, використовуючи для цього генератор псевдовипадкових чисел, який можна у будь-який момент проініціалізувати початковим значенням і повторити згенеровану раніше послідовність
Недолік – цей метод не гарантує обхід усіх вільних комірок
Подвійне хешування
Подвійне хешування – схема з відкритою адресацією для уникання колізій, яка використовує два незалежні алгоритми хешування: перший використовується у випадку до виникнення колізії, другий – у випадку, коли виникає колізія.
Послідовність зондування з використанням подвійного хешування наступна: спочатку використовуємо перший алгоритм для розрахунку хеш-коду h1, якщо комірка зайнята, то для того ж самого значення ключа використовуємо другий алгоритм і розраховуємо хеш код h2, після чого здійснюємо зондування комірки h1 + h2, якщо комірка зайнята, то зондування здійснюється для комірки h1 + 2h2, далі h1 + 3h2 і т.д.
Вирішення конфліктів за допомогою зв’язування
Зв’язування – використання зв’язних списків для збереження значень у хеш-таблиці з однаковими хеш-кодами
Вирішення конфліктів за допомогою групування.
Групування – процес схожий до зв’язування, однак замість зв’язаних списків елементи з однаковими хеш-кодами поміщаються у спеціальні фіксовані області (корзини)
Розширююче хешування
Хеш-таблиці на диску
Розміщення хеш-таблиці в області пам’яті з повільним доступом має свої особливості.
Зокрема, подібна задача виникає при реалізації БД (приклад: БД товарів у супермаркеті).
При реалізації подібної хеш-таблиці слід використовувати розширююче хешування
Список літератури
№ |
Назва |
Кількість примірників |
УДК |
|
Основна |
|
|
||
|
Вирт Н. «Алгоритмы + Структуры данных = Программы». – М.Мир,1985.-406 с. |
∞ (ел. варіант) |
681.3.07 |
|
|
Макконелл Дж. Основы современных алгоритмов. 2-е изд./ Пер. с англ. – М.: Техносфера, 2004 – 368 с. |
4 |
681.3.07 |
|
|
Ватсон К.С. C# - М.: Лори, 2005 – 862 с. |
4 |
681.3.07 |
|
Додаткова |
|
|
||
|
Агуров П.В. C#. Сборник рецептов – СПб.:БХВ-Петербург, 2008. – 432 с. |
3 |
681.3.07 |
|
|
Кнут Д. Искусство программирования для ЭВМ. Т.2. Получисленные методы. – М.: Издательский дом «Вильямс», 2000. – 832 с. |
3 |
681.142.2 |
|
|
Кнут Д. Искусство программирования. Т.1. Основные алгоритмы. – М.: Издательский дом «Вильямс», 2005. – 720 с. |
3 |
681.142.2 |
|
|
Кнут Д. Искусство программирования. Т.3. Сортировка и поиск. – М.: Издательский дом «Вильямс», 2005. – 824 с. |
3 |
681.142.2 |
|
|
Макконелл С. Совершенный код. Мастер-класс / Пер. с англ. – М.: ИТД «Русская редакция»; СПб; Питер, 2005. – 896 с. |
5 |
681.3.07 |
|
|
Уоррен Г. Алгоритмические трюки для программистов.: Пер. с англ. – М.: Изд. дом «Вильямс», 2003. – 288 с. |
∞ (ел. варіант) |
681.3.07 |
|
|
Павловская Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2007. – 432 с.
|
∞ (ел. варіант) |
681.3.07 |
|
|
Harris S., Ross J. Beginning Algorithms. – Wiley Publishing, 2005. – 591 p. |
∞ (ел. варіант) |
681.3.07 |
|
Методичні посібники викладачів УАБС НБУ |
||||
|
Економічна кібернетика. Алгоритмізація: Збірник завдань до розрахункової роботи. Для студентів ек. кіб. форми навчання: збірник задач. – Суми: УАБС НБУ. |
∞ (ел. варіант) |
681.3.07 |
|
|
Економічна кібернетика. Алгоритмізація: Приклад виконання розрахункової роботи Для студентів економ. спец. денної форми навчання. – Суми: УАБС НБУ. |
∞ (ел. варіант) |
681.3.07 |