Zagadnienie najkrótszej drogi w sieci

Podobne dokumenty
Zagadnienia optymalizacji na grafach

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Sortowanie topologiczne skierowanych grafów acyklicznych

Układy równań i nierówności liniowych

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA?

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

5. Najkrótsze ścieżki

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

ZAGADNIENIE TRANSPORTOWE

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Poprawność semantyczna

Digraf. 13 maja 2017

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

Matematyka dyskretna

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład z modelowania matematycznego. Zagadnienie transportowe.

Sieć (graf skierowany)

Zagadnienie transportowe

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Algebra liniowa z geometrią

Podstawowe własności grafów. Wykład 3. Własności grafów

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

Luty 2001 Algorytmy (4) 2000/2001

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Algorytmiczna teoria grafów Przepływy w sieciach.

Znajdowanie wyjścia z labiryntu

Minimalne drzewa rozpinające

PROGRAMOWANIE SIECIOWE. METODA ŚCIEŻKI KRYTYCZNEJ

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Logika i teoria mnogości Wykład 14

Teoretyczne podstawy programowania liniowego

Zadanie transportowe i problem komiwojażera. Tadeusz Trzaskalik

Data Mining Wykład 5. Indukcja drzew decyzyjnych - Indeks Gini & Zysk informacyjny. Indeks Gini. Indeks Gini - Przykład

Zagadnienie transportowe (badania operacyjne) Mgr inż. Aleksandra Radziejowska AGH Akademia Górniczo-Hutnicza w Krakowie

0 + 0 = 0, = 1, = 1, = 0.

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki

Wykład z równań różnicowych

Schemat programowania dynamicznego (ang. dynamic programming)

Metody Numeryczne Wykład 4 Wykład 5. Interpolacja wielomianowa

13 Układy równań liniowych

SIMR 2016/2017, Analiza 2, wykład 1, Przestrzeń wektorowa

VII. Elementy teorii stabilności. Funkcja Lapunowa. 1. Stabilność w sensie Lapunowa.

B jest liniowo niezależny V = lin (B) 1. Układ pusty jest bazą przestrzeni trywialnej {θ}. a i v i = i I. b i v i, (a i b i ) v i = θ.

(4) x (y z) = (x y) (x z), x (y z) = (x y) (x z), (3) x (x y) = x, x (x y) = x, (2) x 0 = x, x 1 = x

a) 7 b) 19 c) 21 d) 34

Metody numeryczne I Równania nieliniowe

Programowanie liniowe

TEORIA GRAFÓW I SIECI

Metody iteracyjne rozwiązywania układów równań liniowych (5.3) Normy wektorów i macierzy (5.3.1) Niech. x i. i =1

Teoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Algorytm simplex i dualność

Programowanie celowe #1

Podejście zachłanne, a programowanie dynamiczne

Rozdział 3 ZADANIE TRANSPORTOWE I PROBLEM KOMIWOJAŻERA

Algorytmiczna teoria grafów

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Rodzinę spełniającą trzeci warunek tylko dla sumy skończonej nazywamy ciałem (algebrą) w zbiorze X.

Ogólne wiadomości o grafach

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Graf. Definicja marca / 1

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Metoda Tablic Semantycznych

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Lista 4. Kamil Matuszewski 22 marca 2016

Macierze. Rozdział Działania na macierzach

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Metoda simpleks. Gliwice

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Pochodne cząstkowe i ich zastosowanie. Ekstrema lokalne funkcji

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz?

Dlaczego nie wystarczają liczby wymierne

Programowanie sieciowe. Tadeusz Trzaskalik

1 Funkcje uniwersalne

Temperatura w atmosferze (czy innym ośrodku) jako funkcja dł. i szer. geogr. oraz wysokości.

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Suma dwóch grafów. Zespolenie dwóch grafów

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Uzupełnienia dotyczące zbiorów uporządkowanych (3 lutego 2011).

System bonus-malus z mechanizmem korekty składki

cx cx 1,cx 2,cx 3,...,cx n. Przykład 4, 5

ALGEBRA Z GEOMETRIĄ BAZY PRZESTRZENI WEKTOROWYCH

Algorytmy i Struktury Danych.

Transkrypt:

