algoritmi pretrazivanja i njihova slozenost
TRANSCRIPT
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
1/18
Algoritmi pretraivanja injihova sloenost
Dario Krtali, voditeljDejan BabiStefan agaljMarko DeliDario Kordi
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
2/18
Polje je podatkovna struktura u kojoj vie podataka istog
tipa dijeli zajedniko ime.
Sortirano polje - rastui ili padajui redoslijed - omogueno
brzo pretraivanje
Umetnuti novi lan u sortirano polje znai pronai mu
odgovarajuu poziciju
- kod rastueg to znai pronai mu takvu poziciju da
mu prethodi svaki lan s manjom vrijednosti, a
slijedei lan s veom vrijednosti
- kod padajueg to znai pronai mu takvu poziciju da
prethodi svaki lan s veom vrijednosti, a sljedei lans manjom vrijednosti
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
3/18
Kod rastueg redoslijeda umetanjem novog lana u polje,
svi lanovi polja se moraju pomjeriti i osloboditi mu prostor
u memoriji.
Pretraivanje sortiranih polja moe biti:
1. Linearno pretraivanje sortiranog polja
2. Binarno pretraivanje sortiranog polja
Prvo je jednostavnije, ali i sporije, dok drugo predstavlja
najbri postupak pretraivanja sortiranih polja i znaajno
poveava brzinu obrade podataka.
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
4/18
Linearno pretraivanje
Linearnopretraivanje
sortiranih polja
nalik je
pretraivaju
nesortiranog
polja. Jedina
razlika ne
mora se doi do
posljednjeglana polja.
Linearno pretraivanje sortiranog polja
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
5/18
Binarno pretraivanje
Mo binarnog pretraivanja dolazi do
punog izraaja u sortiranom polju
Najbri nain pretraivanja polja (bitan za
polja s velikim brojem lanova)
Primjer logike binarnog pretraivanja je
igra pogaanja zamiljenog broja
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
6/18
U toj igri zapie se neki broj, npr. od 1 do 100
Mora se znati jedino u kojem se intervalu nalazi
zamiljeni broj
Potrebno je podijeliti interval na polovicu i upitati
je li broj vei od 50
Ako je odgovor da, onda je zapisani broj izmeu50 i 100.
Svaki odgovor doputa podjelu intervala u kojem
se nalazi zapisani broj na polovicu Interval se smanjuje sve dok ne postane samo
jedan broj, a on je zapisani broj
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
7/18
Primjer: zapisuje se broj 18. Kako
binarnim pretraivanjem pronai broj 18prikazuje tablica.
Broj korakaUpit: Traeni
broj je:Odgovor
Interval
moguih
vrijednosti0 1-100
1 50 Ne, 50 je vei. 1-49
2 25 Ne, 25 je vei. 1-24
3 13 Ne, 13 je manji. 14-24
4 19 Ne, 19 je vei. 14-18
5 16 Ne, 16 je manji. 17-18
6 18 Tono.
Tablica 1. Primjer binarnog pretraivanja
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
8/18
Zapisani broj (18) pronalazi se u est
koraka, s tim da je postojala vjerojatnost
od 50% da se poduzme i sedmi korak
Broj koraka moe biti i vei ili manji
Linearno pretraivanje bi znailo
postavljati redom pitanja je li zapisani broj
1, 2, 3, i tako redom do 100
Prosjean broj koraka za linearno
pretraivanje bi bio 50 (u sluaju intervala
1-100)
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
9/18
Primjer programa binarnog pretraivanja#include
using namespace std;
int main() {
int i, j;
int niz[20]; // Deklariranje niza od 20 lanova
for(i = 0; i < 20; i++)
{niz[i] = rand() % 100;} // Smjetanje sluajnih brojeva u nizint temp;
for(i = 0; i < 19; i++)
{
for(j = i + 1; j < 20; j++)
{
if(niz[i]>niz[j])
{
temp = niz[i];
niz[i] = niz[j]; // Sortiranje niza
niz[j] = temp;
}}}
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
10/18
int gornjaGranica, donjaGranica;// Varijable za prvi i posljednji indeks u nizu
int sredina; // Varijabla za podjelu intervala pretrage na polovice
int pretraga; // Varijabla koja uva unesenu vrijednost za pretragu
bool pronadjen; // Varijabla koja oznaava je li uneseni broj pronaen
printf("U pozadini programa je stvoren niz od 20 brojeva u rasponu od 0 do
100.\n");
printf("Unijeti broj koji zelite pronaci u nizu.\n");
scanf(" %d", &pretraga);
donjaGranica = 0;
gornjaGranica = 19;
pronadjen = false;
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
11/18
while (donjaGranica niz[sredina])
{donjaGranica = sredina + 1; }
else if(pretraga < niz[sredina])
{gornjaGranica = sredina - 1; }
elsepronadjen = true; }
// Ako je uneseni broj jednak broju sa sredinjim indeksom, pretraga se zavrava
if(pronadjen == true)
{
printf("Broj pronaen!\n");
printf("Broj %d nalazi se na mjestu %d u nizu.\n", pretraga, (sredina+1));
// Ispis unesenog broja i njegovog mjesta u nizu
}
else
{printf("Broj nije pronaen!\n"); }
system("pause"); return 0; }
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
12/18
Sloenost algoritama umetanja u
nesortirano polje,linearnog i binarnogpretraivanja sortiranog polja
Polje je uvijek dobro sortirati ako je pretraivanje poljaesta operacija, a rijetke operacije umetanja i brisanja
lanova polja
Nije sloeno procijeniti potreban broj koraka za
pronalaenje lana sortiranog polja (sloenost algoritma)
ako se upotrijebi binarno pretraivanje
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
13/18
Tablica pokazuje potreban broj usporedbi
za binarno i linearno pretraivanjeBroj lanova polja
Binarno pretraivanje -
broj usporedbi (maksimalan)
Linearno pretraivanje
broj usporedbi (prosjean)
10 4 5
100 7 50
1000 10 500
10000 14 5000
100000 17 50000
1000000 20 500000
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
14/18
Jednostavno je prikazati sloenost algoritama
umetanja u nesortirano polje, linearnog
pretraivanja nesortiranog polja, binarnogpretraivanja sortiranog polja
Umetanje lanova u nesortirano polje ne ovisi o
broju lanova polja Novi lan umetanje na sljedee slobodno
mjesto
Broj lanova uveava se za 1
Operacija umetanja isto vrijeme, ne ovisi o
broju lanova polja
Vrijeme umetanja T konstanta C ili T = C
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
15/18
Linearno pretraivanje - proporcionalno broju lanova
polja N
Prosjean broj usporedbi za pronalaenje lana polja je
polovica ukupnog broja lanova
Ako je N duljina poljavrijeme pretraivanja :
C je vrijeme povezano s jednim lanom polja
Ako je onda se prethodna formula prevodi u
jednostavniju i zapisuje se
Prosjeno vrijeme za linearno pretraivanje jeproporcionalno broju lanova polja
2*N
CT
2
CK
NKT *
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
16/18
Polje dva puta due vrijeme pretraivanja dva
puta dulje
Notacija veliko O (big O) slui se velikim slovom
O, to se moe proitati
Sloenost algoritma je O(N)
Za binarno pretraivanje moe se zapisati
Notacija big One slui se konstantom K
Ne uzima u obzir procesor ili jezik prevoditeljnego samo ispituje promjenu vremena (T)
potrebnog za izvravanje algoritma u ovisnosti o
broju lanova(N)
)(log* 2 NKT
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
17/18
U notaciji big Okae se da linearnozahtjeva vrijeme O(N),a binarno
pretraivanje O(logN)
Umetanje lana u nesortirano polje unotaciji big O je O(1) tj. konstanta
-
7/29/2019 Algoritmi Pretrazivanja i Njihova Slozenost
18/18