Scientific Research of the Union of Scientists in Bulgaria - Plovdiv, series B. Natural Sciences and Humanities, Vol. XVII, ISSN 1311-9192, International Conference of Young Scientists, 11 - 13 June 2015, Plovdiv
МАРШРУТИЗАЦИЯ С ИЗПОЛЗВАНЕТО НА ГРАФИ. АЛГОРИТЪМ НА ДЕЙКСТРА
Йови Гънчев Лулов УниБИТ
Abstract
As one of their most demanding applications we can mention shortest paths search. Several studies about shortest path search show the feasibility of using graphs for this purpose. Dijkstra's algorithm is one of the classic shortest path search algorithms. This algorithm is not well suited for shortest path search in large graphs. This report aims to provide knowledge of graphs and Dijkstra's algorithm against which to build a working model for the calculation of shortest way. An operating unit with real map to calculate the fastest route from point to point.
Keywords: Shortest path search algorithm; Reduced graphs; Dijkstra's algorithm
В този доклад ще разглеждаме как е възможно програмно да се осъществи тази подредба като използваме основно знанията от книгата на Унибитските преподаватели професор Иван Иванов и доцент Петър Стойков: „Структури от данни и алгоритми в С#" и по-точно глава 9: „Графи"
Графите са набори от върхове и ребра. Ако вземем картата на България във вид на граф, всеки град е свързан с други градове чрез път, то картата е тип граф. Всеки град е връх. Пътищата, който свързват градовете, се наричат ребра. Ребрата се представят във вид на двойка (VI, v2), където VI и v2 са два върха в графа. Реброто може да има тегло. Графите, в които ребрата имат тегла, се наричат претеглени графи. Графът, чиито двойки са ориентирани, се нарича насочен граф. Път в граф е последователността от върхове в графа, които са свързани с ребра. Дължината на пътя е равна на броя на ребрата от първия връх в пътя до последния връх. Ако един път започва и свършва в един и същ възел, то този път се нарича цикъл или контур. Цикълът е хамилтонов, когато през всеки възел на графа се преминава еднократно. Цикълът е ойлеров, когато по всяко ребро на графа се преминава еднократно. В теорията на графите има един интересен вид цикъл, наречен бримка. Това е път, състоящ се само от едно ребро, което свързва един и същ връх. Бримките имат дължина 0. Граф, който не съдържа бримки, паралелни ребра и ориентирани ребра, се нарича обикновен граф или просто граф. Пълен граф е този, в който всеки връх е свързан с всички останали.[1]
Графите се използват за моделиране на много различни видове реални системи. Един пример за това е транспортният поток. Върховете представляват уличните кръстовища, а ребрата на графа са самите улици.
Намиране на най-краткия път е една от най-честите операции, извършвани с графи, е търсенето на най-краткия път от един връх до друг.
Алгоритъм на Дейкстра за определяне на най-краткия път е един от най-известните алгоритми в компютърните науки за определяне на най-краткия път в претеглен граф, наречен на името на неговия създател Едсхер Дейкстра (Edsger Dijkstra). Алгоритъмът служи за намиране на най-краткия път от даден връх до всички останали върхове в ориентиран граф с неотрицателни тегла на ребрата. Това се постига чрез така наречената алчна стратегия, или алчен алгоритъм (Това е особен подклас на евристичните алгоритми. Наричат се алчни или жадни от англ. greedy.).
Характерните особености на алчните алгоритми са в това, че всеки конкретен етап от решението на задачата се взема най-доброто решение за момента. Хипотезата, която следват, е че така ще се стигне до глобалния максимум. Реално обаче се намира някакъв локален екстремум. Не се предвижда възможност за преразглеждане на вече взети решения, както се прави в динамичното оптимиране, където решението се взема на базата на всички възможни решения до момента. Алчните алгоритми предоставят решение близко до оптималното. Това е бърз и ефективен алгоритъм. Алчните алгоритми са по-лесни за реализация, за разлика от алгоритмите на динамичното оптимиране.[1]
Като използваме алгоритъма на Дейкстра, създаваме таблица за съхранение на разстоянията от началния връх до другите върхове в графа. Първоначално всеки връх има безкрайна дължина, която се намалява при изпълнение на алгоритъма. Всеки съседен връх на началния се посещава и в таблицата се записва теглото на съседното ребро. Алгоритъмът работи, като поддържа дължината на намерения до момента най-кратък път от началния връх до всеки посетен връх. При следващата итерация се посещават съседните върхове на последно обходените. Така постепенно множеството от върховете, за които тази дължина със сигурност е оптимална, се разширява. На всяка итерация алгоритъмът избира такъв връх, за който разстоянието от началния връх до него е минимално. Дървото расте от началния връх, но това не е обхождане в ширина. Тук не се грижим за броя на ребрата по пътя на дърво, а само за сумата от теглата им. Алгоритъмът приключва, когато се обходят всички върхове в графа. В следващите таблици са показани стъпките на алгоритъма при обхождане на графа. В първата таблица е дадено първоначалното състояние на графа преди стартирането на алгоритъма. Безкрайността означава, че не знаем разстоянието, и в таблицата се използва голяма стойност, която не може да представлява тегло на реброто.[1]
Като се имат предвид знанията за графите, придобити в по-горните редове и алгоритъмът на Дейкстра представям работен модел с практическа насоченост на програма „Дейкстра", която автоматично да. прави калкулации на маршрута от различии точки.
Проектираната работна мрежа е изградена от 32 български града (Фиг.1) с изчертани между тях пътшца като са минимализирани пътшцата така, че да се осъществи директна връзка между възлите. В нашата система върховете са заложени по
С
□
с
□
П^зш град
Калотима К. А-1 о
начин удобен за осъществяването на алгоритъма на Дейкстра за всеки един град. Зададените тегла на ребрата са разстоянието от връх до връх в километра. [2]
Целтанаизграденатасистемаедадаварезултатнанай-карткататърсенадестинация от начална позиция с информация за съответният родител на възела. За постигане на целта се изгражда масив в excel с данни за всеки град за разстоянията с всеки град, който се явява негов възел и със стойност -1 за градовете, конто не са ребра (фиг.2). Когато например се ин-тересуваме от маршрута София-Дуранкулак в програмата ще зададем „Първи град" София и ще изберем „Дейкстра" за да получим резултата Дуранкулак за 533км. през родителя гр. Варна (фиг.З). Така нашата система е готова да дава резултат за всеки град като начална точка до всеки град от мрежата със съответния родител на крайната точка. В резултат можем
1 Dijbtra
Пернин | 30 | inf | А
Сливен | ±г.£ | inf |
Ловеч | ±п£ 1 inf |
Плевен | inf 1 inf |
Пловдив | 148 | inf |
Русе | ±п£ 1 inf |
Сыолян | ±п£ 1 inf |
Шумен | | inf |
Сп?.Загора | ±п£ | inf |
Хасково | inf 1 inf |
Решение: _
Да възел Роди отел Пъп?
София София inf
Дуранкулак Варна 533
Видин Монп?ана 202
Монп?ана Брада 100 =
Брада Боп?евград 50
Боп?евград София 20
Бяла Плавен 227
5.Търнова Ловеч 20G
Варна Шумен 439
Добрич Варна 491
Бургас Сливен 392
Габрово Казанлък 242
Годе Делчев Благоевград 220
Блароев град Перник 113
Гюешево Кпстендил 110
Казанлъи София 193
Калопмна София 57
К Днттррип Хдгчгоио ЯЯ1
< Ш
ВИДИН
L-Jd
BTl>pHOB&
D Добрич 1 София
3 габрово
4 1Г,1Г-Цп |Г,
Видин Монтана
ВИИ
Създай граф
Usiprf графа Лцяи град
София
Дуранкулак —I
Видин
Монтана
Враца Ботевград
Бяла
В.Търново
Варна
Добрич
Бургас
Габрово
Гоце Делчев
Благоевград
Гюешево
Казанлък
Калотина
К.Андреево
Кърдкали
Кулата
Кюстендил т
За тори
Варна Добрич София
автоматично да правим изчисления на най-краткия маршрут от град до град.
П |ао г ра ма..Де й кстра"
Фиг. 1 Карта на България
<"иг. 2 Масив в Excel
Фиг.4 Резултат от търсене
Използвани източници:
1. Иванов, Иван, П. Стойков. Структури от данни и алгоритми в С",част Н
2. http://www.bgmaps. com/