Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/analiza i implementa…  · web...

32
Аутор овог документа је Петар Аврамовић. Слободно га можете читати, размењивати, копирати, штампати али само као цео документ …. у циљу сазнавања нечег новог или подсећања нечег што сте заборавили. Немојте користити делове овог документа (текст, слике) или цео документ у комерцијалне сврхе ( пишите своје документе и цртајте своје слике сами ). У писању документа коришћени су програми Microsoft Word 2003, Foxit PDF creator ( ако читате PDF датотеку ), AutoCAD 2006, Corel Draw 11. текст куцао Пера слике цртао Пера Наравно у циљу спашавања прашума немојте да штампате ову страницу већ све оне испод и штампајте са обе стране листа. Уживајте у читању.

Upload: others

Post on 10-Oct-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Аутор овог документа је Петар Аврамовић.

Слободно га можете читати, размењивати, копирати, штампати али само као цео документ …. у циљу сазнавања нечег новог или подсећања нечег што сте заборавили.

Немојте користити делове овог документа (текст, слике) или цео документ у комерцијалне сврхе ( пишите своје документе и цртајте своје слике сами ).

У писању документа коришћени су програми Microsoft Word 2003, Foxit PDF creator ( ако читате PDF датотеку ), AutoCAD 2006, Corel Draw 11.

текст куцао Пера слике цртао Пера

Наравно у циљу спашавања прашума немојте да штампате ову страницу већ све оне испод и штампајте са обе стране листа. Уживајте у читању.

Page 2: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Садржај

УВОД.......................................................................................................- 2 -

ПРЕДСТАВЉАЊЕ ГРАФОВА..........................................................- 3 -

ДФС - ПРЕТРАГА ПО ДУБИНИ......................................................- 5 -

БФС - ПРЕТРАГА ПО ШИРИНИ....................................................- 8 -

НАЛАЖЕЊЕ НАЈКРАЋЕГ ПУТА.................................................- 11 -

ФЛОЈДОВ АЛГОРИТАМ.........................................................................................................- 11 -

ДЕЈКСТРИН АЛГОРИТАМ.....................................................................................................- 11 -

МИНИМАЛНО СТАБЛО РАЗАПИЊАЊА..................................- 15 -

ЗАКЉУЧАК.........................................................................................- 18 -

Литература:.........................................................................................- 19 -

1

Page 3: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Увод

Граф G = ( V, E ) се састоји од скупа чворова V и скупа грана E, при чему

гране представљају релације између чворова.

Орјентисан граф (слика 1) је онај

граф у коме су гране једносмерне. Уколико

постоји грана из чвора А у чвор В, тада

директан пут из чвора В у чвор А је могућ

само уколико постоји и грана из чвора В у

чвор А. Гране усмереног графа су уређени

парови чворова и редослед два чвора које

повезује грана је битан.

Неорјентисан граф (слика 2) је граф

у коме уколико је могуће стићи из једног

чвора у други, могуће је истим путем стићи

из другог чвора у први ( гране су

двосмерне; нпр. А-В = В-А где су А и В

чворови графа ).

Пут између чворова А и В је низ веза

пеко којих је из једног чвора могуће стићи у

други чвор.

Циклус је пут у графу чији је почетни чвор једнак завршном. Ацикличан

граф је онај који нема циклус и такав граф називамо дрво или стабло.

2

Слика 1

Слика 2

Page 4: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Представљање графова

Постоје два начина представљања графа. Tо су матрица и листа

повезаности. Нека је дат један тежински

граф са n чворова који није орјентисан

(слика 3).

Представимо везе између чворова

матрицом m (слика 4). Димензије матрице

m су n*n. Ако између чворова i и j

постоји веза, тада вредности матрице

m[i,j] и m[j,i] имају вредност тежине те

гране (везе). Поља где не постоји веза,

ради имплементације су означена са -1.

Уочавамо да је меморија коју заузима матрица много већа од потребне.

Када би хтели да претражимо све везе

једног чвора, морали бисмо да прођемо

кроз n вредности матрице од којих су

неке провере беспотребне (оне где је

вредност матрице -1 јер ту не постоји

веза ). Једина повољна ствар је та да је

имплементација табеле знатно лакша и

могуће је брзо приступити вези између

било која два чвора. У Pascal-у m[i,j]

представља дужину везе, где је m

матрица повезаности, а i и j су два

чвора.

Слика 3

1 2 3 4 5 6

1 -1 10 16 -1 -1 -1

2 10 -1 -1 -1 -1 -1

3 16 -1 -1 9 -1 -1

4 -1 -1 9 -1 19 7

