Algoritmi Pretrazivanja i Njihova Slozenost

Embed Size (px)

Citation preview

  • 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