L L Zagadnienie najkrótszej drogi w sieci 1 Rozważmy sieć, gdzie graf jest grafem skierowanym (digrafem) a jest funkcją określoną na zbiorze łuków. Wartość tej funkcji na łuku!"$#%'&, którą oznaczać będziemy )(+* może być długością lub kosztem przejazdu tego łuku. W grafie tym wyróżnimy pewien wierzchołek początkowy,. Niech -. /,0!213!5466767678!29/!29;:<4=?>", gdzie!@*a!b*8:<48c&d dla każdego# FEG6767678H, będzie drogą od, do węzła >. Długość drogi - (oznaczać ją będziemy przez IJ @- ) jest sumą długości jej łuków, czyli 9;:<4 IJ @-K M6N O(QP8RTS$(QPU7 4 Zagadnienie najkrótszej drogi (nazywane dalej skrótowo przez VCWYX ) polega na wyznaczeniu najkrótszej drogi od węzła, do każdego innego węzła >C&[Z]\,3^. Zagadnienie to może być również sformułowane 2 jako problem przesłania, od węzła, do każdego węzła zbioru _Z]\,3^, jednostki towaru w możliwie najtańszy sposób. Daje to następujący liniowy model tego zagadnienia: L *6q ` (da*bdcfe ij(+*hz L ` 8(;*hgij(;*0kmlnpo (a*8bdcfe uwv t is*5(y xzy IUHz!< F, *6q`*a(rb/cAe Z{y IUHz! &D[Z}\,A^ ij(;* ~E IUHz!5$#T'& Algorytmy, które zostaną dalej podane wymagają przyjęcia nastpujących założeń: 1. Długości łuków (wartości funkcji ) są liczbami całkowitymi. 2. Graf jest grafem spójnym (istnieje droga od s do każdego innego węzła w grafie).

3 3. Sieć nie zawiera konturów, których długość jest liczbą ujemną (o ujemnej długości). 4. Graf jest grafem skierowanym (digrafem). Algorytm Dijkstry długości łuków nieujemne W ZND wyznacza się najkrótsze drogi od pewnego węzła np. s do wszystkich pozostałych xz}y węzłów. Do zapamiętania tych dróg nie trzeba xz}y (dowolna droga może bowiem zawierać co najwyżej xz}y łuków) elementów pamięci, a jedynie Z}y. Wynika to z faktu, że istnieje drzewo skierowane (od węzła, ), w którym jedyna droga od, do danego węzła jest drogą najkrótszą. Drzewo takie nazywa się drzewem najkrótszych dróg. Algorytmy, które dalej zostaną podane wyznaczaja takie drzewo. Jego istnienie wynika z następujących własności: 4 Własność 1. Jeśli droga /,0!466767678! jest najkrótszą drog do, to dla każdego { %6767678 Z}y droga /,!46676767O!) jest również najkrótszą drogą od, do węzła!. Własność 2. Niech współrzędne wektora IJ 7+ reprezentuja długości a od, najkrótszych dróg od węzła, do wszystkich pozostaych węzłów w sieci. Droga - od węzła, do węzła jest najkrótsza droga wtedy i tylko wtedy, gdy dla każdego łuku!5$#t=& - zachodzi IJ #%K Ij!$}O(+* Obecnie podamy Algorytm Dijkstry wyznaczania najkrótszej drogi w sieci zawierającej tylko łuki o nieujemnych długościach (wagach). Algorytm ten wyznacza najkrótsze drogi od węzła, do wszystkich pozostałych wierzchołków w sieci. Każdy węzeł! sieci otrzymuje cechę Ij!$, która jest oszcowaniem z góry długości najkrótszej drogi od, do tego węzła. W każdym kroku algorytmu węzły podzielone są na dwie grupy: węzły o cechach stałych i węzły o cechach tymczasowych. Cecha

5 stała węzła reprezentuje długość najkrótszej drogi do tego węzła. Wartość cechy tymczasowej jest oszacowaniem z góry tej długości. Na początku algorytmu tylko węzeł, otrzymuje stałą cechę zero a każdy inny wierzchołek tymczasową cechę. Następne cechy stałe nadawane są węzłom w kolejności ich odległości od,. W każdej iteracji cecha węzła! jest długością najkrótszej drogi, przechodzącej przez węzły o cechach stałych (za wyjątkiem być moźe węzła! ). Zasadniczy element algorytmu polega na wyborze węzła! o minimalnej wartości cechy tymczasowej (w przypadku niejednoznacznego minimum wybór jest arbitralny) i przemianowaniu cechy tego węzła na cechę stałą. Wykorzystując następnie tę cechę dokonuje się aktualizacji cech węzłów sąsiednich do węzła!. Algorytm wyznacza drzewo skierowane (od węzła, ) najkrótszych dróg. W tym celu zapamiętuje się w węźle # oprócz cechy IJ #% indeks węzła poprzedniego jako Ij p#t tj. jeśli!"$#%c& to IJ #%K!. Ponadto dla każdego łuku!5$#t należącego do drzewa spełniony jest 6 warunek Ij p#t IJ!2 }O(+* przez aktualne cechy węzów! oraz #. Zapewnia on (Własność 2), że na końcu algorytmu cechy przedstawiają długości najkrótszych dróg a jest drzewem najkrótszych dróg. Bardziej formalny zapis tego algorytmu podajemy poniżej.

