1 / 40

Algoritmi i strukture podataka

Algoritmi i strukture podataka. Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Dr. sc. Ivica Botički, dipl. ing. Mr. sc. Boris Milašinović.

Télécharger la présentation

Algoritmi i strukture podataka

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. Algoritmi i strukture podataka Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Dr. sc. Ivica Botički, dipl. ing. Mr. sc. Boris Milašinović Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

  2. Creative Commons • slobodno smijete: • dijeliti — umnožavati, distribuirati i javnosti priopćavati djelo • remiksirati — prerađivati djelo • pod sljedećim uvjetima: • imenovanje. Morate priznati i označiti autorstvo djela na način kako je specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku). • nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. • dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj. U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava. Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava. Tekst licencije preuzet je s http://creativecommons.org/. Algoritmi i strukture podataka, FER, 2008/09.

  3. Tehnike adresiranja Osnovni pojmovi Postupci pretraživanja Raspršeno adresiranje

  4. Osnovni pojmovi • poznavajući ključ nekog zapisa postavlja se problem pronalaženja tog zapisa • primarni ključ • jednoznačno određuje neki zapis • npr. MaticniBrojStudenta • ulančani (kompozitni) ključevi • potrebni za jednoznačno određivanje nekih vrsta zapisa • npr. MaticniBrojStudenta & SifraPredmeta & DatumIspita jednoznačno određuju zapis o održanom ispitu • sekundarni ključ • ne mora jednoznačno određivati zapis, ali ukazuje na neki atribut • npr. GodinaStudija u zapisu s podacima o predmetu) Algoritmi i strukture podataka, FER, 2008/09.

  5. Slijedno pretraživanje • pregledavanje datoteke zapis po zapis - najprimitivniji način • koristi se kod slijednih datoteka kod kojih se ionako svi zapisi moraju čitati • drugi nazivi: linearno, serijsko, sekvencijalno pretraživanje • zapisi ne moraju biti sortirani • prosječno se čita n/2 zapisa • složenost: O(n) • najbolji slučaj: O(1) • najlošiji slučaj: O(n) • Ponavljaj za sve zapise • Ako je trenutni zapis jednak traženom • Zapis je pronađen • Iskoči iz petlje  IspisiTrazi Algoritmi i strukture podataka, FER, 2008/09.

  6. Slijedno pretraživanje sortiranih zapisa • Kako se može popraviti serijsko pretraživanje? • sortirati zapise prema nekom ključu! • Kolike su složenosti u najboljem, najgorem i prosječnom slučaju pri pretraživanju sortiranih zapisa? • Sortiraj zapise • Ponavljaj za sve zapise • Ako je trenutni zapis jednak traženom • Zapis je pronađen • Iskoči iz petlje • Ako je trenutni zapis veći od traženog • Zapis ne postoji • Iskoči iz petlje Algoritmi i strukture podataka, FER, 2008/09.

  7. Pitanja i problemi • Kolega vam kaže da je napisao algoritam za slijedno pretraživanje za kojeg vrijedi O(log n). Hoćete li mu čestitati ili mu reći da nema pojma?  • U najboljem slučaju, zapis ćemo pronaći uz najmanji broj usporedbi. Gdje se taj zapis nalazi? • Gdje će se nalaziti zapis kojeg ćemo pronaći uz najveći broj usporedbi? Algoritmi i strukture podataka, FER, 2008/09.

  8. Čitanje po blokovima • kod direktnih datoteka (svi zapisi su jednake duljine!) sortiranih po primarnom ključu nije neophodno pregledavati sve zapise • može se pregledavati npr. svaki stoti zapis • kad se ustanovi položaj zapisa s traženim ključem, pripadni blok se slijedno pretraži • Kako odrediti optimalnu veličinu bloka? Algoritmi i strukture podataka, FER, 2008/09.

  9. Primjer - mjesta u Hrvatskoj • tražimo Malinsku u popisu od F=6935 mjesta; na svakoj stranici je navedeno B=60 mjesta • ima F / B vodećih zapisa (stranica) - F / B = 116 116 115 1 2 Živković Kosa Živogošće Žlebec Gorički . Žutnica Žužići Žužići Zvijerci Zvjerinac Zvoneća . . . Žitomir Živaja Živike 60 61 Ada Adamovec Adžamovci . . . Bair Bajagić Bajčići Bajići Bajkini Bakar-dio . . . Barilović Barkovići Barlabaševec Mali Gradac Mali Grđevac Mali Iž . Malinska . Manja Vas Manjadvorci Manjerovići Maovice Maovice Maračići . . . Martin Martina Martinac  CitanjePoBlokovima Algoritmi i strukture podataka, FER, 2008/09.

  10. Optimalna veličina bloka • u slučaju kad ima F stavaka, a veličina bloka je B,ima F / B vodećih zapisa blokova • očekuje se da je prilikom pretraživanja unutar bloka potrebno obaviti čitanje polovice postojećih vodećih zapisa blokova (slijedno!) • traženi vodeći zapis će biti pronađen nakon (F / B) / 2 = F / 2 B pročitanih zapisa • unutar ustanovljenog bloka ima B zapisa pa je za očekivati da će se traženi zapis naći nakon prosječno B / 2 čitanja unutar tog bloka (slijedno!) • ukupni očekivani broj čitanja jest F / (2 B) + B / 2 • deriviranjem po B i izjednačenjem derivacije s nulom dobije se optimalna veličina bloka: B = √F • kolika je optimalna veličina bloka za popis mjesta u Hrvatskoj? Algoritmi i strukture podataka, FER, 2008/09.

  11. Binarno pretraživanje • binarno pretraživanje započinje na polovici datoteke/polja i nastavlja se stalnim raspolavljanjem intervala u kojem bi se mogao naći traženi zapis • preduvjet: podaci sortirani! • prosječni broj pretraživanja je log2 n -1. • postupak je neprikladan za diskovne memorije s izravnim pristupom zbog dugotrajnog pozicioniranja glava. Preporuča se za pretraživanje u radnoj memoriji. • koristi se činjenica da je polje sortirano i u svakom koraku se područje pretraživanja smanjuje na pola • složenost je O(log2n) broj elemenata = n traženi element broj pretraživanja = log2n Algoritmi i strukture podataka, FER, 2008/09.

  12. Primjer binarnog pretraživanja • Tražimo broj 25 2 5 6 8 9 12 15 21 23 25 31 39 Algoritmi i strukture podataka, FER, 2008/09.

  13. Algoritam za binarno pretraživanje • donja_granica = 0 • gornja_granica = ukupan_broj_elemenata • Ponavljaj • Izračunaj središnji element • Ako je zapis u sredini jednak traženom • Zapis je pronađen • Iskoči iz petlje • Ako je donja granica veća ili jednaka gornjoj • Zapis nije pronađen • Iskoči iz petlje • Ako je zapis u sredini manji od traženog • Postavi donju granicu na trenutni zapis + 1 • Ako je zapis u srediniveći od traženog • Postavi gornju granicu na trenutni zapis - 1 •  BinarnoPretrazivanje Algoritmi i strukture podataka, FER, 2008/09.

  14. Problemi i zadaci • Koja su vremena izvođenja u najboljem, najlošijem i prosječnom slučaju kod binarnog pretraživanja n zapisa? • Za slučaj popisa mjesta u Hrvatskoj (6935 mjesta), koliko najviše koraka treba napraviti kako bi se pronašlo traženo mjesto? • Hoće li binarno pretraživanje uvijek biti brže od slijednog, čak i na velikom broju podataka? Algoritmi i strukture podataka, FER, 2008/09.

  15. Problemi i zadaci • Pretpostavite da se n podataka u nekom skupu može sortirati u vremenu O(n log2 n) . Podaci su nesortirani. Trebate obaviti n pretraživanja u tom skupu podataka. Što je smislenije: • koristiti slijedno pretraživanje? • sortirati podatke i koristiti binarno pretraživanje? • Rješenje: ima više smisla sortirati i binarno pretraživati! • n slijednih pretraživanja: n * O(n) = O(n2) • sort + binarno: O(n log2 n) + n * O (log2 n) = O(n log2 n) O(n log2 n) < O(n2) Algoritmi i strukture podataka, FER, 2008/09.

  16. Indeksno-slijedne datoteke • svaki zapis ima ključ prema kojem ga je moguće jednoznačno identificirati • ako je datoteka sortirana po ključu, prikladno je formirati tablicu za pretraživanje • ulazni podatak za tablicu je ključ traženog zapisa • izlazni rezultat je informacija koja pobliže locira traženi zapis • takva tablica naziva se indeks • indeks ne mora pokazivati na svaki zapis nego samo na blok • smanjuje se veličina indeksa • kod velikih datoteka postoje indeksi na više razina Algoritmi i strukture podataka, FER, 2008/09.

  17. Indeksno-slijedne datoteke • ubacivanje i brisanje • kod tradicionalne slijedne datoteke (magnetska traka) ubacivanje novih zapisa radi se tako da se cijela datoteka prepiše uz dodavanje novih zapisa • kod izravnih (direktnih) datoteka brisanje zapisa obavlja se logički, tj. upiše se značka da su logički izbrisani • nakon određenog broja izmjena sadržaja datoteke, ona se mora reorganizirati • slijedno se prema vrijednosti ključa upisuju podaci i ponovno se indeksira datoteka (tzv. održavanje datoteke) Algoritmi i strukture podataka, FER, 2008/09.

  18. Postupci pretraživanja • indeksne neslijedne datoteke • ako se želi pretraživanje po više ključeva ili kad se često dodaju i brišu zapisi, nemoguće je, odnosno, teško ostvariti da zapisi budu sortirani • tada indeks mora sadržavati adresu, relativnu ili apsolutnu, svakog pojedinog zapisa • ključ sadrži adresu • najjednostavniji slučaj je kad se formira ključ tako da neki njegov dio sadrži adresu zapisa • npr. kod obrade klasifikacijskog ispita broj prijave je ključ, a ujedno to je i redni broj zapisa u direktnoj datoteci • često ovako jednostavan postupak nije moguć jer se sustav šifriranja ne može prilagoditi nekom pojedinačnom programu Algoritmi i strukture podataka, FER, 2008/09.

  19. Ideja raspršenog adresiranja • Problem: tvrtka ima 100 tisuća zaposlenih, svaki ima jedinstveni matični broj koji se generira iz intervala [0, 1 000 000]. Zapise treba brzo pohraniti i brzo im pristupiti. Kako organizirati datoteku? • direktna datoteka gdje je ključ jednak matičnom broju? • 1 000 000 x 4 okteta ~ 4MB, 90% je neiskorišteno! • moguće je propisati postupke za transformaciju ključa u adresu, ili, što je još bolje, u neki redni broj • pod tim rednim brojem nalazi se zapisan položaj zapisa • ova modifikacija poboljšava fleksibilnost • gornji primjer pokazuje da dio prostora za zapise ostaje neiskorišten • raspršeno adresiranje (hashing) Algoritmi i strukture podataka, FER, 2008/09.

  20. Raspršeno adresiranje • neka nam je na raspolaganju M pretinaca • iz vrijednosti ključa pomoću hash-funkcije izračunava se pseudo-slučajni broj iz intervala od 0 do M-1 • taj broj je adresa grupe podataka (pretinca) koji svi daju isti pseudo-slučajni broj • kolizijom nazivamo slučaj kad se dva različita ključa transformiraju u istu adresu • ako se neki pretinac popuni, može se u njega upisati pokazivač na preljevno područje ili se prelazi na susjedni pretinac - preljev • kod primjene raspršenog adresiranja variranju su podložni sljedeći elementi: • kapacitet pretinca • gustoća pakiranja Algoritmi i strukture podataka, FER, 2008/09.

  21. Primjer 0 1 2 3 • imena pohraniti u hash-tablicu raspršenim adresiranjem • hash-fukcija - suma ASCII kodova slova % veličina tablice Vanja Matija Andrea Doris ? Saša Alex Sandi Perica Iva Algoritmi i strukture podataka, FER, 2008/09.

  22. Kapacitet pretinca • transformacijom ključa nastaje pseudo-slučajni broj koji daje adresu pretinca • ako je kapacitet pretinca jednak 1, čest je slučaj preljeva • što je veći kapacitet pretinca, preljev je manje vjerojatan, ali je čitanje pojedinog pretinca dulje i raste potreba za slijednim pretraživanjem unutar pretinca • povoljno je veličinu pretinca uskladiti s fizičkom veličinom zapisa na vanjskoj memoriji (blok) Algoritmi i strukture podataka, FER, 2008/09.

  23. Gustoća pakiranja • nakon što je odabrana veličina pretinca, može se odabrati gustoća pakiranja, tj. broj takvih pretinaca za pohranjivanje predviđenog broja zapisa • da bi se smanjio broj preljeva, izabire se veći kapacitet • gustoća pakiranja = broj zapisa / ukupni kapacitet • N = broj zapisa koje treba pohraniti • M = broj pretinaca • C = broj zapisa u jednom pretincu • gustoća pakiranja = N / (M *C) Algoritmi i strukture podataka, FER, 2008/09.

  24. Postupak s preljevom • korištenje primarnog područja • ako je neki pretinac popunjen, koristi se sljedeći itd. • iza zadnjega ciklički dolazi prvi • postupak je efikasan kod veličina pretinca iznad 10 • ulančavanje • pretinci su organizirani kao linearne liste Algoritmi i strukture podataka, FER, 2008/09.

  25. Statistika kod raspršenog adresiranja • Neka je M broj pretinaca, a N broj ulaznih podataka. Vjerojatnost da će u neki pretinac biti upućeno x zapisa ravna se po binomnoj razdiobi: • vjerojatnost da će biti Y preljeva: P(C + Y) • očekivani broj preljeva iz zadanog pretinca: • ukupni očekivani postotak preljeva: 100s M/N • prosječni broj zapisa koji će biti upisan u hash-tablicu prije nego dođe do kolizije je ~ 1.25 √M • prosječni broj ukupno upisanih zapisa prije nego što svaki pretinac sadrži bar 1 upisani zapis je M ln M Algoritmi i strukture podataka, FER, 2008/09.

  26. Transformacija ključa u adresu • općenito se ključ transformira u adresu pretinca u 3 koraka: • ako ključ nije numerički, treba ga transformirati u broj i to bez gubitka informacije • nad ključem se upotrijebi algoritam koji ga transformira, što je moguće ravnomjernije, u pseudo-slučajni broj reda veličine broja pretinaca • rezultat se množi s odgovarajućom konstantom  1 zbog transformacije u interval relativnih adresa koji je jednak broju pretinaca • relativne adrese se konvertiraju u apsolutne na konkretnoj fizičkoj jedinici i to je u pravilu zadatak sistemskih programa • idealna transformacija: vjerojatnost da 2 različita ključa u tablici veličine M daju istu adresu je 1/M Algoritmi i strukture podataka, FER, 2008/09.

  27. Karakteristike dobre transformacije • izlazna vrijednost ovisi isključivo o ulaznom podatku • kad bi ovisila i o nekoj drugoj varijabli, pri pretraživanju bi trebalo poznavati i tu varijablu • funkcija koristi sve ulazne podatke • kad ne bi koristila sve podatke, uz male varijacije ulaznih podataka bio bi preveliki broj istih izlaznih vrijednosti - narušava se razdioba • jednoliko raspoređuje izlazne vrijednosti • u suprotnom se smanjuje učinkovitost • za slične ulazne podatke daje vrlo različite izlazne vrijednosti • u realnosti su ulazni podaci često vrlo slični, želimo ih ravnomjerno raspodijeliti • koje od ovih uvjeta narušava naša hash-funkcija iz primjera? Algoritmi i strukture podataka, FER, 2008/09.

  28. Korištenje raspršenog adresiranja • kad je prikladno? • prevoditelji ga koriste za evidenciju deklariranih varijabli • za provjeru teksta (spelling checker) i rječnike • npr. u igrama za pohranu položaja igrača • za provjeru jednakosti • ako dva elementa daju različite hash vrijednosti, sigurno su različiti • kad postoji potreba za brzim, a čestim pretraživanjem • kad nije prikladno? • kad se podatke pretražuje po vrijednosti pojma koji nije ključ • kad se traži da podaci budu sortirani • npr. kad treba pronaći najmanji ključ Algoritmi i strukture podataka, FER, 2008/09.

  29. Primjer transformacije ključa u adresu • 6 znamenkasti ključ, 7000 pretinaca; ključ: 172148 • metoda: središnje znamenke kvadrata ključa • kvadrat ključa daje 12 znamenkasti broj. Koriste se 5. do 8. znamenka 1721482 = 029634933904 • središnje 4 znamenke treba transformirati u interval [0, 6999] • budući da pseudo-slučajni broj poprima vrijednosti iz intervala [0, 9999], a adrese pretinaca su iz intervala [0, 6999], faktor kojim ga se množi je 6999/9999  0.7 • adresa pretinca = 3493 * 0.7 = 2445 • rezultati odgovaraju onima za roulette Algoritmi i strukture podataka, FER, 2008/09.

  30. Metode transformacije ključa u adresu • korijen iz središnjih znamenki kvadrata ključa • za prethodni primjer nakon kvadriranja se izvadi korijen iz 8 središnjih znamenki, odbace se decimale da bi se dobio četveroznamenkasti broj: • sqrt(96349339) = 9815 • dijeljenje • ključ se dijeli s prim brojem približno jednakim broju pretinaca (npr. 6997) • ostatak dijeljenja je adresa pretinca • adresa pretinca = 172148 mod (6997) = 4220 • dobro se raspoređuju ključevi koji su u nizu • posmak znamenki i zbrajanje • npr. ključ = 17207359 • 1720 + 7359 = 9079 Algoritmi i strukture podataka, FER, 2008/09.

  31. Metode transformacije ključa u adresu • preklapanje • Preklapanje je slično posmaku, ali je prikladnije za dugačke ključeve • npr. ključ = 172407359 • 407 + 953 + 271 = 1631 • izmjena baze brojanja • broj se izračuna kao da ima drugu bazu brojanja B • npr. B = 11, ključ = 172148 • 1*115 + 7*114 + 2*113 + 1*112 + 4*111 + 8*110 = 266373 • odabere se potreban broj najmanje značajnih znamenki i transformira u raspon adresa: adresa pretinca = 6373 * 0.7 = 4461 • najbolji postupak se postiže simulacijom za konkretnu primjenu • dijeljenje je općenito najbolje Algoritmi i strukture podataka, FER, 2008/09.

  32. Određivanje parametara • primjer: • Na Fakultetu ima oko 350 studenata. Treba pohraniti njihov JMBG (13 znakova) i prezime (14 znakova), s tim da ih se može pronalaziti brzo po JMBG. • napomena: • JMBG se sastoji od 13 znamenki • zadnja znamenka je kontrolni broj i može se, ali i ne mora pohranjivati ako se zna pravilo po kojem je izračunata Algoritmi i strukture podataka, FER, 2008/09.

  33. Rješenje • jedan zapis sadrži 13+1 + 14+1 = 29 okteta • fizički blok na disku neka je veličine 512 okteta • veličina pretinca trebala bi biti manja ili jednaka tom iznosu • 512/29 = 17.655 • slijedi da će pretinac sadržavati podatke o 17 studenata i 19 okteta neiskorištenog prostora • predvidjet će se nešto veći kapacitet tablice kako bismo smanjili broj očekivanih preljeva, npr. za 30% • to znači da ima 350/17 *1.3 = 26 pretinaca • JMBG treba transformirati u adresu pretinca iz intervala [0, 25] • JMBG je vrlo dugačak pa bi došla u obzir tehnika preklapanja • postupci se mogu i kombinirati - nakon preklapanja obaviti dijeljenje • adresa će se računati dijeljenjem s prim brojem bliskim broju pretinaca, npr. 23 Algoritmi i strukture podataka, FER, 2008/09.

  34. Upisivanje zapisa u pretince tablice raspršenih adresa C JMBG Prezime 0 1 HASH M M-1 BLOK na disku Algoritmi i strukture podataka, FER, 2008/09.

  35. Primjeri transformacije ključa • JMBG = 150797433006x • 9743 • 7051 • 6003 • 22797 mod (23) = 4 • JMBG = 130797533008x • 9753 • 7031 • 8003 • 24787 mod (23) = 16 • ako pretinac bude popunjen, prelazi se na susjedni pretinac, ciklički (bad neighbour policy) • JMBG = 140797533007x • 9753 • 7041 • 7003 • 23797 mod (23) = 15 • JMBG = 130797533007x • 9753 • 7031 • 7003 • 23787 mod (23) = 5 Algoritmi i strukture podataka, FER, 2008/09.

  36. Programsko rješenje Kreiraj na disku praznu tablicu Čitaj slijedno JMBG i prezime, dok ima podataka Ako je kontrolna znamenka nije ispravna "Neispravan JMBG" Inače Stavi oznaku da zapis nije upisan Izračunaj adresu pretinca Upamti izračunatu adresu kao početnu Ponavljaj Čitaj iz pretinca upisane zapise Ponavljaj za sve zapise iz pretinca Ako zapis nije prazan Ako je upisani JMBG identičan ulaznom "Zapis vec postoji" Stavi oznaku da je zapis upisan Skok iz petlje Inače Algoritmi i strukture podataka, FER, 2008/09.

  37. Programsko rješenje Upiši ulazni zapis Stavi oznaku da je zapis upisan Skok iz petlje Ako zapis nije upisan Povećaj adresu pretinca za 1 i izračunaj mod (broja pretinaca) Ako je dobivena adresa jednaka početnoj adresi Tablica je puna Dok ne bude zapis upisan ili tablica puna Kraj  Hash Algoritmi i strukture podataka, FER, 2008/09.

  38. Zadaci za vježbu • Napisati funkciju koja će u neformatiranoj datoteci artikli organiziranoj po načelu raspršenog adresiranja prebrojiti koliko ima upisanih zapisa o artiklima. Jedan zapis sadrži šifru (cijeli broj), naziv (50+1 znakova), količinu (cijeli broj) i cijenu (realni broj). Zapis je prazan ako je na mjestu šifre vrijednost nula. Veličina fizičkog bloka na disku je BLOK, a očekivani maksimalni broj zapisa je MAXZAP. Ovi su parametri upisani u parametri.h. • Napisati funkciju koja će u neformatiranoj datoteci organiziranoj po načelu raspršenog adresiranja odrediti gustoću pakiranja. Jedan zapis sadrži naziv (50+1 znakova), količinu (cijeli broj) i cijenu (realni broj). Zapis je prazan ako je na mjestu količine vrijednost nula. Veličina fizičkog bloka na disku je BLOK, što je definirano u parametri.h. Prototip funkcije je: float gustoca (const char *ime_datoteke); Algoritmi i strukture podataka, FER, 2008/09.

  39. Zadaci za vježbu • Napisati funkciju za upis šifre (cijeli broj) i naziva (20+1) u memorijski rezidentnu tablicu raspršenih adresa s 500 pretinaca. Pretinac sadrži jedan zapis. Ako je pretinac popunjen, prelazi se ciklički na susjedni. Ulazni argumenti su već izračunata adresa pretinca, šifra i naziv. Funkcija vraća vrijednost 1 ako je upis obavljen, 0 ako podatak već postoji, a -1 ako je tablica popunjena pa se podatak nije mogao upisati. • Napisati funkciju za pronalaženje šifre (cijeli broj) i naziva poduzeća (30+1) iz memorijski rezidentne tablice raspršenih adresa s 200 pretinaca. Pretinac sadrži jedan zapis. Ako je pretinac popunjen, a ne sadrži traženu vrijednost ključa, prelazi se ciklički na susjedni. Ulazni argumenti su već izračunata adresa pretinca i šifra. Izlazni argument je naziv poduzeća. Funkcija vraća vrijednost 1 ako je zapis pronađen, a 0 ako nije. Algoritmi i strukture podataka, FER, 2008/09.

  40. Zadaci za vježbu • Napisati funkciju za transformaciju ključa koji je telefonski broj od 7 znamenki u raspršene adrese. Tablica raspršenih adresa sadrži M pretinaca. Koristiti postupak dijeljenja. Prototip funkcije je: int adresa (int m, long telef); • Napisati funkciju za pražnjenje neformatirane datoteke artikli organizirane po načelu raspršenog adresiranja. Jedan zapis sadrži šifru (četveroznamenkasti cijeli broj), naziv (do 30 znakova) i cijenu (realni broj). Zapis je prazan ako je na mjestu šifre vrijednost nula. Veličina fizičkog bloka na disku je BLOK, a očekivani maksimalni broj zapisa je MAXZAP. Ovi su parametri upisani u parametri.h. • Napisati funkciju za izračun adrese pretinca u tablici s 500 pretinaca. Ključ je šifra od 4 znamenke, a metoda je korijen iz srednjih znamenki kvadrata. Algoritmi i strukture podataka, FER, 2008/09.

More Related