Кіріспе
Шеттерді бөлісетін ең қысқа жұп алгоритмі – компьютерлік желілерді маршруттау алгоритмі. Алгоритм берілген төбелер арасындағы ең қысқа шеттік жолдар жұбын құру үшін қолданылады. Бағытталмаған граф үшін G(V, E), ол былай сипатталады:
Берілген төбелер жұбы үшін ең қысқа жол алгоритмін іске қосыңыз.
Ең қысқа жолдың әрбір шетін (екі қарама-қарсы бағытталған доғаға тең) бастапқы төбеге бағытталған бір доғамен ауыстырыңыз.
Жоғарыдағы доғалардың әрқайсысының ұзындығын теріс етіңіз.
Ең қысқа жол алгоритмін іске қосыңыз (Ескерту: алгоритм теріс құндылықтарды қабылдауы керек).
Табылған екі жолдың бір-бірімен келісетін шеттерін жойыңыз және бірінші ең қысқа жолдағы қалған доғалардың бағытын кері бұрыңыз, осылайша оның әр доғасы енді мақсатты төбеге бағытталсын. Қажетті жолдар жұбының нәтижесі. Фордтың теріс доғалары бар кез келген жердегі (теріс циклдар болмаса) жалпы мақсаттағы ең қысқа жол алгоритміне қарағанда, Бхандари 4-қадамда қолданылатын екі түрлі алгоритм ұсынады. Бір алгоритм – дәстүрлі Дикстра алгоритмінің шағын өзгертілген нұсқасы, ал екіншісі – ендік бірінші іздеу (BFS) алгоритмі, ол Мур алгоритмінің түрі. Теріс доғалар тек бірінші ең қысқа жолда болғандықтан, трансформацияланған графта теріс цикл пайда болмайды (2 және 3-қадамдар). Теріс емес графта, өзгертілген Дикстра алгоритмі дәстүрлі Дикстра алгоритміне дейін тоғысып, осылайша жоғарыда аталған алгоритмнің 1-қадамында (және сондай-ақ BFS алгоритмінде) қолданылуы мүмкін.
Replace each edge of the shortest path (equivalent to two oppositely directed arcs) by a single arc directed towards the source vertex
Make the length of each of the above arcs negative
Run the shortest path algorithm (Note: the algorithm should accept negative costs)
Erase the overlapping edges of the two paths found, and reverse the direction of the remaining arcs on the first shortest path such that each arc on it is directed towards the destination vertex now. The desired pair of paths results. In lieu of the general purpose Ford's shortest path algorithm valid for negative arcs present anywhere in a graph (with nonexistent negative cycles), Bhandari provides two different algorithms, either one of which can be used in Step 4. One algorithm is a slight modification of the traditional Dijkstra's algorithm, and the other called the Breadth First Search (BFS) algorithm is a variant of the Moore's algorithm. Because the negative arcs are only on the first shortest path, no negative cycle arises in the transformed graph (Steps 2 and 3). In a nonnegative graph, the modified Dijkstra algorithm reduces to the traditional Dijkstra's algorithm, and can therefore be used in Step 1 of the above algorithm (and similarly, the BFS algorithm).
Мысал
Шеттермен қиылыспайтын ең қысқа жұп алгоритмінің негізгі қадамдары төменде көрсетілген: А суретінде берілген бағытталмаған граф G(V, E) және оның қабырғаларының салмақтары көрсетілген. B суретінде А-дан Z-ға дейінгі есептелген ең қысқа жол ABCZ көрсетілген (қалың сызықтармен). C суретінде ең қысқа жолдың доғаларының керілуі және олардың теріс салмақтары көрсетілген. D суретінде C суретіндегі жаңа түрлендірілген граф бойынша А-дан Z-ға дейінгі ең қысқа ADCBZ жолы көрсетілген (бұл өзгертілген Дикстра алгоритмі (немесе BFS алгоритмі) арқылы анықталады, ол мұндай теріс доғалар үшін жарамды; мұндай түрлендірілген графтарда теріс циклдар болмайды). E суретінде бастапқы граф бойынша анықталған ең қысқа ADCBZ жолы көрсетілген. F суретінде ABCZ және ADCBZ жолдарына ортақ BC қабырғасын жойып, қалған қабырғаларды тиісті түрде топтастырғаннан кейін табылган ең қысқа шеттік жолдар жұбы (ABZ, ADCZ) көрсетілген.
Талқылау
Теріс емес графикте өзгертілген Дикстра алгоритмі дәстүрлі Дикстра алгоритмі сияқты жұмыс істейді. O(d) дәрежелі түйіндері бар графикте тиімділігі O(d|V|) болып табылады, ең нашар жағдайда, дәстүрлі Дикстра сияқты, O(|V|²) болады. Теріс қабырғалары бар шеттік ажыратылған ең қысқа жұп алгоритмінің түрлендірілген графигінде, өзгертілген Дикстра алгоритмінің 2a қадамында бұрын "тұрақты" деп белгіленген түйін 3a қадамында қайта қаралып, қайта белгіленуі және S жиымына (3b қадамы) қайта қосылуы мүмкін. Мұндай түрлендірілген графиктегі өзгертілген Дикстраның тиімділігі O(d²|V|) болады, ең нашар жағдайда O(|V|³) болады. Көптеген практикалық маңызы бар графиктер әдетте сиректеу болады, O(1) дәрежелі түйіндерге ие, онда түрлендірілген графикке қолданылатын өзгертілген Дикстра алгоритмінің тиімділігі O(|V|) (немесе эквивалентті, O(|E|)) болады. Шеттік ажыратылған ең қысқа жұп алгоритмі тиімділігі жағынан Suurballe алгоритмімен салыстырылады, ол жалпы алғанда O(|V|²) болады, себебі терiс құнмен қабырғаларды болдырмау үшін графты қайта салмақтауға қосымша түрлендіру қажет, бұл Дикстра алгоритмін ең қысқа жол қадамдарының екеуі үшін қолдануға мүмкіндік береді. Қайта салмақтау үшін бастапқы түйінде тамырланған ең қысқа жол ағашының толық құрылымын салу қажет. Осы қосымша графтық түрлендіруден бас тарту және оның орнына өзгертілген Дикстра алгоритмін пайдалану арқылы Бхандаридің тәсілі шашыраңқы графтар үшін тиімділік жоғалтпай, шеттік ажыратылған ең қысқа жұп алгоритмінің оңайлатылған нұсқасын ұсынады. Осы қарапайыы форма K (>2) ажыратылған жол алгоритмдерінің және олардың вариацияларының, мысалы, толық ажыратылмаған жағдайда ішінара ажыратылған жолдардың, сондай-ақ нақты желілік сала маманының күрделі желілерде кездесетін шектеулері бар графтардың оңай кеңейтуіне мүмкіндік береді. Жоғарыдағы шеттік ажыратылған ең қысқа жол жұбы алгоритмінің түйіндік ажыратылған нұсқасы алгоритмнің 3-қадамында бірінші ең қысқа жолдың әрбір түйінін (бастапқы және соңғы түйіндерді қоспағанда) бөлу арқылы алынады, бөлінген түйін жұбын нөлдік салмақты қабырғамен (бастапқы түйінге қарай бағытталған) қосады және кез келген кіріспе қабырғаны екі қарама-қарсы бағытталған қабырғамен ауыстырады, біреуі бөлінген жұптың түйінінде (бастапқы түйінге жақын), екіншісі басқа түйінден шығады. K (>2) нұсқалары да осылай алынады, мысалы, ең қысқа шеттік ажыратылған жол жұбының түйіндері (бастапқы және соңғы түйіндерді қоспағанда) бөлінеді, әрбір бөлінген жұптың түйіндері нөлдік салмақты қабырғалармен және сыртқы қабырғалармен ұқсас түрде байланыстырылады [8][9]. Үшбұрышты емес графтар үшін ұсынылған алгоритмдер бағытталған графтарға да қолданылады және кез келген мәселеге (кез келген техникалық сала) қолданылады, оны түйіндер мен қабырғалар (немесе доғалар) графигі ретінде модельдеуге болады.