You are on page 1of 15

Доц.

д-р Трајковиќ Владимир за интерна употреба

Алгоритми и структури на податоци


– белешки од предавања –

12. Некои алгоритми кои се


применуваат врз графовите
12.1 Тополошко сортирање
Тополoшкото сортирање се извршува над ориентирани графови кои не содржат
јамки и затворени поврзани патеки. Ваквиот тип на графови често се користи за
да покаже временска зависност на некои настани. Можни примери се избор на
предмети при студирање со предмети наведени како предуслови, изведување на
активности во некој проект, но и редослед на облекување (или соблекување) на
парчиња од гардеробата. Визуелна претстава на тополошкото сортирање би
била поставување на сите темиња од графот на една отсечка така што сите
врски во графот се поставени (ориентирани) од лево на десно.

На слика 12.1а е претставен еден ориентиран нецикиличен граф кој ги


претставува хронолошките врски (временскиот редослед) на облекување на:
долен веш, пантолони, ремен, кошула, машна, палто, чорапи, чевли и часовник.
Од графот јасно се гледа дека чорапите треба да се облечат пред чевлите или
пак дека часовникот може да се стави на раката било кога. Тополошкото
сортирање на овој граф би бил еден можен редослед на обекување што е
корисно, затоа што обично повеќе парчиња гардероба тешко се облекуваат во
исто време.

слика 12.1 (a) Пример ориентиран нецикличен граф (б) Претстава на


тополошки сортиран граф

1
Доц. д-р Трајковиќ Владимир за интерна употреба

Идејата која може да се примени при реализирањето на тополошкото сортирање


е едноставна. Доколку се реализира изминување по длабочина со евидентирање
на времињата на завршување на обработката на темињата (алгоритмот кој е
опишан во тема 11. Графови), темињата треба да се подредат по опаѓачки ред
согласно времето на завршување на обработката. Програмерски, тополошкото
сортирање би можело да се реализира со вметнување на темето кое веќе не е од
интерес при изминувањето по длабочина во една линеарна поврзана листа.
Визуелната претстава на овој вака тополошки сортиран граф е дадена на слика
12.1б. Бидејќи вметнувањето на елемент во линеарна листа е операција која се
изведува во константно време, времето на извршување на овој алгоритам би
било еднакво со времето на извршување на изминувањето на граф по длбочина.

Друга (иако во основа иста) идеа за изведба на алгоритмот за реализација на


тополошко сортирање на ориентиран нецикличен граф се реализира со
„бришење“ на темињата од графот. На почеток се избира едно теме кое нема
предходник (што мора да биде исполнето доколку графот е ацикличен), кое се
„печати“ и отстранува од графот заедно со сите врски кои излегуваат од него.
Оваа постапка се повторува се додека не се избришат сите темиња од графот.
Оваа идеа е претставена со генералниот псевдо код даден во продолжение:

vnesi graf G. Neka n e brojot na teminja.


1 for i ← 1 to n do //ispecat gi teminjata//
2 if sekoe teme ima svoj prethodnik
then [mrezata ima jamka i ne e vozmozno. stop]
3 izberi teme v koe nema prethodnici
4 ispecati go v
5 izbrisi go v i site vrski koi izleguvaat od v od mrezata
6 end

Псевдо кодот е илустриран на слика 12.2. Почетниот граф е даден на слика


12.2а. Бидејќи тој има само едно теме (v1) кое нема предходници, тоа се избира
да биде прво во тополошкото сортирање на графот. Откако тоа и сите негови
излезни врски ќе се отстранат од графот се добива графот од слика12.2б.
Бидејќи во овој граф постојат три темиња кои немаат предходници (v2, v3, v4),
се избира произволно теме од тоа множество темиња. Нека тоа биде темето v4.
Оваа постапка продолжува се додека во резултантниот граф постојат темиња.

За да се овозможи компјутерско кодирање на овој алгоритам потребно е да се


избере соодветна репрезентација на податочната структура граф.
Репрезентацијата на потребните податочни структури се избира врз основа на
функциите кои треба да се извршат врз неа во текот на реализацијата на
алгоритмот (програмот). Во конкретниот случај со анализата на општиот
алгоритам лесно се утврдува дека репрезентацијата на графот треба да
овозможи: лесно утврдување дали произволно теме од графот има предходник,
лесно бришење на теме од графот со сите негови излезни врски. Делува дека
второто барање е најлесно остварливо доколку графот е претставен со помош на
колекција на листи од последователни темиња. За да го исполниме и првото
барање на алгоритмот, може стандардната репрезентација на графот со помош
на колекција на листи од соседни темиња да ја прошириме така што во секој
јазел водач ќе се памети и информација за влезниот степен на дадениот јазел. Со
секое отстранување на врска која води до соодветно теме од графот, тој број

