SP 04 TehnikeAdresiranja

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 16

Strukture podataka

Prof.dr.sc. Kreimir Fertalj, kresimir.fertalj@fer.hr

Tehnike adresiranja
Osnovni pojmovi
Postupci pretraivanja

Zatieno licencom http://creativecommons.org/licenses/by-nc-sa/3.0/hr/


Osnovni pojmovi

n poznavajui klju nekog zapisa postavlja se problem pronalaenja


tog zapisa
n primarni klju
jednoznano odreuje neki zapis
npr. MaticniBrojStudenta
n ulanani (kompozitni) kljuevi
potrebni za jednoznano odreivanje nekih vrsta zapisa
npr. MaticniBrojStudenta & SifraPredmeta & DatumIspita jednoznano odreuju zapis
o odranom ispitu
n sekundarni klju
ne mora jednoznano odreivati zapis, ali ukazuje na neki atribut
npr. GodinaStudija u zapisu s podacima o predmetu)

Fertalj: Strukture podataka 2


Slijedno pretraivanje

pregledavanje datoteke zapis po zapis - najprimitivniji nain


koristi se kod slijednih datoteka kod kojih se ionako svi zapisi moraju itati
drugi nazivi: linearno, serijsko, sekvencijalno pretraivanje
zapisi ne moraju biti sortirani
Ponavljaj za sve zapise
Ako je trenutni zapis jednak traenom
Zapis je pronaen
Iskoi iz petlje

prosjeno se ita n/2 zapisa IspisiTrazi


najbolji sluaj: O(1)
najloiji sluaj: O(n)
sloenost: O(n)

Fertalj: Strukture podataka 3


Slijedno pretraivanje sortiranih zapisa

Kako se moe popraviti serijsko pretraivanje?


sortirati zapise prema nekom kljuu!
Sortiraj zapise
Ponavljaj za sve zapise
Ako je trenutni zapis jednak traenom
Zapis je pronaen
Iskoi iz petlje

Ako je trenutni zapis vei od traenog


Zapis ne postoji
Iskoi iz petlje

IspisiTrazi

Fertalj: Strukture podataka 4


itanje po blokovima

kod direktnih datoteka (svi zapisi su jednake duljine!) sortiranih po


primarnom kljuu nije neophodno pregledavati sve zapise
moe se pregledavati npr. svaki stoti zapis
kad se ustanovi poloaj zapisa s traenim kljuem, pripadni blok se slijedno
pretrai

Kako odrediti optimalnu veliinu bloka?

Fertalj: Strukture podataka 5


Primjer - mjesta u Hrvatskoj

traimo Malinsku u popisu od F=6935 mjesta; na svakoj stranici je


navedeno B=60 mjesta
ima F / B vodeih zapisa (stranica) - F / B = 116
115 116
1 2 ivkovi Kosa
60 61 Zvijerci
Ada Bajii ivogoe
Mali Gradac Maovice Zvjerinac
Adamovec Bajkini lebec Goriki
Mali Grevac Maovice Zvonea
Adamovci Bakar-dio .
Mali I Maraii .
. . utnica
. . .
. . uii
Malinska . .
. . uii
. . itomir
Bair Barilovi
Manja Vas Martin ivaja
Bajagi Barkovii
Manjadvorci Martina ivike
Bajii Barlabaevec
Manjerovii Martinac CitanjePoBlokovima
Fertalj: Strukture podataka 6
Optimalna veliina bloka

u sluaju kad ima F stavaka, a veliina bloka je B, ima F / B vodeih


zapisa blokova
oekuje se da je prilikom pretraivanja unutar bloka potrebno obaviti itanje
polovice postojeih vodeih zapisa blokova (slijedno!)
traeni vodei zapis e biti pronaen nakon (F / B) / 2 = F / 2 B proitanih zapisa
unutar ustanovljenog bloka ima B zapisa pa je za oekivati da e se traeni
zapis nai nakon prosjeno B / 2 itanja unutar tog bloka (slijedno!)
ukupni oekivani broj itanja jest F / (2 B) + B / 2
deriviranjem po B i izjednaenjem derivacije s nulom dobije se optimalna
veliina bloka:
B = F
kolika je optimalna veliina bloka za popis mjesta u Hrvatskoj?

Fertalj: Strukture podataka 7


Binarno pretraivanje

binarno pretraivanje zapoinje na polovici datoteke/polja i nastavlja se stalnim


raspolavljanjem intervala u kojem bi se mogao nai traeni zapis
preduvjet: podaci sortirani!
prosjeni broj pretraivanja je log2 n -1.
postupak je neprikladan za diskovne memorije s izravnim pristupom zbog dugotrajnog
pozicioniranja glava. Preporua se za pretraivanje u radnoj memoriji.
koristi se injenica da je polje sortirano i
u svakom koraku se podruje broj elemenata = n
pretraivanja smanjuje na pola
sloenost je O(log2n)

