Linearne strukture
This presentation is the property of its rightful owner.
Sponsored Links
1 / 19

Linearne strukture PowerPoint PPT Presentation


  • 83 Views
  • Uploaded on
  • Presentation posted in: General

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Linearne strukture

Linearne strukture

Polja

jednodimenzionalna (nizovi, vektori)

dvodimenzionalna (matrice)

višedimenzionalna (tenzori višeg reda)

Povezani popis

Stogovi

Redovi


Linearne strukture

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


Linearne strukture

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


Linearne strukture

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


Linearne strukture

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


Linearne strukture

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)


Linearne strukture

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).


Linearne strukture

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.


Linearne strukture

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”


Linearne strukture

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( )


Linearne strukture

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)


Linearne strukture

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)


Linearne strukture

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


Linearne strukture

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( ).


Linearne strukture

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)!


Linearne strukture

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


Linearne strukture

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


Linearne strukture

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)


Linearne strukture

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.


  • Login