УДК 004.021
Барыбин Д.А.
сотрудник
ФГКВОУВО «Академия Федеральной службы охраны Российской Федерации»
Орёл, Россия Кофман Е.Ю. к.ф-м.н, сотрудник
ФГКВОУВО «Академия Федеральной службы охраны Российской Федерации»
Орёл, Россия Шульгин М.С. сотрудник
ФГКВОУВО «Академия Федеральной службы охраны Российской Федерации»
Орёл, Россия
СРАВНЕНИЕ АЛГОРИТМОВ ДЕЙКСТРЫ И БЕЛЛМАНА-ФОРДА ПРИ РЕШЕНИИ ЗАДАЧИ О ПОИСКЕ КРАТЧАЙШЕГО ПУТИ В ПРОТОКОЛАХ МАРШРУТИЗАЦИИ
Аннотация
Рассмотрены основные этапы проектирования топологии сети и возможные проблемы, возникающие при ее построении. Произведен сравнительный анализ трудоемкости алгоритмов Дейкстры и Беллмана-Форда, реализуемых при решении задачи о нахождении кратчайшего пути в протоколах маршрутизации. Разработаны программные коды на языке С++ для конкретной топологии сети.
Ключевые слова
Алгоритм Дейкстры, алгоритм Беллмана-Форда, топология сети, кратчайший путь.
В области сетевых технологий задача поиска кратчайшего пути наиболее остро стоит при построении топологии сети с использованием протоколов маршрутизации. От правильно спланированной и построенной топологии сети зависит работоспособность и состояние системы. В настоящее время чаще всего используются протоколы, в основе работы которых лежит алгоритм Дейкстры или Беллмана-Форда.
При проектирования топологии сети, как правило, выделяют 4 основных этапа:
1. Определение свободных ресурсов.
2. Выбор и реализация протоколов маршрутизации.
3. Проверка выполнения необходимых условий.
4. Утверждение маршрута.
Наиболее трудоемкими являются реализация протоколов маршрутизации и проверка выполнения всех необходимых условий.
При построении сети существует множество различных наборов соглашений, которые можно выбрать для решения задачи о поиске кратчайшего пути. Однако в случаях с территориально большой сетью необходимо применять несколько протоколов для быстрой и корректной работы маршрутизаторов, при этом количество возможных протоколов сужается. В большинстве случаев выбор падает на ISIS, OSPF или RIP, в которых реализуются алгоритмы Дейкстры и Беллмана-Форда соответсвенно.
На этапе проверки выполнения всех необходимых условий нужно спроектировать и выбрать все протоколы таким образом, чтобы сеть работала как можно быстрее при наименьшей затрате используемых ресурсов. Причем, нередко, может быть поставлена задача, при которой заранее оговорены точки, через которые необходимо пройти, прежде чем добраться до пункта назначения. Невыполнение этих условий может привести к сбоям в системе, понижению качества предоставляемой услуги или неработоспособности сети в целом.
Рассмотрим алгоритмы Дейкстры и Беллмана-Форда нахождения кратчайшего пути и их воздействие на центральный процессор во время работы. Расчет кратчайшего маршрута реализуем посредством ЭВМ.
международный научный журнал «символ науки»
issn 2410-700x
№ 6 /2021
Сеть связи обычно рассматривается как графовые модели, где коммутаторами или маршрутизаторами являются узлы, а множествои линий связи являются дугами. Пример подобного графа из 15 узлов представлен на рисунке 1.
Алгоритм Дейкстры был разработатн голландским ученым в 1959 году. Основная цель алгоритма -нахождение кратчайшего расстояния от одной вершины графа до всех остальных. В настоящее время данный метод является достаточно востребованным, однако он реализуем только с ребрами имеющими положительный вес. Вычислительная сложность алгоритма рассчитывается по формуле: 0(п2 + т). Алгоритм Дейкстры существует в нескольких вариантах. В одном из них он пошагово просматривает все возможные пути от начальной вершины к конечной, пока не будет найден наименьший. В других случаях принцип работы заключается в том, что фиксируется один узел как исходный и ищутся кратчайшие пути от него до всех остальных вершин графа. Данный алгоритм используется при создании сетевых протоколов маршрутизации. Одним из таких протоколов является IS-IS. Алгоритм Дейкстры также лежит в основе протокола OSPF.
Другой вариант решения задачи о поиске кратчайшего пути был предложен двумя американскими математиками Ричардом Беллманом и Лестором Фордом. Разработанный алгоритм был предназначен для поиска пути во взвешенных графах, ребра которых могут иметь отрицательный вес. Также в результате поиска кратчайшего пути оказывается возможным попасть в одну и туже вершину графа несколько раз. Формула для расчета вычислительной сложности имеет вид: 0(n*m). Этот алгоритм используется в некоторых протоколах дистанционно-векторной маршрутизации, например в RIP (Routing Information Protocol - Протокол маршрутной информации).
Программный код, реализующий алгоритм Беллмана-Форда на языке С++ и демонстрирующий переход по вершинам графа, представленного на рисунке 1, представлен ниже.
//Алгоритм Беллмана-Форда #endif // QVERTEX_HH #include "QEdge.h" #include "QVertex.h"
void QVertex::hoverEnterEvent(QGraphicsSceneHoverEvent *event){ highlightAllNeighbours(255,0,0,255); QGraphicsItem : : hoverEnterEvent(event) ;
}
void QVertex::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {
Рисунок 1 - Топология сети
highlightAllNeighbours(255,0,0,255); QGraphicsItem:: hoverMoveEvent(event);
}
void QVertex::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
lightsoffAllNeighbours(); QGraphicsItem:: hoverLeaveEvent(event);
}
void QVertex::highlight(int r, int g, int b, int alpha)
{
QColor color(r,g,b,alpha); QPen pen(color); pen.setStyle(Qt::SolidLine); QGraphicsEllipseItem::setPen(pen); label->setDefaultTextColor(color);
}
void QVertex::highlightAllNeighbours(int r, int g, int b, int alpha)
{
QColor color(r,g,b,alpha); QPen pen(color); pen.setStyle(Qt:: SolidLine); QGraphicsEllipseltem: :setPen(pen); label->setDefaultTextColor(color); setZValue( 10); for(int a=0; a < graph->intE(); a++){ if (lineE) {
if(lineE[a] ->WP() == id || lineE[a]->WK() == id){ if((*linkM == true) || (*linkLEdge == true) || (*linkLAdjac == true))
lineE [a] ->highlight(r,g,b,alpha); else
lineE[a]->highlightDejks(r,g,b,alpha);
}}
}}
void QVertex::lightsoff() {
highlight(0,0,0,255); }
void QVertex::lightsoffDejks() {
highlight( 180,180,180,255); }
void QVertex::lightsoffAllNeighbours() {
highlightAllNeighbours(0,0,0,255); for(int a=0; a < graph->intE(); a++){ if (lineE) {
if(lineE[a] ->WP() == id || lineE[a]->WK() == id)
lineE [a] ->lightsoff(); } }
}
void QVertex::lightsoffAllNeighboursDejks() { highlight(0,255,0,255); for(int a=0; a < graph->intE(); a++){ if (lineE) {
if(lineE[a] ->WP() == id || lineE[a]->WK() == id) lineE[a]->lightsoffDejkstra(); }
} }
int QVertex::minV(QVertex **tab, int size) {
int min = -1; int id = -1;
for(int i=0; i < size; i++){ if(!tab[i]->isClicked()){ if(min == -1){ min = tab[i]->Way(); id = i;
}
else if(tab[i]->Way() < min){
min = tab[i]->Way(); id = i; } }
}
return id;
}
QEdge * QVertex::incidentEdge(int Vx) {
for(int i=0; i < graph->intE(); i++){ if (lineE) { if(lineE[i]->WP() == id){ if(lineE[i] ->WK() == Vx)
return lineE[i]; } else if(lineE[i]->WK() == id){ if(lineE[i]->WP() == Vx)
return lineE[i]; } } }
return NULL;
}
Рассмотрим конкретную задачу поиска кратчайшего маршрута, например из точки 7 в точку 5 для сети, представленной в виде графа из 15 узлов (рисунок 1). Проанализируем затраченное время и ресурсы (нагрузки на ЦП) при реализации обоих алгоритмов.
При запуске алгоритма Дейкстры ЦП нагрузился на 17%, о чем информирует график нагрузки на ЦП. Время, затраченное на нахождение кратчайшего пути от точки 7 до точки 5 равно 30 секунд. На рисунке 2 показано, как при запуске программы возрастает нагрузка на центральный процессор.
Рисунок 2 - Нагрузка на ЦП при использовании алгоритма Дейкстры
При решении тойже задачи с использованием алгоритма Беллмана-Форда видим, что резкий скачок нагруженности ЦП состваил всего 10%, при этом затрачено всего 12 секунд (рисунок 3).
Рисунок 3. Нагрузка на ЦП при использовании алгоритма Беллмана-Форда
Анализируя решение задачи о поиске кратчайшего пути на графе из 15 узлов, можно отметить, что алгоритм Беллмана-Форда эффективнее и дает результирующий ответ быстрее, затрачивая при этом наименьшие ресурсы. Однако, для развивающихся сетей, с динамическим изменением маршрутов и числом переходов большим 15 (без отрицательных весов) рекомендуется использовать более сложные протоколы ISIS или OSPF, работающие на алгоритме Дейкстры. В случае малых сетей с количеством переходов не более 15, где возможна отрицательная метрика, допускается использование протокола RIP, который реализует алгоритм Беллмана-Форда.
Список использованной литературы:
1. Берж К. Теория алгоритмов и её применение / К. Бержю - Москва: Мир, 1980.
2. Зыков А.А. Теория конечных графов / А.А. Зыков - Новосибирск: Наука, 1969.
3. Изотова Т.Ю. Обзор алгоритмов поиска кратчайшего пути в графе / Т.Ю. Изотова // Новые информационные технологии в автоматизированных системах: материалы девятнадцатого научно-практического семинара. - М.: ИПМ им. М.В. Келдыша, 2016. С. 341-344.
4. Кормен Т.Х. Алгоритмы: построение и анализ / Т.Х. Кормен, Ч.И. Лейзерсон, Р.Л. Ривест, К. Штайн -Москва: Вильямс, 2006.
© Барыбин Д.А., Кофман Е.Ю., Шульгин М.С., 2021
УДК 351.862.2, 630.841.21
А.В. Сафонов
старший научный сотрудник ФГБУ ВНИИ ГОЧС (ФЦ)
С.Г. Жесткова
научный сотрудник ФГБУ ВНИИ ГОЧС (ФЦ)
АНАЛИЗ ЭФФЕКТИВНОСТИ ПРОВОДИМЫХ МЕРОПРИЯТИЙ ПО ЗАЩИТЕ НАСЕЛЕНИЯ И ТЕРРИТОРИИ ОТ ОПАСНЫХ ПРИРОДНЫХ ЯВЛЕНИЙ В РЕСПУБЛИКЕ ЯКУТИЯ В 2020 ГОДУ
Аннотация
Проведен анализ эффективности мероприятий по защите населения и территории от опасных природных явлений в Республике Якутия в 2020 году с выработкой предложений по снижению ущерба.
Ключевые слова:
опасные природных явлений, подтопление, пункты длительного пребывания.
Опасные природные явления неизбежно будут оказывать влияние на повседневную жизнь населения и экономические показатели Республики Якутия.
В целях организации выполнения на территории республики комплекса подготовительных мероприятий для предупреждения крупномасштабных ЧС в период пропуска весеннего половодья и летне-