русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Алгоритм Дейкстры


Дата добавления: 2013-12-23; просмотров: 3017; Нарушение авторских прав


(нахождение кратчайшего пути от одного узла до всех остальных)

Шаг 0. Каждому узлу (i = 1,2,..., п-1) присвоить временную метку . (если нет дуги, соединяющей и полагаем )

Шаг 1. Среди всех временных меток выбрать . Заменить на . Если нет временных меток, остановиться.

Шаг 2. Пусть — узел, только что получивший постоянную метку на шаге 1. Изменить временные метки соседей узла в соответствии со следующим правилом: . Перейти к шагу 1.

Пример 2.1. Рассмотрим сеть, показанную на рис. 2, где числа являются длинами дуг.

Будем изображать временные метки внутри каждого узла, а когда метка превращается в постоянную, будем помечать число звездочкой. Когда дуга применяется в некотором кратчайшем пути, будем изображать ее жирной линией.

Шаг 0. Все узлы получают временные метки, равные , а узел – постоянную метку 0. Это показано на рис. 3.

Шаг 1. Среди всех временных меток минимальное значение 2 имеет метка узла , поэтому получает постоянную метку.

 

Рис. 2

Рис. 3.

 

Шаг 2. Узел имеет соседей и .

.

.

Результат показан на рис. 4.

 

Рис. 4.

Шаг 1. Среди всех временных меток наименьшую метку 3 имеет узел . Поэтому получает постоянную метку.

Шаг 2. Соседями узла являются , . (Узел тоже соседний, но он стал постоянным и поэтому исключается.)

.

Шаг 1. Узел V1 получает постоянную метку 4.

Шаг 2. . Это показано на рис. 5.

Шаг 1. V4 получает постоянную метку 5.

Рис. 5.

 

Шаг 2. .

Шаг 1. V6получает постоянную метку 11.

Шаг 2.

Шаг 1. V5получает постоянную метку 13.

Шаг 2.

Шаг 1. V7получает постоянную метку 14.

Окончательный результат показан на рис. 6.

Мы вычислили кратчайшие расстояния от V0 до всех остальных узлов сети, но не нашли кратчайших путей, на которых достигаются эти расстояния.

Способ проследить промежуточные узлы:



Если узлу Vj приписана постоянная метка, то можно просмотреть все соседние узлы и найти среди них тот, метка которого отличается от метки узла Vj в точности на длину соединяющей их дуги. Таким образом, мы можем для каждого узла проследить в обратном направлении путь из начала в этот узел. На рис. 7 каждому узлу приписаны два числа. Первое число — постоянная метка, указывающая истинное кратчайшее расстояние от начала до этого узла, второе число указывает последнюю промежуточную вершину кратчайшего пути.

 

Рис. 6.

 

Рис. 7.

 

Сложность алгоритма. Так как алгоритм состоит из сравнений и сложений, подсчитаем количество сравнений и сложений.

Имеется n - 2 сравнений при первом проходе, п - 3 сравнений при втором проходе и т. д., так что всего имеется (n - 2) + (n - 3) + . . . + 1 = (n - 1)(n - 2)/2 сравнений на шаге 1. Аналогично, имеется (n - 1)(n - 2)/2 сложений и столько же сравнений на шаге 2. Поэтому, трудоемкость алгоритма есть О(n2). Так как в сети с n узлами имеется О(n2) дуг и каждая дуга должна быть рассмотрена хотя бы один раз, то не будет рискованным сказать, что не существует алгоритма, требующего в общем случае O(n log n) шагов.

 

 



<== предыдущая лекция | следующая лекция ==>
Правило для упрощения поиска. | Лекция 3. Кратчайшие пути между всеми парами узлов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.