5 -1 -1 -1 19 -1 -1

6 -1 -1 -1 -1 7 -1

3

Слика 4

Page 5: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

На слици 5 представљен је граф

листом повезаности, где сваки

чвор садржи листу у којој се

налазе чворови са којима је дати

чвор повезан. Сами чворови могу

бити у низу тако да им се може

брзо и лако приступити. Чворови

могу бити и у листи, тј. повезани

показивачима. У том случају ако

би хтели да приступимо чвору 4

и његовим везама морали би да

кренемо кроз листу преко

чворова 1-2-3 и провером

утврдити да смо у четворци.

На овој слици листа

повезаности чвора 1 саржи два

елемента: чворове 2 и 3. Поред ознаке броја чвора сваки елемент листе

повезаности чува и тежину гране између чвора 1 и свих чворова са којима је он

повезан. Тако први елемнт у листи означава да је чвор 1 повезан са чвором 2 и да

је тежина те гране 10, док следећи елемент у листи означава да је чвор 1 повезан

са чвором 3 и да је тежина те гране 16 итд. Овај начин је меморијски ефикаснији,

али исто тако и временски јер нема беспотребних провера непостојећих веза.

Једини проблем је много сложенија имплементација у односу на матрицу па ће

даље бити рађено са матрицом повезаности ради једноставности.

4

Слика 5

Page 6: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

ДФС - претрага по дубини

Претрага по дубини подразумева следећи начин проласка: крећемо од

једног чвора и пролазимо кроз све чворове са којима је он повезан. За сваки чвор

који посетимо најпре претражујемо његово поддрво, тј чворове са којима је он

повезан. Уколико је неки чвор већ посећен његово поддрво не претражујемо.

Морамо увести ознаке да ли смо посетили неки чвор или нисмо, да се не бисмо

нашли у ситуацији да један исти чвор посећујемо више пута. Овде радимо на

неоријентисном графу (слика 6).

У питању је рекурзивна процедура са једним параметром – чвором кроз

који пролазимо.

псеудокод:

процедура дфс( чвор! )

означи чвор чвор! као посећен

за сваку од веза чвора чвор!

уколико чвор до кога води веза није посећен

дфс ( за чвор до кога води веза )

Нека се у матрици veza чувају тежине грана ( веза ) графа. Два чвора i и j

су повезана ако је veza[i,j]<> -1 и veza[j,i]<> -1. n је број чворова, а низ oznacen

је променљива у главном програму која садржи низ од n вредности типа boolean.

oznacen[i] означава да ли је чвор i означен ( означен је онај чвор који је већ

посећен ) или није. На почетку ни један није означен па је потребно поставити

5

Слика 6

Page 7: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

почетне вредности у низу oznacen на false. v је чвор у коме се тренутно налазимо.

Следи код у паскалу.

Конкретно, за слику 6, уколико позовемо дфс пролазак за чвор 4

процедура би радила на следећи начин:

dfs ( 4 ) означи чвор 4; чвор 3 је први на реду па зовемо dfs ( 3 )

dfs ( 3 ) означи чвор 3; чвор 2 је први на реду па зовемо dfs ( 2 )

dfs ( 2 ) означи чвор 2; први на реду је чвор 1 па зовемо dfs ( 1 )

dfs ( 1 ) означи чвор 1; први на реду је чвор 2 али је он означен. следећи је чвор

5 па зовемо дфс (5)

dfs ( 5 ) означи чвор 5; како су чворови 1 и 3 означени овде неће доћи до

позивања dfs.

рекурзивно се враћамо у dfs ( 1 ) у нашем случају for петљу; како после чвора 5

и 1 нема више веза овде се не зове dfs

рекурзивно се враћамо у dfs ( 2 ) чвор 3 је посећен а 2 нема више веза тако да ни

овде не позивамо dfs.

рекурзивно се враћамо у dfs ( 3 ) чвор 4 је посећен а 3 нема више веза тако да не

зовемо dfs.

рекурзивно се враћамо у dfs ( 4 ) следећи на реду је чвор 6 тако да зовемо dfs (6)

dfs ( 6 ) означимо 6. 4 је означен а 7 није па зовемо dfs ( 7 ).

dfs ( 7 ) означимо 7. једина веза са 7 је 6 али он је означен па не зовемо dfs.

- рекурзивно се враћамо у dfs ( 6 ) нема више веза . не зовемо dfs

рекурзивно се враћамо у dfs ( 4 ). ни он нема више веза и dfs пролазак је готов. а

као што видимо сви чворовои су обиђени.

6

