Page 53 - 4387
P. 53

називаються  відповідно  верхньою  трикутною  та  нижньою

                                                              0
            трикутною підматрицями матриці  (рис. 7.1).

                     d 0 1 , 1  d 0 2 , 1  d 0 3 , 1  V       V       V            V    d 0 2 , 1  d 0 3 , 1
                0
             D =     d 0 1 , 2  d 0 2 , 2  d 0 3 , 2  ,   L =  d 0 1 , 2  V  V  ,  U =  V  V    d 0 3 , 2  .

                     d 0 1 , 3  d 0 2 , 3  d 0 3 , 3  d 0 1 , 3  d 0 2 , 3  V      V    V      V



                                                 Рисунок 7.1.



                   Якщо необхідно визначити довжини k найкоротших шляхів,

            що ведуть із деякої фіксованої вершини (наприклад, вершини 1) у

            кожну вершину вхідного графа, то слід визначити тільки перший

                         ∗      ∗           ∗   ) матриці  . Зазначимо, що цей рядок
                                                                ∗
            рядок (  ,  , …,          1,
                         1,1
                                1,2
                                                                           k
            складається  з  N  векторів,  що  належать  R .  Отже,  необхідно
            визначити Nk величин і Nk шляхів, що мають відповідні довжини.
                   Алгоритм          подвійного          пошуку         дозволяє         ефективно

            знаходити  зазначені  Nk  шляхів.  При  цьому,  вимагається,  щоб  у

            вхідному графі були відсутні контури від'ємної довжини.

                   Робота  алгоритму  подвійного  пошуку  починається  з


                                                       0      0           0  ), що поелементно
            формування деякого рядка (  ,  , …,                    1,
                                                      1,1
                                                             1,2
                                                                     ∗
                                                                             ∗
            оцінює  зверху  оптимальний  рядок  (  ,   ,  …,                          ∗  ).  Це
                                                                     1,1     1,2           1,
            означає,  що  кожний  елемент  будь-якого  вектора  не  менший
            відповідного  елемента  вектора   .  При  цьому,  в  початковій
                                                             ∗
                                                            1,
            точці повинно бути          0     = 0. Зокрема, всі елементи оцінюючого
                                          1,1,1
                                                        0    , рівного нулю)  могли б бути
            рядка (за  винятком  елемента             1,1,1
            прийняті  рівними  ∞.  Потім  в  алгоритмі  обчислюються  нові
            (менші)  оцінки  для  кожного  вектора   .  Це  здійснюється
                                                                         ∗
                                                                         1,
            шляхом  багаторазового  коректування  вхідного  оцінюючого

            вектора  . Коректування полягає в переході до нового вектора,
                          0
                          1,


                                                        52
   48   49   50   51   52   53   54   55   56   57   58