2
Доц. д-р Трајковиќ Владимир за интерна употреба

опаѓа за еден. Во моментот кога тој број ќе стане еднаков на нула, се добива
теме кандидат за отстранување од графот. Податочната репрезентација на
почетниот граф од примерот опишан во слика 12.2 е даден на слика 12.3

слика 12.2 Илустрација на алгоритмот за реализација на тополошкото


сортирање со помош на отстранување на темиња од графот

3
Доц. д-р Трајковиќ Владимир за интерна употреба

слика 12.3 Податочна репрезентација на граф со мала модификација на


репрезентацијата со помош на колекција на листи на соседни темиња

Алгоритмот кој следи ја користи податочната структура од слика 12.3 Јазлите


водачи на листите ги содржат полињата: COUNT (за евиденција на влезниот
степен на соодветното теме) и LINK (за врска кон еден од соседите). Јазлите од
листата ги содржат полињата VERTEX и LINK. Темињата чии листи на соседи
содржат поле COUNT со вредност нула се чуваат во магацин (но може и ред).
Од алгоритмот се гледа дека нема потреба од вистинско бришење на темињата
од графот, туку само од нивно изминување (при што соодветниот влезен степен
се намалува за еден), со што во праксата повторно се реализира соодветно
изминување на графот.

procedure TOPOLOGICAL__ORDER (COUNT, VERTEX, LINK, n)


// n teminja od GRAPH se sortirani vo topoloski redosled.
Grafot e reprezentiran kako mnozestvo od listi na sosedi so
COUNT (i) = the in-degree of vertex i//
1 top ← 0 //inicijalizacija na magacinot//
2 for i ← 1 to n do //kreiraj povrzan magacin od teminja koi
nemaat predhodnici//
3 if COUNT(i) = 0 then [COUNT(i) ← top; top ← i]
4 end
5 for i ← 1 to n do //ispecati gi teminjata vo topoloski
redosled//
6 if top = 0 then [print ('mrezata ima jamka'); stop]
7 j ← top; top ← COUNT (top); print (j) //izvadi go temeto od
magacinot//
8 ptr ← LINK (j)
9 while ptr ≠ 0 do
//namali go brojot na teminja naslednici na j//
10 k ← VERTEX(ptr) //k e naslednik na j//
11 COUNT(k) ← COUNT(k) - 1 //namali go count//
12 if COUNT(k) = 0 //dodadi go temeto k vo magacinot//
13 then [COUNT(k) ← top; top ← k]
14 ptr ← LINK(ptr)
15 end
16 end
17 end TOPOLOGICAL_ORDER

4
Доц. д-р Трајковиќ Владимир за интерна употреба

12.2 Минимално стебло претставник


на граф
(MINIMUM SPANNING TREE)
Бидејќи графот е комплексна структура, од корист е секоја репрезентација која
задржува дел од (не сите) неговите карактеристики. Често пати од интерес е да
се изведе стебло од даден граф така што тоа ќе ги содржи сите темиња од
графот и дел од врските во графот. Пример за вакво стебло може да се добие
при задржување на врските низ кои се поминува со изминување по широчина на
даден граф поради тоа што во самата суштина на изминувањето е опфатена
посета на сите темиња од графот. Пример за еден комплетен граф и три негови
стебла претставници е даден на слика 12.4.

слика 12.4 Пример за комплетен граф и три можни стебла на негови


претставници.

Од посебен интерес е изборот односно креирањето на стебло претставник на


граф при што врските од графот кои се избрани да бидат гранки во стеблото
претставник задоволуваат некаков услов. Најчесто користен услов кој овие
врски треба да го задоволуваат е тие да бидат минимални. Бидејќи за да се
поврзат N темиња, се потребни најмалку N-1 врска, постојат повеќе можни
такви стебла претставници на даден граф. Но доколку се работи за тежински
графови, условот на минималност може да се прошири односно да се дополни
со барањето тежините на врските кои влегуваат во стеблото претставник да
имаат минимален збир. Ова може да соодветствува со најмал вкупен пат кој
поврзува градови во некоја област, или најмало вкупно време за извршување на
проект и слично.

