1 / 14

9. Grafovi , heš-tabele , slo ž enost algorit a ma 9.1. Predstavljanje grafova

1. 2. 3. 4. 2. 4. 1. 1. 3. 2. 2. 1. 3. 4. 9. Grafovi , heš-tabele , slo ž enost algorit a ma 9.1. Predstavljanje grafova Jedan od na čina za predstavljanje grafova je da se koriste dve vrste povezanih listi, kao što se vidi na sledećoj slici.

rupert
Download Presentation

9. Grafovi , heš-tabele , slo ž enost algorit a ma 9.1. Predstavljanje grafova

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 2 3 4 2 4 1 1 3 2 2 1 3 4 9. Grafovi, heš-tabele, složenost algoritama 9.1. Predstavljanje grafova Jedan od načina za predstavljanje grafova je da se koriste dve vrste povezanih listi, kao što se vidi na sledećoj slici.

  2. Postavlja se pitanje kako u programskom jeyiku C opisati jednu ovakvu strukturu podataka. Jedan od načuna bi bio sledeći: • typedef struct cvor{ • intbroj;Pomoću ove liste opisan je • struct grana *veza;niz čvoova sa odgovarjućim • struct cvor *sledeci;vezama. • }ListaCvor; • typedef struct grana{ • int naziv;Pomoću ove liste opisane • struct grana *veza;su grane. • }ListaGrana; Zadatak: Odrediti maksimalni broj grana koje polaze iz jednog čvora grafa i jedan takavčvor. Graf.cpp

  3. 2 4 1 1 3 2 4 2 3 1 2 1 3 4 9.1.1. II način predtsvljanje pomoću listi Graf može biti predstavljen još jednostavnije. Naime, nije neophodno da čvorovi grafa budu povezani preko liste, već svaki čvor (sa granama koje polaze iz njega) može da se predstavi jednom listom. Prethodno navedeni graf može se opisati i sledećom strukturom.

  4. 2 1 3 4 9.1.2. Predstavljanje pomoću matrica Grafovi se često predstavljaju pomoću matrica. Prilikom predstvljanja grafova pomoću matrica koriste se 2 vrste matrica: matrica spajanja (često se zove matrica susedstva) i matrica veza. Element aijkod matrice spajanja ima vrednost 1 ako postoji usmerena grana od čvora do čvora j, u sprornom 0. Element bij matrice spajanja ima vrednost 1 ako se iz čvora i može doći u čvor j (kretanjem po usmerenim granama), u suprotnom ima vrednost 0. (i,j=1,...,n), n – broj čvorova. Matrica susedstva 1 2 3 4 1 0 1 0 0 2 1 0 0 1 3 1 1 0 0 4 0 0 1 0

  5. 9.2. Haš-tabele (Hash-tables) Hash - ragu (mešano meso), fig. zbrkano Hash-tabele – zbrkane tabele Haš-tabela je struktura podataka koja se sastoji iz numeričke vrednosti (heš-koda) i podatka. Na primer, podatak može biti ceo broj, a kod njgeova poslednja cifra heš-kod vrednost heš-kod podatak kod podatak 1 71 kod podatak primer: 2 62 ..................... 3 73 kod podatak ..........

  6. Podatak se lako smešta u tabelu na osnovu haš-koda, ali isto tako se lako i nalazi. Međutim, šta se dešava ako u prethodnu tabelu želimo da smestimo podatak 32? Sa kodom 2 već postoji podatak (62). Sada nastaje kolizija u heš-tabeli i postoje razni načini da se ovaj problem razreši. Haš-tabela se najčešće organizuje skup kontejnera koji imaju pridružen jedinstveni ključ. Broj kontejnera u heš-tabeli je fiksiran i svakom je dodeljena jedinstvena celobrojna vrednost iz ranga mogućih heš-vrednosti (heš-kodova). Kada jedan objekat treba smestiti u haš-tabelu, izračunava se haš-kod na osnovu te vrednosti i vrši se smeštanje objekta u odgovarajući kontejner. U heš-tabeli svaki smešteni objekat ima jedinstveni ključ na osnovu kojeg je smešten u tabeli i na osnovu kojeg se pronalazi

  7. Heš-tabela predstavlja uopštenje niza (na drugačiji način u poređenju sa vektorima!). Ključ u heš-tabeli, na naki način, odgovara indeksu niza, ali način smeštanja podataka je nešto drugačiji. Na osnovu ključa, izračunava se heš-kod i pomoću njega se određuje kontejner u koji se smešta podatak (objekat). Kontejner je sekvencijalna lista (može biti niz) u koji se smešta jedan ili više objekata. Taj kontejner se naziva bucket (kabal, kofa) Heš-tabela heš-kod bucket (lista objekata) kod1 ob11, …, ob1k1 kod2 ob21, …, ob2k2 …………………………………………… kodn obn1, …, obkn

  8. Primer. Neka imamo string-podatke (objekte) sastavljene iz 2 slova (od ‘a’ do ‘z’) , koje treba da smestimo u heš-tabelu. (Podaci su oblika: “aa”, “ab”, “ba”, “bc”, …) Ako sam podatak tretiramo kao ključ, onda taj ključ treba da prevedemo u numeričku vrednost, tzv. heš-kod, na osnovu kojeg smeštamo podatak u tabelu. Za te svrhe moramo da definišemo neki metod (algoritam) prevođenja ključa u heš-kod. • Taj algoritam treba da ispunjava 2 zahteva: • isti ključ uvek generiše isti heš-kod, • ključevi treba ravnomerno da budu raspoređeni po heš-kodovima.

  9. U našem primeru heš-kod neka bude ASCII-vrednost prvog slova ključa umanjena za ASCII-vrednost slova ‘a’. Dakle, heš-kod je vrednost između 0 i 25. Ako imao 7 podataka: aa,ab,ac, ba, bb, bc, ca, heš-tabela bi imala 3 haš-vrednosti i svakoj od njih pridruženu listu ključeva: Haš-tabela heš-vrednost lista ključeva 0 aa, ab, ac 1 ba, bb, bc 2 ca Ako treba ispitati da li je podatak bc u heš-tabeli, prvo se izračuna njegov heš-kod, a zatim se linearno pretraži lista klučeva.

  10. Svrha haš-tabele je efikasnije smeštanje i nalaženje podataka. Ako bi, u našem primeru, svi podaci počinjali slovima ‘a’ i ‘b’(prve 2 liste bi bile popunjene, a ostale 24 prazne), pretraživanje bi se svelo na linearno i heš-tabela bi bila neefikasna. U našu tabelu se može smestiti maksimalno 676 podataka. Ako bi ključ bio proširen na 3 slova, broj podataka bi porastao na 17576, tj. u njenoj listi bi bilo maksimalno 676 ključeva. Heš-tabela postaje neefikasna i treba pronaći bolji algoritam za organizaciju haš-tabele.

  11. 1 2 3 4 5 11 17 32 21 35 31 43 52 58 9.2.1. Predstavljanje Hash-tabele u C-u Jedna od ideja je da se iskoristi struktura podataka kao na slici. To znači da svaki kontejner treba predstaviti u obliku povezane liste, a ključeve možemo smestiti u nekakav niz.

  12. 9.2.2. Heš-funkcija za stringovni ključ Ako heš tabela ima M kontejnera i ako je ključ nekakav string, ond amožemo kreirati heš-funkciju na sledeći način: int hash (char *v, int M) { int h=0, a=127; for(; *v != ‘\0’; v++) h= (a*h + *v) % M; return h; }

  13. 9.3. Složenost algoritama • - Opšti zadatka I – Individualni zadatak zadatka  Algoritmom A rešava se se zadatak  ako se rešava svaki individualni zadatak zadatka . Obim (razmera) nekog individualnog zadatka I je broj potrebnih ulaznih podataka za opis zadatka I. t(n) – vreme složenosti algoritma A, tj. to je funkcija kojoj se dodeljuje maksimim vremena za rešavanje svih individualnih zadataka dužine n. Često nas ne interseje sam funkcija, već njeno ograničenje, tj. t(n) ~ f(n) = O(g(n)).

  14. Ukoliko je g(n) = Pk (n), tj polinom, onda za algoritam kažemo da ima polinomsku složenost Ukoliko je g(n) = an, za a>1, ond akažemo da ima eksponencijalnu složenost. Ako algoritam ima eksponencijalnu složenost, onda za zadatak  kažemo d aje teško rešiv na (savremenim) računarima.

More Related