Page 8: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Ово је процедура за обилазак графа, при чему кроз сваки чвор прођемо

тачно једном. Уколико нам је потребно, лако можемо у ову процедуру додати

било који параметар којим би нешто рачунали.

За следећи алгоритам ће нам бити потебна структура ред ( fifo - first into

first out). Следи имплементација реда који ћемо користити у следећем прогарму

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

наведене типове, променљиве и процедуре. На почетку главног програма треба

иницијализирати ред. На основу принципа рада следећег алгоритма неће нам бити

потребно да ослобађамо место заузето показивачима. То ће бити обављено у

алгоритму. Иначе, ове процедуре су познатије под називима pop ( dodaj_u_red ) и

push (uzmi_iz_reda).

7

Page 9: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

БФС - претрага по ширини

Идеја код претраге по ширини је да кренемо из једног чвора графа и

сместимо све његове везе са другим чворовима у ред. Затим приступамо једном

по једном елементу кога ћемо узимати уз реда ( тај елемент представља онај чвор

у који води веза ). Узет елемент обрађујемо ( тј. извршити било коју обраду : нпр

нешто сабрати, помножити, проверити да ли одговара нечему или било шта друго

што је потребно у циљу испуњавања задатка програма.), а затим све његове везе

са осталим чворовима , које нису посећене убацујемо у ред ( на крај реда јер је то

фифо структура). Поступак се понавља све док ред не постане празан, тј. док не

прођемо кроз све чворове. Овде ћемо поново користити један низ са члановима

типа boolean и зваћемо га oznacen. oznacen[i] ће бити true ако је тај чвор посећен

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

низа oznacen на false ( јер ниједан чвор на почетку није посећен ).

Ово је само једна процедура и биће представљен њен псеудокод, а затим и

код у паскалу.

главни програм

учитавање чворова

постављање реда на празно

стави елемент од кога креће у ред

процедура бфс;

ако ред није празан

узми чвор из реда

( уколико задатак то захтева обави одређене операције)

прођи кроз сваку везу чвора са неким другим и ако чвор на који

показује веза није означен додај га у ред и означи га као обиђеног

бфс;

8

Page 10: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Ово је графички приказано на слици 7 и слици 8. Принцип рада

процедуре је представљен корак по корак.

ред 1 прво узимам 1 на ред иду 2 3 4

ред: 2 3 4 узимам 2 на ред иду 5 6

ред: 3 4 5 6 узимам 3

ред: 4 5 6 узимам 4 на ред иду 7 8

ред: 5 6 7 8 узимам 5

ред: 6 7 8 узимам 6 на ред иде 9

ред: 7 8 9 узимам 7

ред: 8 9 узимам 8 на ред иде 10

ред: 9 10 узимам 9 на ред иде 11

ред: 10 11 узимам 10 на ред иду редом 12, 13, 14, 15, 16

ред: 11 12 13 14 15 16 узимам 11, али не постоји чвор који је повезан с њим

а да није посећен (као што је био случај са чворовима 3, 5 и 7)

исти сличај као претходни је и са осталим члановима реда тако

да следећи кога узимам је 12 и тако до 16 када ред постаје празан

када се бфс завршава.

9

Слика 7

Page 11: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

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

у пракси. На следећем графу (слика 8) до неких чворова води више путева. Овај

граф је орјентисан (постоји директан пут из 38 у 55, али не постоји директан пут

из 55 у 38 ).

Ако у овом графу

пођемо од чвора 58 означавамо

га, затим 52, 47, 48 и 24

стављамо на ред и означавамо.

Када будемо приступили чвору

52, у ред додајемо и

означавамо 35, 17 и 10, док 24

не додајемо јер је он већ

обиђен (заправо он још обиђен,

али се налази у реду тако да ће

сигурно бити обиђен). Обиђен

заправо означава да је чвор

убачен у ред из кога ће пре или

касније бити узет.

Ако претражујемо један

повезан део графа тада је из

почетног чвора могуће доћи до

било ког другог чвора директно или преко низа других чворова. Нека је до неког

чвора потребно проћи кроз k чворова (нпр. У претходном случају до 58 не треба

проћи ни кроз један чвор па овде k има вредност 0, за 52, 24, 47,48 k има вредност

1, за 16, 32 и 38 k има вредност 7). Алгоритмом претраге у ширину ћемо најпре

проћи кроз све оне чворове који су од почетног удаљени за k. После њиховог

обиласка пролазимо кроз чворове до којих долази преко k+1 чворова итд. На овај

начин рецимо можемо пронаћи који су чворови са својством да је од почетног