За даден неориентиран граф G = (V, E), каде врските дадени со (u, v) E, имаат
тежина (weight) w(u, v) минималното стебло претставник на графот G е дадено
со T E така што неговата вкупна тежина

w(T ) = ∑ w(u, v)
( u ,v )∈T

е минимална. Фразата минимално стебло претставник на графот односно


"minimum spanning tree" всушност треба да гласи минимално тежинско стебло
претставник на графот односно "minimum-weight spanning tree."

5
Доц. д-р Трајковиќ Владимир за интерна употреба

Најпознати алгоритми за генерирање на минималните стебла претставници на


графот се алгоритмите на Крускал (Kruskal) и Прим(Prim). Обата алгоритма
може да се реализираат да работат во време O(E lg V). Обата алгоритма се
претставници на максималистичкиот (алчен) пристап при реализација на
алгоритмите кој е валиден за конкретниот проблем.

Идејата на алчната стратегија при реализацијата на минималното стебло


претставник на графот е во секој чекор да се избира врска која со додавање во
стеблото нема да го наруши предходно изграденото минимално стебло. Ваквите
врски се нарекуваат безбедни(safe) врски, па алчниот архетип во основа може да
се прикаже со следниот псевдо код.

GENERIC-MST(G, w)
1 A ← ∅
2 while A ne formira steblo pretstavnik
3 do najdi ja vrskata (u, v) koja e bezbedna za A
4 A ← A {(u, v)}
5 return A

Од алгоритмот се гледа дека со ваквиот пристап, проблемот на градба на


минимално стебло претставник се сведува на проблем на наоѓање на безбедна
врска во даден граф.

Алгоритмот на Крускал
Во пристапот (алгоритмот) на Крускал, минималното стебло претставник се
гради со вметнување на врска по врска. Врските кандидати за вметнување во
минималното стебло претставник се сите врски кои се споени со темињата на
врските кои го сочинуваат стеблото. Врските кои можат да се вметнат во
предходно изграденото минимално стебло се проверуваат според неопаѓачкиот
редослед на нивните тежини. Проверката на врските се сведува на проверка
дали таа врска води кон теме кое веќе постои во минималното стебло
претставник. Доколку темето кон кое таа врска води, не постои во минималното
стебло претставник, таа врска се вметнува во минималното стебло претставник.
Алгоритмот завршува кога сите темиња од графот ќе постојат во стеблото,
односно кога проверката ќе даде неповолен резултат за сите кандидат врски.
Стеблото почнува да се гради со врската од графот која има најмала тежина.

Пример за градење на минимално стебло претставник на граф со овој алгоритам


е даден на слика 12.5. На слика 12.5а е даден почетниот граф, додека на слика
12.5б е дадено неговото минимално стебло претставник. Врските кои се
кандидати за проверка на почеток се сите врски од графот (2,3), (2,4), (4,3), (2,6),
(4,6), (1,2), (4,5), (1,5) и (5,6) сортирани во неопаѓаки редослед според тежините
5, 6, 10, 11, 14, 16, 18, 19 и 33 соодветно. Врската (2,3) како врска со најмала
тежина се вметнува во минималното стебло претставник. Бидејќи врската (2,4)
не е врска кон истите темиња, се вметнува и таа. Следна врска за проверка е
врската (4,3). Но бидејќи темето (3) веќе постои во стеблото, оваа врска не се
вметнува. Оваа постапка се повторува додека не се проверат сите врски.

6
Доц. д-р Трајковиќ Владимир за интерна употреба

слика 12.5 Илустрација на алгоритмот на Крускал

Треба да се нагласи дека со примена на алгоритмот на Крускал минималното


стебло може да се добие и во последната итерација, бидејќи особено во графови
со поголем рој темиња, врските со најмали тежини не мора да се однесуваат на
темиња од ист регион. Ова е илустрирано на слика 12.6. На таа слика се гледа
дека всушност, со примена на алгоритмот на Крускал, се гради шума од стебла
која се обединува со привршување на алгоритмот. Доказот дека алгоритмот е
коректен (односно дека максималистичкиот пристап е применлив) се базира на
теоријата на множества и дискретна математика.

7
Доц. д-р Трајковиќ Владимир за интерна употреба

слика 12.6 Илустрација на алгоритмот на Крускал за граф со повеќе


темиња

8
Доц. д-р Трајковиќ Владимир за интерна употреба

