linearne strukture

19
Linearne strukture Polja jednodimenzionalna (nizovi, vektori) dvodimenzionalna (matrice) višedimenzionalna (tenzori višeg reda) Povezani popis Stogovi Redovi

Upload: alfonso-pearson

Post on 30-Dec-2015

67 views

Category:

Documents


1 download

DESCRIPTION

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). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linearne strukture

Linearne strukture

Polja

jednodimenzionalna (nizovi, vektori)

dvodimenzionalna (matrice)

višedimenzionalna (tenzori višeg reda)

Povezani popis

Stogovi

Redovi

Page 2: 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

Page 3: 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.

Popunjenidio stoga

Prazni diostoga

Pokazivač stogaSp=4

6

5

4

3

2

1

Page 4: Linearne strukture

Izvedba stoga pomoću niza (2/4)

Stog je prazan ako je Sp = 0Stog je pun ako je Sp = NStog se “puni” i “prazni” na “vrhu”. Podatak koji je zadnji stavljen na stog, bit će prvi skinut sa stoga.

Algoritam funkcije Is_empty( )

Ako je Sp = 0 vratiti TRUE vratiti FALSE

Algoritam procedure Clear( )

Sp = 0

Page 5: Linearne strukture

Algoritam procedure Push( x )

Ako je Sp = N ondaIspiši “Stack overflow. Aborting...”Završi algoritam /* obavezan prekid programa! */

Sp = Sp + 1VSp = x

Izvedba stoga pomoću niza (3/4)

Page 6: Linearne strukture

Izvedba stoga pomoću niza (4/4)

Algoritam funkcije Pop( )

Ako je Sp = 0 ondaIspiši “Illegal POP. Aborting...”Završi algoritam /* obavezan prekid programa! */

x = VSp

Sp = Sp 1Vratiti x

Sve četiri operacije su “atomske”.

Vremenska složenost svake je O(1)

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

Page 8: Linearne strukture

Problem “putne torbe” (1/4)

ZADANO: Niz Tezine od n prirodnih brojevaT – 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.

Page 9: Linearne strukture

Algoritam PUTNA TORBA

rješenje_postoji=FALSE uk_tez=0, pred=0Pozvati proceduru TorbaAko rješenje_postoji onda

Za svaki i=1 do pred činiti Ispisati TezinePop( )

U suprotnom Ispisati “Nema rješenja”

Problem “putne torbe” (2/4)

Page 10: Linearne strukture

Problem “putne torbe” (3/4)Algoritam procedure Torba

Clear( )Ponavljati

Ako je uk_tez=T onda rješenje_postoji = TRUEU suprotnom

Ako je uk_tez<T i pred <n ondapred = pred +1uk_tez = uk_tez + Tezinepred

Push(pred)U suprotnom

pred = Pop( )uk_tez = uk_tez Tezinepred

Ako je pred<n ondapred = pred +1uk_tez = uk_tez + Tezinepred

Push(pred)Sve dok nije rješenje_postoji i nije Is_empty( )

Page 11: 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 ponavljanjaza svaki podskup od 1,2,...,n elemenata, što na krajurezultira danom ukupnom složenosti)

U ovom slučaju govorimo o NP-teškim problemima.(NP kao nepolinomijalni)

Page 12: Linearne strukture

Problem računanja ‘povrh’ (1/3)

ZADANO: Nenegativni brojevi a,b; a bTRAŽI SE: Dati algoritam koji će izračunati

b

a

10

,11

,1;1

1

1

k

kk

k

m

n

m

n

m

n

Dobro je poznato da je)!(!

!

bab

a

b

a

Ali, čim je a veličine preko 20, rezultat je 20znamenkast i izlazi iz okvira SVIH cjelobronih tipova (čak i 64-bitnih)

Page 13: Linearne strukture

Algoritam POVRHs1.Clear( ), s2.Clear( )s1.Push( a ), s2.Push( b )povrh = 0Ponavljati

n = s1.Pop( )m = s2.Pop( )Ako je m=n ili n=1 ili m=0 onda povrh = povrh +1U suprotnom

s1.Push( n-1 ) s2.Push( m-1 ) s1.Push( n-1 )s2.Push( m )

Sve dok nije s1.is_empty( ) Ispisati povrh

Problem računanja ‘povrh’ (2/3)

Page 14: 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, onaiznosi:

O( ).

)!(!

!2

bab

a

)!(!

!

bab

a

Page 15: Linearne strukture

Problem sortiranjaQUICKSORT (1/5)

ZADANO: Niz V od N elemenataTRAŽI SE: Preurediti elemente niza tako da bude

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

Page 16: Linearne strukture

Problem sortiranjaQUICKSORT (2/5)

- Isti postupak ponavljati s lijevim i desnim podnizom, stogove iskoristiti samo za praćenje granica podnizova

7 9 12 193115 25

7 9 15 193112 25

12 9 15 19317 25

Vs>Vgg

Vdg>Vs

Page 17: Linearne strukture

Algoritam QUICKSORT

Push( 1 ), Push( N )Ponavljati

gg = Pop( )dg = Pop( )s = Nadji_s(dg,gg)Ako je dg < m–1 onda

Push( dg )Push( m–1 )

Ako je gg > m+1 ondaPush( m+1 ) Push( gg )

Sve dok nije Is_empty( )

Problem sortiranjaQUICKSORT (3/5)

Ključna funkcija za ispravan rad

Page 18: Linearne strukture

Algoritam funkcije Nadji_s(dg,gg)

Ponavljatis = dgSve dok je Vgg>Vs i gg s činiti gg = gg – 1Ako je gg = s onda vratiti sPozovi proceduru Zamjeni( Vs, Vgg )s = gg Sve dok je Vdg > Vs i dg s činiti dg = dg + 1Ako je dg = s onda vratiti sPozovi proceduru Zamjeni( Vs, Vdg )

Problem sortiranjaQUICKSORT (4/5)

Page 19: Linearne strukture

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 iO( N 2 ) ukoliko je niz u početku sortiran ili obrnuto sortiran.

Problem sortiranjaQUICKSORT (5/5)