7 Algorytm Dijkstra + ; Ij p#t dla każdego węzła! & ; Ij /, E Ij /, E while do Niech! & Ij!$K lnpoj\ IJ p#t 0# & =^ \! ^ ; Z}\! ^ ; będzie węzłem dla którego for każdego!5$#t'&d do if Ij p#t Ij!$]8(;* then IJ p#t + Ij!$}O(+* and Ij p#%! 8 Uzasadnienie algorytmu Dijksrty (indukcyjnie) W każdej iteracji algorytmu węzły sieci dzielone są na dwa rozłączne podzbiory i. Hipotezami indukcyjnymi są: 1. Cecha każdego węzła zbioru jest optymalną. 2. Cecha każdego węzła zbioru jest długością najkrótszej drogi od, do tego węzła, przechodzącej tylko przez węzły (za wyjątkiem, być może ostatniego węzła). Indukcję prowadzimy względem liczebności zbioru. Aby wykazać pierwszą z hipotez przypomnijmy, że w każdej iteracji algorytm przenosi węzeł! & o minimalnej wartości cechy do zbioru. Należy pokazać, że cecha IJ!2 jest optymalną. Zauważmy, że na mocy założenia, IJ @!$ jest długością najkrótszej drogi do węzła! o węzłach wewnętrznych nie należących do. Pokażemy, że długość dowolnej drogi od, do!, zawieracącej jako węzły pośrednie węzły zbioru jest co najmniej równa aca Ij!$. Rozważmy dowolną drogę - od źródła do węzła!, przechodz

9 przez przynajmniej jeden węzeł należący do (różny od! ). Droga ta składa się z dwóch segmentów: -4 i -. Jeden -C4 kończy się w węźle & i nie zawiera żadnego innego węzła ze zbioru. Z założenia, długość drogi -C4 jest co najmniej równa IJ a ponieważ węzeł! jest węzłem o minimalnej wartości cechy w zbiorze, to Ij C~ IJ @!$. Zatem droga -C4 ma długość nie mniejszą niż Ij!$. Ponieważ długości łuków są liczbami nieujemnymi, to długość - jest również nieujemna. Tym samym mamy, że długość drogi - wynosi co najmniej Ij!$, czyli, że Ij!$ jest długością najkrótszej drogi. Aby wykazać drugą część, zauważmy, że po nadaniu cechy stałej węzłowi!, wartości cech pewnych węzłów zbioru Z}\!"^ mogą się zmniejszyć, ponieważ węzeł! może stać się węzłem wewnętrznym na tymczasowo najkrótszych drogach do tych węzłów. Ale po nadaniu cechy stałej węzłowi! sprawdza się każdy łuk!"$#%, gdzie#& :!2 i jeśli Ij p#% Ij!$ }8(;*, to Ij p#tk IJ!2 }8(;* i Ij p#t!. Zatem po operacji aktualizacji cech na podstawie hipotezy indukcyjnej droga do węzla # 10 spełnia Własność 2 i tym samym cecha każdego węzła zbioru Z \!"^ jest długością najkrótszej drogi przechodzącej tylko przez węzły \!"^. Algortm Dijkstry długości łuków dowolne Przypomnijmy, że zagadnienie najkrótszej drogi polega na wyznaczeniu najkrótszej drogi od wierzchołka, do każdego innego węzła # &D[Z}\,A^. Dalej podamy algorytm wyznaczania najkrótszej drogi w sieci dopuszczającej łuki o ujemnych długościach (wagach) ale nadal zakłada się, że sieć nie zawiera konturów o długości ujemnej. Algorytm ten nazywany algorytmem korekcji cech nadaje cechę IJ #% każdemu węzłowi # &D sieci. Na pośrednim etapie algorytmu cecha Ij p#t jest oszacowaniem (z góry) długości najkrótszej drogi od węzła, do węzła # natomiast na końcu algorytmu cecha ta reprezentuje dugość najkrótszej drogi. Zanim formalnie zapiszemy algorytm podamy teraz pewne własności najkrótszych dróg, z których korzysta algorytm. Niech Ij p#t dla

