Transcript

UNIVERZITE U BIHAU

TEHNIKI FAKLULTET BIHA

ODSJEK: ElektrotehnikaSMJER: Informatika

ZADAA IZ PREDMETA

INTELIGENTNI SISTEMIZADAA br. 1ZADATAK : DSF ALGORITMIPredmetni nastavnik : prof.dr. Muji Edin Student : Drakuli UnaPredmetni asistent : Toroman Amel Broj indexa : 681Akademska godina : 2014. / 2015.

SPECIFIKACIJA ZADATKA

Izvrsiti pretragu po dubini (DFS algoritam) za algoritam sa slike.Pri ispisu uzeti da je poetni vor 8.

RJEENJE

a) INTERATIVNA PRETRAGA

U iterativnoj pretrazi, vorovi se stavljaju u stek.Da ne bi dolo do beskonane petlje, potrebno je da se uva informacija o vorovima koji su ve posjeeni.

Znai, prvo odredimo dubine, kao to je prikazano na slici 1.

Slika 1.

Dubine su ovako odredene, jer je u zadatku zadano da je korijen, odnosno pocetni korijen vor 8.Sada posmatramo dubinu 0, gledamo sliku 2.Zatim odredimo smjer, ovdje je naznaen smjer prema voru 6, te onda briemo vor 7, njemu se vraamo kada obiemo sve vorove sa odabrane strane.

Slika 2.Sada posmatramo dubinu 1, slika 3.

Slika 3.

Idemo od korijena koji nam je zadan, cvor 8, prema odabranom smjeru, cvor 6, i trazimo njegove potomke, to je cvor 1.Posto cvor 1 nema potomaka ,zavrsili smo sa ovom dubinom, te idemo na sljedecu.

Sada posmatramo dubinu 2 , slika 4.

Slika 4.

Ako malo pratimo naznacene strelice, mozemo pratiti tok.Znaci, kad smo zavrsili na cvoru 1 koji nema potomaka, vracamo se 'nazad' , posto su to vec posjeceni cvorovi oni se ne zapisuju.Kada se vratimo na cvor 6, vidimo da postoji neposjeceni potomak cvor 3 koji takodjer ima potomak cvor 5, koji poslije sebe nema potomaka.

Sada posmatramo dubinu 3, slika 5.

Slika 5.

Kada smo posjetili cvor 5, koji nije imao potomaka, vracamo se 'nazad' do onog cvora koji nije posjecen.Ako pratimo naznaceni smjer, vidimo da se krece ovim smjerom: 5-3-6-8-7 poslije kojeg nailazimo na cvor koji nije posjecen, cvor 7. Onda pratimo njegove potomke, cvor 4 koji ima potomak 2.Dalje nema potomaka, te se vracamo 'nazad' do neposjecenog cvora, smjerom : 2-4-7 te do njegovog potomka cvor 9 kojeg zapisujemo jer nije prethodno posjecen.

Kada gledamo ispis u steku, dobijemo sljedee :

8-6-1-3-5-7-4-2-9b)REKURZIVNA PRETRAGA

Poetak algoritma je korijen stabla koji je nama zadan u zadatku da bude cvor 8, zatim se pretrazuju du svih grana koliko god je to mogue, prije povratka u korijen.

Iz nekog nivoa rekurzije se izlazi kada naiemo na vor u kojem su svi susjedi ve posjeeni.Znai, pretrazujemo od polaznog vora, zatim njegove potomke i sve potomke potomaka, dok svi ne budu posjeeni.Nakon toga se vraamo u polazni svog i isto to dalje radimo.Prikaz je na slici 6.

Slika 6.OPIS KRETANJA :

Korijen je cvor 8, njegovi potomci su cvor7 i cvor6. Uzmimo smjer prema cvoru 6. Cvor 6 ima potomke 1 i 3, idemo prema cvoru 1.Cvor 1 nema potomke, te se vracamo nazad na cvor 6 koji je vec posjecen pa se ne zapisuje.Cvor 6 ima potomak cvor3, koji ima potomak cvor 5.Nakon toga vidimo da cvor5 nema potomaka, pa se vracamo na cvor3-cvor6-cvor8 koji su posjeceni pa ih ne zapisujemo.Cvor 8 ima potomke dalje 7 i 9.Uzmimo smjer prema cvoru 7, koji ima dalje potomke cvor 4 koji ima potomak 2.Cvor 2 nema potomaka, pa se vracamo kroz vec posjecene cvorove : cvor2-cvor4-cvor7 koji ima potomak cvor 9 koji nema potomaka.Sa ovim smo pretrazili cijelo stablo, te dobijemo sljedeci ispis:8-6-1-3-5-7-4-2-9JAVA KOD:a) ITERATIVNA PRETRAGA

package DFSalgoritmi;

import java.util.ArrayList;

import java.util.Stack;

public class DFSIterativni {

public static void dfs_iterative (ArrayList adj, int s){

boolean[] visited= new boolean[adj.size()];

Stack st= new Stack();

st.push(s);

while(!st.isEmpty()){

int v=st.pop();

if(!visited[v]){

visited[v]=true;

System.out.print(v+" ");

/* pomocni stek nam sluzi da posjecuje susjede u redosljedu izvodjenja

u susjednoj listi alternativno : ponavlja kroz ArrayList u

obrnutom redosljedu ali to je samo uzimanje istog izlaza kao

rekurzivni DFS inace, to ne bi bilo potrebno

*/

Stack auxStack= new Stack();

for(int w: adj.get(v)){

if(!visited[w]){

auxStack.push(w);

}

}

while(!auxStack.isEmpty()){

st.push(auxStack.pop());

}

}

}

System.out.println();

}

// -------------------------------------------------------------------------

//Testiranje i implementacija

public static void main(String[] args) {

//Kreiranje pomocne liste

ArrayList adjLists= new ArrayList();

final int n=9;

//Dodavanje prazne pomocne liste za svaki cvor

for(int v=0;v


Top Related