Псевдо кодот на основата на алгоритмот на Крускал е дадена во продолжение.


Од него се гледа дека од избраната репрезентација на графот се бара ефикасно
сортирање во неопаѓачки редослед и ефикасно одстранување на темето
кандидат доколку тоа не ги задоволува условите. Бидејќи при heap сортирањето
се добија слични ефекти, се чини дека тоа е погодно за изведување, особено
кога графот е претставен преку три низи (две за темињата и една за тежините).

1 T ← ∅
2 while T pomalku od n - 1 vrski and E ne e prazno do
3 izberi vrska (v,w) od E so najmala cena;
4 izbrisi (v,w) od E;
5 if (v,w) ne sozdava jamka vo T
6 then dodadi (v,w) vo T
7 else otstrani (v,w)
8 end
9 if T sodrzi povekje od n - 1 vrski then print (' nema steblo
pretstavnik ')

Алгоритмот на Прим
Алгоритмот на Прим се разликува од алгоритмот на Крускал затоа што тој во
секоја итерација гради едно стебло. Откако ќе се избере произволно почетно
теме, кон него се додаваат врски од множеството на врски на темињата кои се
споени со него. Во следните итерации се разгледуваат сите врски кои не
припаѓаат на веќе изграденото стебло, но излегуваат од темиња што припаѓаат
на него. Врската (односно темето) што се придодава кон минималното стебло
претставник на графот е онаа врска што го задоволува условот да не се спојува
со теме што веќе припаѓа на минималното стебло (како кај Крускал) и има
најмала тежина (според максималистичкиот архетип). Графичка илустрација на
овој алгоритам е дадена на слика 12.7. Темињата (и врските) означени со темна
боја се темињата (и врските) кои во даден чекор влегуваат во минималното
стебло претставник на графот. Во случај кога постои избор на повеќе врски со
иста тежина кои би можеле да влезат во минималното стебло претставник на
графот, изборот е произволен.

9
Доц. д-р Трајковиќ Владимир за интерна употреба

слика 12.7 Илустрација на алгоритмот на Прим за граф со повеќе темиња

Псевдо кодот на овој алгоритам е даден во продолжение и во суштина тој е


сличен со алгоритмот за изминување по широчина. За секое теме v се води
вредност key[v] која ја означува тежината на врската од неговиот родител, кој се
чува во [v], до него. На почетокот на алгоритмот сите темиња се сместуваат во
ред и соодветните тежински вредности им се иницијализираат на бесконечна
вредност. Тежината на почетното теме што учествува во изградбата на
минималното стебло претставник на графот се иницијализира на нула, додека
информацијата за неговиот родител се иницијализира на нулева вредност
(поради тоа што тоа теме е корен на минималното стебло претставник на
графот). Се додека постојат темиња во редот, од него треба да се изберат
темиња кои се „крајни“ темиња што веќе припаѓаат во стеблото (линија 7 од
псевдо кодот). Во првиот чекор тоа е почетното теме. Во останатите чекори тоа
се темиња кои имаат соседи што не припаѓаат на стеблото. Се испитуваат сите
соседи на тие темиња (линија 8) кои веќе не биле вметнати во стеблото односно
имаат реална тежина (линија 9). Со оваа линија се оправдува иницијализацијата
на бесконечни вредности на тежините од линија 3. Доколку тежината е најмала,
се забележува предходникот, односно од кое теме е пристапено до избраното

10
Доц. д-р Трајковиќ Владимир за интерна употреба

теме (за да се зачува врската) и се памети соодветната тежина. Согласно линија


5, ова се прави се додека постојат темиња во редот, односно додека не се креира
целосно минимално поврзано стебло. Се остава читателите сами да заклучат
која репрезентација на графот најмногу помага за реализација на овој
алгоритам.

MST-PRIM(G, w, r)
1 Q ← V[G]
2 for sekoe u ∈ Q
3 do key[u] ← ∞
4 key [r] ← 0
5 [r] ← NIL
6 while Q ≠ ∅
7 do u ← EXTRACT-MIN(Q)
8 for sekoe v ∈ Adj[u]
9 do if v ∈ Q and w (u, v) < key[v]
10 then [v] ← u
11 key[v] ← w(u, v)

11
Доц. д-р Трајковиќ Владимир за интерна употреба

12.3 Одредување на најкратки патеки


од дадено теме (SINGLE-SOURCE
SHORTEST PATHS)
Проблемот за потреба од одредување на најкратки патеки во граф е очигледен.
Еден пример за илустрација на овој проблем е како да се стигне од местотo А до
местото Б во некој регион во кој постои густа патна мрежа. Очигледно дека еден
пристап е да се одредат сите можни патеки и да се избере најпогодната, но тоа
би значело дека непотребно ќе се изгуби време за да се пресмета на пример
должината на патот од Скопје за Дојран преку Охрид.

Проблемот на најкраток пат обично се третира преку тежински ориентиран


граф. Доколку тежините се со позитивни вредности, идејата на овој тип
алгоритми се содржи во идејата која се применува при изминувањето на граф во
широчина.

Пример за најкратки патеки во еден ориентиран граф е даден на слика 12.8. Се


приметува дека не мора да постојат патеки до сите можни темиња од графот. На
пример, не постои патека до темето V5 поради насоченоста на врската (V5,V3).

слика 12.8 (a) Пример ориентиран тежински граф (б) најкратки патеки до
сите можни темиња од темето Vo

Во оваа тема ќе биде дискутиран проблемот на наоѓање на најкратки патеки од


едно теме до сите останати темиња во графот. Постојат и други варијанти на
темата најкратка патека (или пат) во граф.

Една варијанта би била наоѓање на најкратки патишта до теме кое е дестинација


во графот. Овој проблем може да се реши со едноставно сменување на сите
насоки во графот затоа што тогаш се трансформира во наоѓање на најкраток пат
од дадено теме до сите други.

Друг проблем е проблемот на наоѓање на најкратка патека помеѓу две темиња


што е специјален случај на алгоритмот за наоѓање на најкратка патека до сите
темиња од дадено теме. Интересно е да се забележи дека сеуште не е познат

12
Доц. д-р Трајковиќ Владимир за интерна употреба

алгоритам кој за решение на овој проблем во најлош случај работи побрзо од


најдобрите алгоритми за наоѓање на најкраток пат до сите темиња од дадено
теме.

Конечно и наоѓањето на најкратките патеки помеѓу сите парови темиња во


графот. Иако овој проблем може да се реши со изведување на алгоритмот за
најкраток пат од дадено теме до сите останати темиња, за сите темиња во
графот, постојат и поефикасни решенија за овој проблем, но тие нема да бидат
разгледувани во рамките на овој курс.

Некои алгоритми за наоѓање на најкратки патеки претпоставуваат дека сите


тежини на врските се ненегативни, односно нулеви или позитивни. Таков е
алгоритамот на Џикстра (Dijkstra). Други алгоритми можат да го најдат
најкраткиот пат во некои случаи дури и кога тежините се негативни. Пример за
таков алгоритам е алгоритамот на Белман и Форд (Bellman-Ford). Во рамките на
оваа тема ќе биде обработен само алгоритмот на Џикстра.

Најкратките патеки од дадено теме до секое теме во еден граф обично се


претставуваат преку стебло на најкратки патеки. Траба да се нагласи дека не
мора да постои единствен најкраток пат, односно единствено стебло на
најкратки патеки. Примерот на слика 12.9 претставува еден насочен тежински
граф за кој постојат две различни стебла на најкратки патеки. Гранките на
стеблата со најкратки патеки се означени со затемнети линии. Лесно се
проверува дека должините на патеките до секое теме во графот се исти во двете
стебла.

слика 12.9 (a) Насочен тежински граф (б) Пример стебло на најкратки
патеки од јазелот 0 (в) Различно стебло на најкратки патеки од истиот јазел

За даден граф G, може да се претпостави дека множеството на темиња до кои е


одреден најкраткиот пат (вклучувајќи го тука и појдовното теме) е S. За секое
теме w кое припаѓа на S, со d(v) може да се означи моменталната должина на
најкраткиот пат од појдовното теме до w при тоа движејќи се само преку
темињата кои се во S. Тогаш и патеките до сите соседни темиња на темињата
кои припаѓаат на S мора да поминуваат преку темиња кои се во S. Во
спротивното, би постоел пат на теме од S кој не би бил најкраток, а според
претпоставката тие патишта се веќе одредени (темињата затоа се во S). Од тука
следи дека и најкратката патека до некое теме кое не е во S е еднаква на
минимумот од збировите на најкратките патеки до темињата во S со должината
на патеката од нив до темето кое се разгледува. Од тука следи дека архетипот на
алчни алгоритми работи за генерирање на стебло на најкратки патеки.

13
Доц. д-р Трајковиќ Владимир за интерна употреба

Иницијализацијата на моменталните должини на најкратките патеки за сите


темиња на почетокот од алгоритмот се реализира преку доделување на
бесконечна вредност како естимирана вредност за сите темиња, освен
појдовното (кое има пат до себе со тежина 0). Дополнително во фазата на
иницијализација може да се постави предходникот на секое теме (од аспект на
предходник во резултантното стебло на најкратки патеки) на нулева вредност.
Овие вредности ќе се ажурираат во текот на извршувањето на алгоритмот,
слично како кај алгоритмот за изминување на граф по широчина.

INITIALIZE-SINGLE-SOURCE(G,s)
1 for sekoe teme v ∈ V[G]
2 do d[v] ← ∞
3 [v] ← NIL
4 d[s] ← 0

По иницијализацијата, [v] = NIL за секое v V, d[v] = 0 за v = s, и d[v] = ∞ за v


V - {s}.

Релаксацијата на естимираната тежина всушност е проверка дали таа може да се


намали и намалување доколку е тоа можно. При тоа, доколку се намали
естимираната вредност за должината на патеката, потребно е да се ажурира и
вредноста за предходникот на темето во стеблото на најкратки патеки. Тоа е
претставено со следниот псевдо код.

RELAX(u, v, w)
1 if d[v] > d[u] + w(u,v)
2 then d[v] ← d[u] + w(u,v)
3 [v] ← u

Алгоритам на Џикстра
Алгоритмот на Џикстра работи под претпоставка дека за даден тежински
ориентиран граф G = (V, E) за секоја врска (u, v) E важи дека нејзината тежина
w(u, v) 0.

Овој алгоритам работи со множество на темиња S до кои е одреден најкраткиот


пат од појдовното теме s. Поради тоа за секое теме v S, важи d[v] = (s, v)
односно d[v] е бараната тежина на најкраткиот пат. Алгоритмот на Џикстра ги
селектира темињата u V - S така што тие имаат најмал естимиран пат до s, ги
вметнува нив во S и ги релаксира сите врски кои излегуваат од u. Во следниот
псевдо код темињата кои не се во S, се чуваат во редот Q заедно со нивните
естимирани d вредности.

DIJKSTRA(G,w,s)
1 INITIALIZE-SINGLE-SOURCE (G,s)
2 S ← ∅
3 Q ← V[G]
4 while Q ≠ ∅
5 do u ← EXTRACT-MIN(Q)
6 S ← S {u}
7 for sekoe teme v ∈ Adj[u]
8 do RELAX (u,v,w)

14
Доц. д-р Трајковиќ Владимир за интерна употреба

Илустрацијата на овој алгоритам за даден граф, е прикажана на слика 12.10.


Појдовното теме е најлевото теме од графот. Во темињата се означени
тековните претпоставени најкратки должини на патеките, додека со темна боја
се означени врските кои се кон моменталните предходници (кои го сочинуваат
моменталното стебло на најкратки патеки). Темињата кои припаѓаат на S се
означени со темна боја. Темето означено со сива боја е темето кое е одередено
како избрано во линија 5 од псевдо кодот. На слика 12.10а е претставена
ситуацијата после иницијализацијата, додека останатите слики соодветствуваат
со ситуациите после секоја итерација на циклусот од линиите 4 до 8. Слика
12.10ѓ го претставува излезот на алгоритмот.

слика 12.10 Илустрација на алгоритмот на Џикстра за граф со повеќе


темиња

Треба да се нагласи дека поради тоа што во редот се наоѓаат сите темиња од
графот, кои се вадат и се обработуваат, циклусот се извршува V пати. Во
принцип EXTRACT-MIN може да се изврши во O(V) време, а бидејќи таа операција
се извршува V пати (поради тоа што толку елементи има во редот Q), вкупниот
придонес на таа операција е O(V2). Секое теме се обработува само еднаш при
што се третираат сите негови излезни врски (линии 7 и 8 од алгоритмот) од што
следи дека се третираат сите излезни врски од сите темиња, односно сите врски
во графот. Од тука следи дека for јамката се извршува E пати односно целиот
алгоритам се извршува со временска комплексност O(V2 + E). Бидејќи бројот на
врските во еден граф е обично помал од бројот на темиња, можеме да кажеме
дека временската комплексност на алгоритмот на Џикстра е O(V2).

15

You might also like