чвора до њих потребно проћи кроз k чворова. Уколико имамо густ граф који има

веома много веза (чест пример је матрица где је са једног поља могуће прећи на

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

минималног растојања ( најкраћег пута ) између нека два чвора (за ова два

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

10

Слика 8

Page 12: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Налажење најкраћег пута

Флојдов алгоритам

Потебно је наћи најкраће растојање између два чвора у графу. У сваком

кораку испитујемо да ли је пут преко међучвора k краћи од већ нађеног пута

између чворова i и j. Почетна директна растојања измећу чворова су учитана у

матрици veza. Вредност поља матрице ће бити -1 уколико та два чвора нису

повезана. Имплементација је преко троструке for петље ( иначе врло неефикасно

и временски и меморијски ).

Дејкстрин алгоритам

Ово је алгоритам који налази најкраћи пут између два чвора под условом

да су вредности тежина грана између чворова позитивни бројеви. Ово је један

грамзиви алгоритам.

Он ради следеће: наћи ће најкраћии пут од почетног чвора до сваког

другог? Зар ово није беспотребно пошто се тражи најкраћи пут између два чвора?

Ко мисли да је беспотребно нека смисли бољи и бржи алгоритам од овог. Дакле,

како ради алгоритам?

Кроз сваки чвор пролазимо тачно једном. Када искористимо један чвор

уврстићемо га у скуп и ажурираћемо растојања до свих осталих чворова који нису

11

Page 13: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

у скупу (и до којих наравно постоји веза са неким од тренутно укључених

елемената скупа ). Следећи чвор који ћемо укључити у скуп изабраћемо из низа

најкраћих растојања од првог чвора и то најмању вредност. Ово је оптимално

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

једном тренутку изаберемо најкраће растојање до једног од неукључених чворова,

следи да су растојања од осталих чворова до почетног већа од изабраног

растојања. Када се један чвор укључи у скуп, то значи да је пронађено растојање

до њега. Ако не би било тако, следи да би постојао пут преко неког од осталих

неукључених чворова до изабраног чвора. Ово је контрадикција, пошто су

вредности веза ненегативне. Пролажењем кроз још неке неукључене чворове

укупан пут ће се само увећати, а како је он већ био већи од вредности најближег

пута, увиђамо исправност овог грамзивог алгоритама. Уколико желимо да

програм оптимизујемо још више, потребно је уредити да се процедура завршава

чим се завршни чвор укључи у скуп. Ово треба урадити помоћу while петље,

никако наредбама exit, break, goto. Edsger Wybe Dijkstra ( 1930-2002 ) , први који је

овај алгоритам објавио иако је био одавно познат , био је велики противник goto

наредбе. И данас се у озбиљном програмирању ове наредбе готово не користе

уопште, захваљујући њему и његовом доказу да је структурно програмирање

боље.

процедура дејкстра

n-2 интерације

нађи најмање растојање до неког од чворова ван скупа

укључи га у скуп коришћених

ажурирај растојања

12

Page 14: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

13

Page 15: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Први редови у табелама су из

иницијализације.

У првом кораку процедуре

налазимо да најмањи пут до 5 што

значи да је до њега немогуће стићи

осим директно из 7. А видимо да је

пут до чворова 2 и 6 бољи од

претходног ( до 2 га није ни било, а

до 6 је боље ићи 7-5-6 него 7-6 ).

Следећи најкраћи пут је до 6, што

значи да до 6 није могуће стићи

краћим путем преко било којих

других чворова, од оног већ до сад

израчинатог ( преко 5 ). А увидимо

и да је краће растојање од 6 до 2, од

петходно израчунатог пута.

Следећи чвор који ћемо посетити је

2 итд.

Реконструишимо пут до 4.

Као што видимо put[4]=2 што значи да се у 4 најбрже стиже из 2. А у 2 се најбрже

стиже из put[2]=6 тј. чвора 6. До 6 се најбрже стиже из put[6]=5 , а до 5 из put[5]=7

тј. почетног чвора чиме је реконструкција пута завршена. Заиста, у 4 се најбрже

стиже 7-5-6-2-4. И увиђамо исправност Дејкстриниг алгоритма.

14

Слика 9

Page 16: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

15

Page 17: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Минимално стабло разапињања

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

настати избацивањем неких грана, има најмању вредност суме вредности свих

грана од којих се састоји. Оно такође мора да задовољи услов да су сви чворови

повезани (директно или индиректно ). За овај проблем се користи Примов

алгоритам. Он галси: најпре узмимо један чвор и назовимо га почетни. Невежно је

који бирамо јер нам алгоритам то дозвољава. Почетни чвор се често означи и као

први, али овде ћемо радити општију варијанту.Њега ћемо означити и уврстити га

у скуп. У скупу се налазе посећени чворови. Сваки чвор ће бити посећен тачно

једном. Принцип је следећи: у сваком кораку бирамо најкраћу везу неког од

чворова који припадају скупу, до неког ван скупа. Када нађемо ту везу, чвор до

кога је веза водила убацујемо у скуп.

Како сваки пут не бисмо пролазили кроз све везе свих чворова у скупу,

радићемо следеће: кад год убацимо неки чвор у скуп, проћићемо само кроз његове

везе. Уколико је нека краћа од оних већ претходно израчунатих, она ће постати

најкраћа веза до тог чвора. Најкраће везе до неког од чворова чувамо у низу

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

од чворева ( до којих постоји веза ). Убацивањем следећег чвора у скуп,

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

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

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

чвор. Он нам означава од ког чвора потиче та најмања вредност везе. Ради

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

најмањи буде била -1 то ће значити да је он у скупу.

- постави најближи на бесконачно велику вредност;

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

(додај га у скуп ), ажурирај низ најмањи

16

Page 18: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

процедура прим;

n-1 интерација :

- нађи најмању везу од коришћеног чвора до некоришћеног чвора.

тај чвор означи.

ажурирај низ најмањи -

17

Page 19: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Важно је да овај алгоритам може да ради и за негативне вредности веза,

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

константу и проверити да ли постоји веза између та два чвора или нема. Овде је

одрађена ситуација за позитивне везе па уколико нема везе између два чвора

вредност у матрици биће -1.

Кренућемо рецимо од чвора 6

(слика 10). Кораке можемо

посматрати у табели. Први ред је из

иницијализације, а затим у наредних

6 редова су кораци процедуре.

Маркирани су тренуци у којима је

дошло до проналажења гране из

минималног стабла разапињања.

Нпр. у првој интерацији се налази да

је најближа неукључена грана према

чвору 2, а она води из чвора 6.

Једина промена је да је грана 2-5 једина која задовољава услов да је један чвор у

скупу, а други није и да је та грана најкраћа грана од свих у скупу, до баш тог

чвора ван скупа (пре тога таква грана није ни постојала, па је ова најбоља ).

Ззатим се бирају гране 6-3 и 6-2, затим 5-2, па 5-1 и 5-7. Минимално стабло

разапињања можемо видети на слици 11.

18

Слика 10

Слика 11

Page 20: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Закључак

Стигли смо до закључка. У претходном су биле представљене само неке

основне идеје и начин рада са неким графовима. Циљ рада је било упознавање са

најједноставнијим имплементацијама основних алгоритама за рад на графовима.

За сваки алгоритам постоји опис начина рада алгоритма, псеудокод , код у

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

посматрање понашања процедура које представљају дати алгоритам. Једина

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

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

Дејкстрин алгоритам најбрже ради са Фибоначијевим хипом тј. специјалним

хипом који најбоље одговара алгоритму; Дејкстра са бинарним хипом би радио

мало спорије ( бинарни хип је у неким стварима далеко бржи од Фибоначијевог

али у Дејкстрином алгоритму се користе баш оне ствари у којима је Фибоначијев

хип бржи ) ; још спорије би радио наш алгоритам само када би граф представили

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

нпр. Флојдовог алгоритма ).

На крају ово су смо основне идеје, за нешто озбиљније потражте

нека од издања наведена у литератури која следи.

19

Page 21: Увод - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mm10030/tekst/Analiza i implementa…  · Web viewУ писању документа коришћени су програми Microsoft

Литература:

[1] Ђ. Паунић, Структуре података и алгоритми, Универзитет у Новом Саду,

Нови Сад 1997.

[2] М.Живковић, Алгоритми, Математички факултет, Београд 2000.

[3] Knuth, The art of computer Programming, Adison Wesley 1997.

[4] Жељко врба, Мирко Булаја, Структуре података и алгоритми, Загреб 2005

Аутор овог документа је Петар Аврамовић.

Слободно га можете читати, размењивати, копирати, штампати али само као цео документ …. у циљу сазнавања нечег новог или подсећања нечег што сте заборавили.

Немојте користити делове овог документа (текст, слике) или цео документ у комерцијалне сврхе ( пишите своје документе и цртајте своје слике сами ).

У писању документа коришћени су програми Microsoft Word 2003, Foxit PDF creator ( ако читате PDF датотеку ), AutoCAD 2006, Corel Draw 11.

текст куцао Пера слике цртао Пера

20