11 # F, oznacza długość najkrótszej drogi od, do węzła # (przyjmujemy, że IJ /, K E ). Jeśli cechy węzłów są długościami najkrótszych dróg, to muszą spełniać następujący konieczny warunek optymalności: Ij p#t IJ!2 O(;*A dla każdego!"$#%'&d (1) Powyższy warunek optymalności stwierdza, że dla każdego łuku @!5$#% w sieci długość najkrótszej drogi do węzła # jest nie większa niż dugość najkrótszej drogi do węzła! plus długość łuku!"$#%. Warunki te są również dostateczne dla optymalności w tym sensie, że jeśli Ij p#t jest długością pewnej drogi od źródła do węzła # oraz jest spełniony warunek optymalności, to IJ p#t jest optymalne tj. IJ p#t jest długością najkrótszej drogi do węzła #. Warunki te możemy zapisać w postaci następującego twierdzenia: Twierdzenie 1 (Warunki optymalności dla minimalnej drogi). Niech dla każdego węzła # &, Ij p#t będzie długością pewnej drogi od węzła, do węzła #. Liczby Ij p#t sa długościami najkrótszych dróg wtedy i tylko 12 wtedy, gdy spelniony jest następujacy warunek optymalności dla minimalnych dróg: IJ #% dla każdego łuku!5$#t'&d7 Ij!$}O(+* Zdefiniujemy jeszcze tzw. zredukowany koszt łuku!5$#t - oznaczany dalej przez (;* - względem cech IJ 7 jako: (;* O(+* }Ij!$<Z Ij p#% oraz podamy jego własności. (a) Dla dowolnego konturu, ` (da*8bdc (+* ` (a*b/c 8(;*37 (b) Dla dowolnej drogi P od węzła do węzła H, L ` (da*8bdc (;* L ` (a*8bdc O(+* }IJ Z IJ HdO7 (c) Jeśli IJ 7 reprezentuje długości najkrótszych dróg, to (;* ~ E dla

13 każdego łuku!5$#tc&d7 Obecnie podany zostanie algorytm bazowy, nazywany algorytmem korekcji cech, a następnie podamy jego bardziej efektywną obliczeniowo modyfikację tzw. zmodyfikowany algorytm korecji cech. Wersja bazowa algorytmu operuje na każdym etapie cechami węzłów. Wartość cechy Ij p#% jest albo równa, gdy jeszcze nie wyznaczono najkrótszej drogi od, do węzła # albo jest długością pewnej drogi od, do węzła #. W każdym węzle # zapamiętuje się oprócz cechy również indeks węzła poprzedniego - na bieżącej drodze do# o długości IJ #% - jako Ij p#t. Pozwala to po zakończeniu obliczeń wyznaczyć przsebieg najkrótszej drogi do węzła #. Algorytm jest procedurą uaktualniania cech aż do momentu, gdy wszystkie cechy będą spełniać warunek optymalności (1). Bardziej formalny zapis tego algorytmu podajemy poniżej. 14 Algorytm korekcji cech Ij /, E IJ d, + F, ; Ij p#t dla każdego węzła # &D[Z}\,A^ ; while pewien łuk!"$#% spełnia IJ p#t IJ @!$])(;* do Ij p#t + Ij!$]O(+* IJ p#t +! ; Z definicji zredukowanych kosztów wynika, że cechy Ij 7+ spełniają warunek optymalności (1), jeśli (+* ~ E dla każdego!"$#%c&d Podany algorytm korekcji cech wybiera łuk!5$#t nie spełniający tego warunku, tj. (+* E i wykorzystuje go do aktualizacji cechy węzła #. Ta operacja zmniejsza wartość cechy węzła # i nadaje zredukowanemu kosztowi na

