Кіріспе

Шеттерді бөлісетін ең қысқа жұп алгоритмі – компьютерлік желілерді маршруттау алгоритмі. Алгоритм берілген төбелер арасындағы ең қысқа шеттік жолдар жұбын құру үшін қолданылады. Бағытталмаған граф үшін G(V, E), ол былай сипатталады:

Берілген төбелер жұбы үшін ең қысқа жол алгоритмін іске қосыңыз.
Ең қысқа жолдың әрбір шетін (екі қарама-қарсы бағытталған доғаға тең) бастапқы төбеге бағытталған бір доғамен ауыстырыңыз.
Жоғарыдағы доғалардың әрқайсысының ұзындығын теріс етіңіз.
Ең қысқа жол алгоритмін іске қосыңыз (Ескерту: алгоритм теріс құндылықтарды қабылдауы керек).
Табылған екі жолдың бір-бірімен келісетін шеттерін жойыңыз және бірінші ең қысқа жолдағы қалған доғалардың бағытын кері бұрыңыз, осылайша оның әр доғасы енді мақсатты төбеге бағытталсын. Қажетті жолдар жұбының нәтижесі. Фордтың теріс доғалары бар кез келген жердегі (теріс циклдар болмаса) жалпы мақсаттағы ең қысқа жол алгоритміне қарағанда, Бхандари 4-қадамда қолданылатын екі түрлі алгоритм ұсынады. Бір алгоритм – дәстүрлі Дикстра алгоритмінің шағын өзгертілген нұсқасы, ал екіншісі – ендік бірінші іздеу (BFS) алгоритмі, ол Мур алгоритмінің түрі. Теріс доғалар тек бірінші ең қысқа жолда болғандықтан, трансформацияланған графта теріс цикл пайда болмайды (2 және 3-қадамдар). Теріс емес графта, өзгертілген Дикстра алгоритмі дәстүрлі Дикстра алгоритміне дейін тоғысып, осылайша жоғарыда аталған алгоритмнің 1-қадамында (және сондай-ақ BFS алгоритмінде) қолданылуы мүмкін.

Мысал

Шеттермен қиылыспайтын ең қысқа жұп алгоритмінің негізгі қадамдары төменде көрсетілген: А суретінде берілген бағытталмаған граф 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]. Үшбұрышты емес графтар үшін ұсынылған алгоритмдер бағытталған графтарға да қолданылады және кез келген мәселеге (кез келген техникалық сала) қолданылады, оны түйіндер мен қабырғалар (немесе доғалар) графигі ретінде модельдеуге болады.