- •1.Побудова і аналіз алгоритмів
- •1.1.Формалізація алгоритмів.
- •1.2.Покрокове проектування алгоритмів.
- •1.3.Характеристики алгоритму
- •1.4.Складність алгоритму
- •1.5.Ефективність алгоритмів
- •1.6.Правила аналізу складності алгоритмів.
- •2.Алгоритми сортування
- •2.1.Задача сортування
- •2.2.Сортування вибіркою
- •2.2.1.Сортування простою вибіркою
- •2.2.2.Обмінне сортування простою вибіркою
- •2.2.3.Бульбашкове сортування
- •2.2.4.Сортування Шелла
- •2.3.Сортування включенням
- •2.3.1.Сортування простим включенням
- •2.3.2.Бульбашкове сортування включенням
- •2.3.3.Турнірне сортування
- •2.3.4.Сортування впорядкованим бінарним деревом
- •2.3.5.Сортування частково впорядкованим деревом
- •2.4.Сортування розподілом
- •2.4.1.Порозрядне цифрове сортування
- •2.4.2.Швидке сортування Хоара
- •2.5.Сортування злиттям
- •2.5.1.Сортування попарним злиттям
- •2.6.Рандомізація
- •3.Алгоритми пошуку
- •3.1.Послідовний (лінійний) пошук
- •3.2.Бінарний пошук
- •3.3.Метод інтерполяції
- •3.4.Метод „золотого перерізу”
- •3.5.Алгоритми пошуку послідовностей
- •3.5.1.Прямий алгоритм пошуку
- •3.5.2.Алгоритм Кнута, Моріса, Пратта
- •3.5.3.Алгоритм Боуєра та Мура
- •4.Методи швидкого доступу до даних
- •4.1.Хешування даних
- •4.1.1.Методи розв’язання колізій
- •4.1.2.Переповнення таблиці і повторне хешування
- •4.1.3.Оцінка якості хеш-функції
- •4.2.Організація даних для прискорення пошуку за вторинними ключами
- •4.2.1.Інвертовані індекси
- •4.2.2.Бітові карти
- •5.Мережеві алгоритми
- •5.1.Представлення мереж
- •5.2.Операції з вузлами і зв’язками
- •5.2.1.Обхід мережі
- •5.2.2.Найменші стовбурні дерева
- •5.3.Найкоротший маршрут
- •5.3.1.Інші задачі пошуку найкоротшого маршруту
- •5.3.1.1.Двох-точковий найкоротший маршрут
- •5.3.1.2.Обчислення найкоротшого маршруту для всіх пар
- •5.3.1.3.Штрафи за повороти
- •5.3.2.Застосування методу пошуку найкоротшого маршруту
- •5.3.2.1.Розбиття на райони
- •5.3.2.2.Складання плану робіт
- •5.3.2.3.Планування колективної роботи
- •5.4.Максимальний потік
- •5.4.1.Застосування максимальних потоків
- •5.4.1.1.Непересічні шляхи
- •5.4.1.2.Розподіл робіт
- •6.Методи розробки алгоритмів
- •6.1.Метод частинних цілей
- •6.2.Динамічне програмування
- •6.3.Метод сходження
- •6.4.Дерева розв’язків
- •6.4.1.Мінімаксний пошук
- •6.4.2.Покращення пошуку в дереві гри
- •6.4.3.Метод відпрацювання назад
- •6.5.Програмування з поверненнями назад
- •6.5.1.Метод спроб та помилок
- •6.5.2.Реалізація пошуку з поверненням
- •6.5.3.Альфа-бета відсікання
- •6.5.4.Метод гілок і границь
- •6.6.Евристичні алгоритми
- •6.7.Імовірнісні алгоритми
- •6.8.Генетичні алгоритми
- •6.8.1.Розв’язок діофантового рівняння.
- •6.8.2.Програмна реалізація
5.4.1.Застосування максимальних потоків
Обчислення максимального потоку використовуються в багатьох програмах. Хоча для багатьох мереж може бути важливо знати максимальний потік, цей метод часто використовується для отримання результатів, які на перший погляд мають віддалене відношення до пропускної спроможності мережі.
5.4.1.1.Непересічні шляхи
Великі мережі зв’язку повинні бути надмірними. Для заданої мережі може бути потрібно знайти число непересічних шляхів з джерела до стоку. При цьому, якщо між двома вузлами мережі є множина непересічних шляхів, усі зв’язки в яких різні, то з’єднання між цими вузлами залишиться, навіть якщо декілька зв’язків в мережі буде розірвано.
Можна визначити кількість різних шляхів, використовуючи метод обчислення максимального потоку. Для цього створюють мережу з вузлами і зв’язками, які відповідають вузлам і зв’язкам в комунікаційній мережі. Присвоюють кожному зв’язку одиничну пропускну спроможність.
Потім обчислюють максимальний потік в мережі. Максимальний потік буде рівний кількості різних шляхів від джерела до стоку. Оскільки кожний зв’язок може нести одиничний потік, то жоден з шляхів, використаних при обчисленні максимального потоку, не може мати загальних зв’язків.
При більш строгому визначенні надмірності можна зажадати, щоб різні шляхи не мали ні спільних зв’язків, ні спільних вузлів. Трохи змінивши попередню мережу, можна використовувати обчислення максимального потоку для вирішення і цієї задачі. Для цього розділяють кожний вузол за винятком джерела і стоку на два вузли, які сполучені зв’язком одиничної пропускної спроможності. З’єднують перший з отриманих вузлів зі всіма зв’язками, що входять в початковий вузол. Усі зв’язки, що виходять з початкового вузла, приєднують до другого отриманому після розбиття вузла. Потім шукають максимальний потік для цієї мережі.
Якщо шлях, використаний для обчислення максимального потоку, проходить через вузол, то він може використовувати зв’язок, який сполучає два вузли, що утворились після розбиття. Оскільки цей зв’язок має одиничну пропускну спроможність, ніякі два шляхи, отримані при обчисленні максимального потоку, не можуть пройти через цей зв’язок між вузлами, тому в початковій мережі ніякі два шляхи не можуть використовувати один і той же вузол.
5.4.1.2.Розподіл робіт
Нехай є група співробітників, кожний з яких володіє певними навиками. Нехай, також, існує ряд завдань, які вимагають залучення співробітника, який володіє заданим набором навиків. Задача розподілу робіт полягає в тому, щоб розподілити роботу між співробітниками так, щоб кожне завдання виконував співробітник, який має відповідні навики.
Щоб звести цю задачу до обчислення максимального потоку, створюють мережу з двома стовпцями вузлів. Кожний вузол в лівому стовпці представляє одного співробітника. Кожний вузол в правому стовпці представляє одне завдання.
Потім порівнюють навики кожного співробітника з навиками, необхідними для виконання кожного із завдань. Створюють зв’язок між кожним співробітником і кожним завданням, яке він здатний виконати, і присвоюють усім зв’язкам одиничну пропускну спроможність.
Створюють вузол–джерело і з’єднують його з кожним із співробітників зв’язком одиничної пропускної спроможності. Потім створюють вузол–стік і з’єднують з ним кожне завдання, знову за допомогою зв’язків з одиничною пропускною спроможністю.
Тепер потрібно знайти максимальний потік з джерела в стік. Кожна одиниця потоку повинна пройти через один вузол співробітника і один вузол завдання. Цей потік представляє розподіл роботи для цього співробітника.
Якщо співробітники мають відповідні навики для виконання всіх завдань, то обчислення максимального потоку розподілять їх усіх. Якщо неможливо виконати всі завдання, то в процесі обчислення максимального потоку робота буде розподілена так, щоб було виконано максимально можлива кількість завдань.