Page 20 - 2577
P. 20

Алгоритми  маршрутизації  орієнтовані  на  топологію  мережі,  дають  можливість
            визначити  стратегію  маршрутизації  на  основі  відомостей про  топологію  мережі  і  вартості
            каналів.    До  таких  стратегій  відносяться  фіксована,  лавинна,  стохастична  і  адаптивна
            маршрутизації.
                   Алгоритм пошуку в ширину є одним із найпростіших алгоритмів маршрутизації в
            мережах.  Проте  ідеї,  покладені  в  його  основу,  використовуються  в  більш  складних
            алгоритмах, зокрема в алгоритмі Дейкстри.
                   Алгоритм  пошуку  в  ширину  вирішує  задачу  знаходження  мінімальних  шляхів    від
            заданої  вихідної  вершини  s   шляхом  систематичного  обходу  всіх  ребер  графа  для
            ”відкриття” всіх вершин, які досяжні з вихідної вершини s. Він обчислює мінімальні відстані
            та будує мінімальні шляхи від заданої вихідної вершини  s  до всіх решти вершин графа, які
            досяжні з вихідної вершини.
                   Алгоритм  пошуку  в  ширину  застосовується  як  для  неорієнтованих,  так  і  для
            орієнтованих  графів.  Вхідними  даними  для  реалізації  даного  алгоритму  є  топологічна
            структура графа, подана  у вигляді списку суміжності та вихідної вершини.
                   Алгоритм пошуку в ширину дає такі результати:
                     мінімальні відстані (мінімальні кількості ребер) від вихідної вершини  s  до кожної
            вершини графа, яка досяжна з s ;
                     дерево  пошуку  в  ширину  з  коренем  у  вершині  s ,  в  якому  для  кожної  вершини
            шлях з вершини s  (кореня дерева пошуку в ширину) відповідає найкоротшому.
                   Результат  роботи  такого  алгоритму  може  залежати  від  порядку  перегляду  вершин,
            суміжних  з  даною  вершиною.  Звідси  витікає,  що  дерево  пошуку  може  змінюватися,  але
            кількість ребер у мінімальних відстанях не залежить від порядку перегляду вершин.
                   Словесний опис алгоритму буде мати наступний вигляд
                   Крок І. [Ініціалізація]: для кожної вершини графа:
                   1.     Вершина предок (vertexParent) не визначена (NULL).
                   2.     Мінімальна        відстань      (routeWeight)       дорівнює       нескінченності
            (numeric_limits<double>::infinity()).
                   3.     Статус (currentVertexStatus) вершини встановити WHITE.
                   4.     Мінімальна відстань для вихідної вершини s  дорівнює 0.
                   5.     Статус вихідної вершини s встановити GRAY.
                   6.     Помістити в чергу (vertexQueue) вихідну вершину  s .
                   Крок ІІ. [Перегляд суміжних вершин]: взяти з черги наступну вершину currentVertex
            та проглянути список суміжних з нею вершин Vertex. Якщо черга порожня, то STOP.
                   Крок  IІІ.  [Модифікація  стану  суміжної  вершини]:  для  кожної  суміжної  вершини
            Vertex з списку якщо її статус WHITE, то:
                   1.     Змінити статус на GRAY.
                   2.     Збільшити значення мінімальної відстані до вихідної вершини s  на 1.
                   3.     Як вершину предок взято вершину currentVertex.
                   4.     Помістити кожну суміжну проглянуту вершину Vertex у чергу.
                   5.     Після завершення перегляду списку суміжних вершин змінити статус вершини
            currentVertex на BLACK.
                   Крок IV. [Ітераційний перехід]: перейти до Кроку ІІ.
                   Отже, алгоритм пошуку в ширину будує маршрут, додаючи на кожному кроці ітерації
            вершину,  до  якої  відстань  з  вихідної  вершини  s   на  поточному  етапі  обчислень  є
            найкоротшою.  Після  перегляду  всіх  вершин,  що  знаходяться  на  відстані  k   від  вихідної
            вершини  s , алгоритм переходить до розгляду вершин на відстані  k , звідси й його назва. В
            процесі роботи алгоритму кожна досяжна з  s  вершина змінює свій стан у такій послідовності:
            WHITE (вершина ще не  ”відкрита”  алгоритмом), GRAY  (вершина  ”відкрита”  алгоритмом,  але
            список її суміжних вершин ще не проглянутий), BLACK (вершина ”відкрита” алгоритмом і список
            її суміжних вершин проглянутий). Код програми, складеної за цим алгортимом представлено в
            додатку А.

                                                           17
   15   16   17   18   19   20   21   22   23   24   25