Урок 13 Інформатика 11 (АП)
Алгоритм Флойда-Уоршелла
Мета.
Навчальна. Ознайомити з способами визначення найкоротшого шляху в графі, алгоритмом Флойда-Уоршелла.
Розвиваюча. Розвивати логічне мислення, самостійність, вміння застосовувати набуті знання до практичних завдань.
Виховна. Виховувати наполегливість, естетичність у оформленні, грамотно висловлювати свої думки.
Тип уроку. Засвоєння нових знань і навичок.
Матеріали для роботи з учнями:
Інформатика: Методи побудови алгоритмів та їх аналіз. Oбчисл. алгоритми: Навч. посіб. для 9-10 кл із поглибл. вивч. інформатики. - К.: Генеза, 2009.
Мультимедійне обладнання.
План
Пам’ятка для учня!
Хід уроку
1. Організаційний момент.
2. Актуалізація опорних знань.
Фронтальне опитування тестування.
3. Мотивація навчальної діяльності.
Логічно запитати: а як визначити найкоротший шлях між двома вершинами такого графа? Саме таку задачу ми зараз і розв’яжемо. У цього алгоритму, який призначений для розв’язання поставленої задачі, є автор - відомий голландський учений, спеціаліст в царині комп’ютерних наук, один із класиків програмування, алгоритміст Едсгер Дейкстра (1930-2002).
4. Вивчення нового матеріалу.
Алгоритм Флойда-Уоршелла
З алгоритму Дейкстри зрозуміло, що можна знайти найкоротшу відстань від заданої вершини графа до решти його вершин. А якщо ця інформація потрібна для будь-якої вершини графа? Найперша відповідь, яка спадає на думку: необхідно виконати алгоритм Дейкстри в циклі для всіх вершин графа. І це вірно. Питання лише в часі виконання такого алгоритму, оскільки його оцінка буде O(n3). Однак існує компактніший за записом алгоритм Флойда-Уоршелла, з яким ми зараз і ознайомимося.
Уявімо собі, що до вершин заданого графа прив’язано гумову мотузку. Спочатку будемо вважати, що відстанню між вершинами і та j є довжина цієї мотузки. Але якщо ми її розтягнемо і зачепимо за вершину k, то тепер відстань між вершинами і та j можна вирахувати як суму довжин між вершинами і, k та k, j.
Якщо ця сумарна відстань через вершину виявиться меншою, то надалі необхідно враховувати саме її. Отже, ми отримали ту саму формулу, що і в алгоритмі Дейкстри: di,j = min(di,j, di,k + dk,j).
А тепер запишемо сам алгоритм:
У результаті виконання алгоритму елементи di,j будуть містити найкоротшу відстань між відповідними вершинами графа і та j.
Реалізація алгоритму Флойда-Уоршелла мовою Равсаі буде такою:
Як бачимо, алгоритм найпростіший як у розумінні, так і в його реалізації. Єдине, що слід обов’язково зазначити, це те, що за даним алгоритмом не можна визначити шлях між вершинами і та j, який дає визначений найкращий результат. Тому, якщо умова задачі вимагає цієї інформації, то слід все-таки застосувати алгоритм Дейкстри для кожної вершини заданого графа.
Завершимо ознайомлення з алгоритмом Флойда-Уоршелла однією практичною порадою. Під час реалізації алгоритму у вигляді програми слід підібрати таке значення елементів d[і,j], що відповідає поняттю «безмежність», тобто відсутність ребра між вершинами і та j.
Нагадаємо оцінку алгоритму Флойда-Уоршелла, яка була дана на початку. Вона становить O(n3) і визначається за кількістю вкладених циклів, що реалізують описаний алгоритм.
Для тестування алгоритму Флойда-Уоршелла можна використати ті самі тести, що й для алгоритму Дейкстри. Це дасть змогу перевірити коректність роботи обох алгоритмів.
5. Завдання для виконання
6. Питання до уроку.
7. Домашнє завдання.
Вивчити конспект.
Виконати завдання 1.