1 / 19

Linearne strukture

Linearne strukture. Polja jednodimenzionalna (nizovi, vektori) dvodimenzionalna (matrice) višedimenzionalna (tenzori višeg reda) Povezani popis Stogovi Redovi. Definicija stoga. Princip rada stoga je LIFO (Last In First Out).

Download Presentation

Linearne strukture

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. Linearne strukture Polja jednodimenzionalna (nizovi, vektori) dvodimenzionalna (matrice) višedimenzionalna (tenzori višeg reda) Povezani popis Stogovi Redovi

  2. Definicija stoga Princip rada stoga je LIFO (Last In First Out). Stog kao struktura podataka definiran je pomoću četiri funkcije: Push(x) - dodaje element x na stog Pop( ) - vraća kao rezultat zadnji element stoga i briše ga Clear( ) - briše sve elemente stoga Is_empty( ) - vraća TRUE ako je stog prazan, inače FALSE

  3. Izvedba stoga pomoću niza (1/4) Nije dovoljan samo niz V od N elemenata, potreban je i dodatni podatak Sp (Stack pointer). Sp je cijeli broj koji pokazuje na zadnji element u stogu. Prazni dio stoga 6 5 4 3 2 1 Pokazivač stoga Sp=4 Popunjeni dio stoga

  4. Izvedba stoga pomoću niza (2/4) Stog je prazan ako je Sp = 0 Stog je pun ako je Sp = N Stog se “puni” i “prazni” na “vrhu”. Podatak koji je zadnji stavljen na stog, bit će prvi skinut sa stoga. Algoritam procedure Clear( ) Sp = 0 Algoritam funkcije Is_empty( ) Ako jeSp = 0 vratiti TRUE vratiti FALSE

  5. Izvedba stoga pomoću niza (3/4) Algoritam procedure Push( x ) Ako je Sp = Nonda Ispiši “Stack overflow. Aborting...” Završi algoritam /* obavezan prekid programa! */ Sp = Sp + 1 VSp = x

  6. Izvedba stoga pomoću niza (4/4) Algoritam funkcije Pop( ) Ako je Sp = 0 onda Ispiši “Illegal POP. Aborting...” Završi algoritam /* obavezan prekid programa! */ x = VSp Sp = Sp 1 Vratitix Sve četiri operacije su “atomske”. Vremenskasloženostsvake jeO(1)

  7. Izvedba stoga pomoću povezanog popisa Dovoljan je jedan povezani popis za izvedbu stoga. Vrh stoga mora biti na početku povezanog popisa ako želimo biti efikasni. Sve četiri osnovne funkcije se mogu izvesti kao “atomske”, međutim procedura Clear( ) u svojoj pravilnoj izvedbi može zahtjevati O(n) operacija (n – broj elemenata na stogu).

  8. Problem “putne torbe” (1/4) ZADANO: Niz Tezine od n prirodnih brojeva T – kapacitet torbe TRAŽI SE: Naći bilo koji podskup Torba skupa Tezine tako da zbroj elemenata u Torba bude jednak T. Ako takvog podskupa nema, ispisati odgovarajuću poruku. - Stog će predstavljati torbu. Stavljati i vaditi iz torbe predmete različitih težina dok se ne dobije tražena kombinacija. Rezultat su predmeti koji su trenutno na stogu.

  9. Problem “putne torbe” (2/4) Algoritam PUTNA TORBA rješenje_postoji=FALSE uk_tez=0,pred=0 Pozvati proceduru Torba Ako rješenje_postojionda Za svakii=1 dopred činiti IspisatiTezinePop( ) U suprotnom Ispisati “Nema rješenja”

  10. Problem “putne torbe” (3/4) Algoritam procedure Torba Clear( ) Ponavljati Ako jeuk_tez=Tondarješenje_postoji = TRUE U suprotnom Ako jeuk_tez<T i pred <nonda pred = pred +1 uk_tez = uk_tez + Tezinepred Push(pred) U suprotnom pred = Pop( ) uk_tez = uk_tez  Tezinepred Ako jepred<nonda pred = pred +1 uk_tez = uk_tez + Tezinepred Push(pred) Sve doknije rješenje_postoji i nije Is_empty( )

  11. Problem “putne torbe” (4/4) Algoritam isprobava sve moguće kombinacije. Vrlo visoka složenost. Vremenska složenost nije polinomijalna, već eksponencijalna O(nn). (U stvari se radi o kombinacijama bez ponavljanja za svaki podskup od 1,2,...,n elemenata, što na kraju rezultira danom ukupnom složenosti) U ovom slučaju govorimo o NP-teškim problemima. (NP kao nepolinomijalni)

  12. Dobro je poznato da je Problem računanja ‘povrh’ (1/3) ZADANO: Nenegativni brojevi a,b; a b TRAŽI SE: Dati algoritam koji će izračunati Ali, čim je a veličine preko 20, rezultat je 20znamenkast i izlazi iz okvira SVIH cjelobronih tipova (čak i 64-bitnih)

  13. Problem računanja ‘povrh’ (2/3) Algoritam POVRH s1.Clear( ), s2.Clear( ) s1.Push( a ), s2.Push( b ) povrh = 0 Ponavljati n = s1.Pop( ) m = s2.Pop( ) Ako jem=n ili n=1 ili m=0 ondapovrh = povrh +1 U suprotnom s1.Push( n-1 ) s2.Push( m-1 ) s1.Push( n-1 ) s2.Push( m ) Sve doknije s1.is_empty( ) Ispisatipovrh

  14. Problem računanja ‘povrh’ (3/3) Algoritam koristi 2 stoga, ali može se lako realizirati sa samo jednim stogom. Algoritam uvijek uvećava rezultat za 1. Osim toga može i stavljati na stog ali otprilike isto toliko puta. Tako da imamo ponavljanja. Vremenska složenost opet nije polinomijalna, ona iznosi: O( ).

  15. Problem sortiranja QUICKSORT (1/5) ZADANO: Niz V od N elemenata TRAŽI SE: Preurediti elemente niza tako da bude V1V2 ... VN Ovaj put želimo bolje od kvadratne složenosti! - Uzeti prvi element u nizu i naći mu odmah konačno mjesto, tako da svi lijevo od njega budu manji od njega, a svi desno od njega veći od njega (zapravo, mogu biti i jednaki, a ne strogo manji ili veći) To se može postići u linearnom vremenu O(N)!

  16. 25 12 9 15 7 31 19 Vs>Vgg 25 7 9 15 12 31 19 Vdg>Vs 25 7 9 12 15 31 19 Problem sortiranja QUICKSORT (2/5) - Isti postupak ponavljati s lijevim i desnim podnizom, stogove iskoristiti samo za praćenje granica podnizova

  17. Problem sortiranja QUICKSORT (3/5) Algoritam QUICKSORT Push( 1 ), Push( N ) Ponavljati gg = Pop( ) dg = Pop( ) s = Nadji_s(dg,gg) Ako jedg < m–1onda Push( dg ) Push( m–1 ) Ako jegg > m+1onda Push( m+1 ) Push( gg ) Sve dok nije Is_empty( ) Ključna funkcija za ispravan rad

  18. Problem sortiranja QUICKSORT (4/5) Algoritam funkcije Nadji_s(dg,gg) Ponavljati s = dg Sve dokjeVgg>Vs i gg  sčinitigg = gg – 1 Ako jegg = sonda vratitis Pozovi proceduruZamjeni( Vs, Vgg) s = gg Sve dokjeVdg > Vsi dg  sčinitidg = dg + 1 Ako jedg = sonda vratitis Pozovi proceduruZamjeni( Vs, Vdg)

  19. Problem sortiranja QUICKSORT (5/5) Algoritam funkcije Nadji_s ima najviše gg – dg ponavljanja. Glavni program također razdvaja dijelove niza na podnizove. Dubljom analizom može se utvrditi da se razdvajanje u slučaju polovljenja većih dijelova niza, proteže na log2N razina. Složenost algoritma je u tom slučaju O( N log N ) Međutim moramo biti svjeni da algoritam može doseći i O( N 2 ) ukoliko je niz u početku sortiran ili obrnuto sortiran.

More Related