15 łuku!5$#t wartość zero. W algorytmie zapamiętuje się indeks węzła poprzedniego (w tablicy pred(.)) dla każdego węzła o skończonej wartości cechy. Zbiór łuków Ij p#to$#t (za wyjątkiem węzła, ) nazywamy grafem poprzednik w. Jest to drzewo skierowane od węzła, zawierające wszystkie węzły o skończonych wartościach cech. Algorytm zachowuje, w trakcie obliczeń, następującą własność: (;* E dla każdego łu ku!5$#t grafu poprzedników. Aby to wykazać zastosujemy indukcję względem liczby iteracji. Zauważmy, że algorytm dodaje łuk!5$#t do grafu poprzedników w trakcie aktualizacji cechy, co implikuje, e Ij p#tk IJ!2 }(+* lub O(+* }Ij!$ Z Ij p#%k (;* E. W następnych iteracjach cecha Ij!$ może się zmniejszyć i wartość (+* może stać się ujemna. Nasępnie zaobserwujmy, że jeśli Ij p#t zmniejszy się w trakcie algorytmu, wtedy dla pewnego łuku!5$#t grafu poprzedników (+* może stać się dodatnie, co przeczy własności, której zachodzenie założyliśmy. Ale w tym przypadku, natychmiast usuwamy łuk!5$#t z grafu poprzedników i tym 16 samym zakładana własność zachodzi. W sytuacji, gdy nie ma konturów o ujemnej długości graf poprzedników jest zawsze drzewem. Graf ten zawiera jedyną drogę od węzła, do każdego węzła o długości co najwyżej IJ. Gdy algorytm kończy pracę, każdy łuk grafu poprzedników ma zerowy koszt zredukowany, co implikuje, że długość drogi od węzła, do każdego węzła wynosi Ij i tym samym graf poprzednik w jest drzewem najkrótszych dróg. Podany algorytm korekcji cech nie określa sposobu sprawdzania warunku optymalności. Jednym ze sposobów może być przeglądnięcie kolejno listy łuków i idetyfikacja łuku nie spełniającego tego warunku. Procedura ta nie jest jednak efektywna. Opiszemy teraz podejście, które jest bardziej efektywne. Załóżmy teraz, że mamy listę łuków, które mogą nie spełniać warunku optymalności i listę tę oznaczymy przez LISTA. Jeśli LISTA jest pusta, to mamy rozwiązanie optymalne. W przeciwnym przypadku sprawdzamy tę listę i wybieramy łuk!5$#t nie spełniający warunku optymalności. Usuwamy ten łuk z LISTY i jeśli nie spełnia on warunku

17 optymalności, to wykorzystujemy go do aktualizacji cechy węzła #. Zauważmy, że zmniejszenie wartości cechy węzła # zmniejsza koszt zredukowany wszystkich łuków wychodzących z węzła # co może spowodować, że pewne łuki mogą przestać spełniać warunek optymalności. Takie zmniejszenie wartości cechy węzła # zachowuje warunek optymalności wszystkich łuków wchodzących do węzła #. Zatem jeśli zmniejszymy wartość cechy Ij p#t, to musimy dodać łuki należące do : p#t do LISTA. Następnie zaobserwujmy, że dodając łuk do LISTA dodajemy wszystkie Łuki wychodzące z pojedyńczego węzła. To rozważanie sugeruje, że zamiast pamiętać listę wszystkich łuków, które mogą nie spełniać warunku optymalności możemy pamiętać listę węzów spełniających następującą własność: jeśli łuk!"$#% nie spełnia warunku optymalności, to LISTA musi zawierać węzeł!. Zapamiętywanie listy węzłów wymaga mniej pracy i prowadzi do szybszych algorytmów w praktyce. To jest istotą zmodyfikowanego 18 algorytmu korekcji cech, który podany jest poniżej. Poprawność jego wynika z własności, że zbiór LISTA zawiera każdy węzeł! incydentny z łukiem!"$#% nie spełniającym warunku optymalności. Indukcją po liczbie iteracji można wykazać, że ta własność zachowana jest w algorytmie.

19 Zmodyfikowany algorytm korekcji cech IJ /, + E Ij /, F, ; IJ p#t + dla każdego węzła # & _Z}\,3^ ; +.\,3^ while do usuń element (i) z listy LISTA; for każdego łuku!5$#t'& :!$ do if IJ p#t IJ @!$ }O(+* then Ij p#% IJ!2 O(;* Ij p#t! ; if # & then dodaj węzeł # do ; 20 Dotąd zakładaliśmy, że sieć nie zawierała konturów o długości ujemnej. Podamy teraz modyfikację, wymaganą w algorytmach, która pozwala wykryć obecność konturu o ujemnej długości, o ile istnieje. W algorytmie podstawowym zauważmy, że jeśli sieć zawiera kontur ujemny, to nie istnieją cechy węzłów spełniające warunek optymalności. Zatem algorytm korekcji cech będzie stale zmniejszał wartości cech i nigdy się nie skończy. Jeśli przez C oznaczymy długość najdłuższego łuku w sieci, to wartość Zh będzie oszacowaniem z dołu wartości cechy, gdy sieć nie zawiera konturu ujemnego. Zatem jeśli cecha pewnego węzła otrzyma wartość niższą ni Zh, to kończymy obliczenia. Kontur ujemny otrzymujemy wykorzystując poprzedniki węzłów zaczynajac od wę zła.