broj traeni
pretraivanja element
= log2n

Fertalj: Strukture podataka 8


Primjer binarnog pretraivanja

Traimo broj 25

2 5 6 8 9 12 15 21 23 25 31 39

Fertalj: Strukture podataka 9


Algoritam za binarno pretraivanje
donja_granica = 0
gornja_granica = ukupan_broj_elemenata
Ponavljaj
Izraunaj sredinji element
Ako je zapis u sredini jednak traenom
Zapis je pronaen
Iskoi iz petlje
Ako je donja granica vea ili jednaka gornjoj
Zapis nije pronaen
Iskoi iz petlje

Ako je zapis u sredini manji od traenog


Postavi donju granicu na trenutni zapis + 1
Ako je zapis u sredini vei od traenog
Postavi gornju granicu na trenutni zapis - 1

BinarnoPretrazivanje
Fertalj: Strukture podataka 10
Indeksno-slijedne datoteke

svaki zapis ima klju prema kojem ga je mogue jednoznano


identificirati
ako je datoteka sortirana po kljuu, prikladno je formirati tablicu za
pretraivanje
ulazni podatak za tablicu je klju traenog zapisa
izlazni rezultat je informacija koja poblie locira traeni zapis
takva tablica naziva se indeks
indeks ne mora pokazivati na svaki zapis nego samo na blok
smanjuje se veliina indeksa
kod velikih datoteka postoje indeksi na vie razina

Fertalj: Strukture podataka 11


Indeksno-slijedne datoteke

n ubacivanje i brisanje
kod tradicionalne slijedne datoteke (magnetska traka) ubacivanje novih
zapisa radi se tako da se cijela datoteka prepie uz dodavanje novih zapisa
kod izravnih (direktnih) datoteka brisanje zapisa obavlja se logiki, tj. upie
se znaka da su logiki izbrisani
n nakon odreenog broja izmjena sadraja datoteke, ona se mora
reorganizirati
slijedno se prema vrijednosti kljua upisuju podaci i ponovno se indeksira
datoteka (tzv. odravanje datoteke)

Fertalj: Strukture podataka 12


Postupci pretraivanja

indeksne neslijedne datoteke


ako se eli pretraivanje po vie kljueva ili kad se esto dodaju i briu
zapisi, nemogue je, odnosno, teko ostvariti da zapisi budu sortirani
tada indeks mora sadravati adresu, relativnu ili apsolutnu, svakog
pojedinog zapisa
klju sadri adresu
najjednostavniji sluaj je kad se formira klju tako da neki njegov dio sadri
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 moe
prilagoditi nekom pojedinanom programu

Fertalj: Strukture podataka 13


Primjer: klju sadri adresu zapisa

Iz slijedne datoteke studenti.txt treba stvoriti direktnu datoteku studenti.dat u


kojoj je struktura zapisa:
struct zapis {
int mbr; // 3 znamenke
char ime [40+1];
char spol [1+1];
}

Napisati funkciju koja dohvaa podatke o studentu sa zadanim matinim


brojem te ga potom brie iz datoteke. Matini broj studenta odgovara rednom
broju zapisa. Prazan zapis sadri mbr jednak 0.
DohvatiBrisi
to ako se pokua dohvatiti po negativnom matinom broju?
to bi se dogodilo da ne inicijaliziramo datoteku praznim zapisima?
Fertalj: Strukture podataka 29.8.2017. 14
Problemi i zadaci

Odrediti broj zapisa i veliinu datoteke za mjesta.txt, odnosno


mjesta.new
Brojanjem zapisa
jednom naredbom

Kreirati tablicu indeks koja e pokazivati na vodee zapise blokova u


mjesta.new
Poljem indeks u radnoj memoriji
Datotekom indeks.idx na vrstom disku

Fertalj: Strukture podataka 15


Problemi i zadaci

Napisati program koji simulirati pogaanje broja iz intervala [0, 100]


a zatim pogoditi broj koji zamisli korisnik.
PogadjanjeBroja

Napisati program koji e zamisliti broj a zatim pustiti korisniku da


ga pogodi binarnim pretraivanjem, tako da korisnik unosi broj, a
program odgovara s D/a, V/eci ili M/anji. Kontrolirati ispravnost
korisnikovih pretpostavki (npr. ako je odgovor M ne smije se
dozvoliti upis veeg broja).

Ulazne podatke primjera za binarno pretraivanje prepisati u


odgovarajuu datoteku pa ih binarno pretraiti.
Fertalj: Strukture podataka 16

You might also like