Katedra za ra čunarsku tehniku i informatiku Odsek za softversko in ženjerstvo [SI ] Algoritmi i strukture podataka Milo V. Toma ševi ć
III IV II I Linearne strukture podataka Nelinearne strukture podataka Pretraživanje Sortiranje Algoritmi i strukture podatakaSadržaj
Uvod Algoritmi i strukture podataka Algorithms + Data Structures = Programs Dva osnovna gradivna bloka za implementaciju programskih sistema Struktura podataka – opis načina organizacije podataka Algoritam – opis načina obrade podataka
O algoritmima Algoritmi i strukture podataka Osobine jedan ili više ulaza i izlaza nedvosmislenost i ostvarljivost naredbi kona čno vreme izvršavanja Deterministi čko ponašanje (ali i pseudoalgoritmi) Mera efikasnosti – vremenska i prostorna složenost Naj češ će u pseudojeziku Implementacija algoritama (jezik, mašina) Uvod
O strukturama podataka Algoritmi i strukture podataka Modelira objekte i podatke iz problema Elementarni, primitivni tipovi Složeni, struktuirani tipovi logi čka struktura fizi čka struktura Osnovni na čini struktuiranja homogeni - nizovi nehomogeni - zapisi Uvod
Uvod O strukturama podataka Algoritmi i strukture podatakaZapis Agregacija elemenata različitog tipa (polja) Tretira se kao logička celina Koristi se u implementaciji dinamičkih struktura datoteka Operacije obično nad poljima
Uvod O strukturama podataka Algoritmi i strukture podatakaZapis Smeštanje u memoriji a) kontinualna alokacija polja b) vezivanje polja za početak reči 14444444444244444444443 14243 marka snaga godina snaga marka godina 1444442444443 14243 14243 1444442444443 14243 1444444444424444444444443 a1 a1 a) b) 100 110 114 100 112 116
Podele struktura Algoritmi i strukture podataka Po relacijama elemenata linearne nelinearne Po mogu ćnosti promene veli čine stati čke dinami čke Po mestu čuvanja unutrašnje (u operativnoj memoriji) spoljašnje (datoteke) Uvod O strukturama podataka
Uvod O strukturama podataka Algoritmi i strukture podatakaMemorijska reprezentacija Sekvencijalna Fizički i logički poredak isti Pristup elementima direktan Obično za linearne strukture a) b)
Uvod O strukturama podataka Algoritmi i strukture podatakaMemorijska reprezentacija Ulančana Fizički i logički poredak različiti Pristup elementima indirektan Koristi pokazivački mehanizam Obično za nelinearne strukture
Linearne strukture podataka Algoritmi i strukture podataka Linearna lista (a1, a 2, ..., a n), n ≥ 0 Apstraktni tip nezavisno od implementacije Strukturno svojstvo – jednodimenzionalnost Operacije obilazak po poretku 1..n pretraživanje pristup elementu umetanje brisanje, ...
Linearne strukture podataka Algoritmi i strukture podataka Implementacija sekvencijalna – niz ulan čana – ulan čana lista Disciplina pristupa LIFO - stek FIFO - red
Linearne strukture podataka Algoritmi i strukture podatakaNizovi Niz - homogeni struktuirani tip Indeks – pozicija elementa u nizu X[l :u] = {X[i]}, i = l, l + 1, … , u - 1, u Direktan pristup elementu bez ograničenja Višedimenzionalni nizovi (nizovi nizova) Selekcija elementa Operacije
Linearne strukture podataka Nizovi Algoritmi i strukture podatakaSmeštanje vektora Sekvencijalna reprezentacija, ne razdvaja se logički koncept od implementacije Ai = Al + (i - l)s (jedan element zauzima s reči) Efikasan, direktan pristup, neefikasno umetanje i brisanje X [l] X [i] X [u] Al Ai s X Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Algoritmi i strukture podatakaSme štanje vektora Kontinualno prostorno efikasno neefikasan pristup Sa dopunjavanjem (padding ) iskoriš ćenje prostora S u = s / s efikasniji pristup X [l] 1442443 X [l+1] X [l+2] 1442443 1442443 X [l] 14424431442443 1442443 X[l+1] X [l+2] Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Algoritmi i strukture podatakaSme štanje vektora Pakovanje k = 1/ s elemenata u jednoj re či prostorno iskoriš ćenje S u = ks Ai = Al + (i - l)/ k pozicija u re či (i - l) mod k X [l] 123 X [l+6] 123 123 X [l+5] Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Algoritmi i strukture podatakaSme štanje matrica Cilj - efikasna adresna funkcija Linearizacija po vrstama (row-major) po kolonama (column -major) X 1 i,1 i, j i,N M,1 M, j M,N i M 1 j N 1,1 1, j 1, N Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Algoritmi i strukture podatakaSme štanje po vrstama X[l 1:u 1, l 2:u 2 ] Ai,j = Al1,l2 + (( i - l 1)( u2 - l2 + 1) + j - l 2 ) s X[1:M,1:N] Ai,j = A1,1 + ((i - 1) N + j - 1)s ne zavisi od broja vrsta 1,1 1, j 1, N ... ... M,1 M,j M,N vrsta 1 vrsta i vrsta M i,1 i,j i,N Predstavljanje nizova u memoriji
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji Algoritmi i strukture podatakaSme štanje po kolonama X[l 1:u 1, l 2:u 2 ] Ai,j = Al1,l2 + ((j – l 2)( u1 – l1 + 1) + i – l 1 )s X[1:M,1:N] Ai,j = A1,1 + ((j - 1) M + i - 1) s ne zavisi od broja kolona 1,1 i,1 M,1 ... 1,j i,j M,j ... 1, N i,N M,N kolona 1 kolona j kolona N
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji Algoritmi i strukture podatakaVi šedimenzionalni nizovi X[1:u 1, 1:u 2, ..., 1:u n ] Generalizovano smeštanje po vrstama X[1, ..., 1, 1] X[1, ..., 1, 2] … X[1, ..., 1, u n ] X[1, ..., 2, 1] X[1, ..., 2, 2] … X[1, ..., 2, u n ] ... X[u 1,..., un-1,1] X[u 1,..., un-1,2] … X[u 1,..., un-1, u n] Leksikogafski poredak
Linearne strukture podataka Nizovi Predstavljanje nizova u memoriji Algoritmi i strukture podatakaVi šedimenzionalni nizovi Ai1,.., in = A1,..,1 + ((i 1 - 1)u 2 u 3...u n + (i 2 - 1) u 3 u 4...u n +… + (in-1 - 1)u n + i n - 1)s Efikasno izra čunavanje offset = 0 for j = 1 to n do offset = U [j ] offset + I [j ] - 1 end_for A = A1,..,1 + s * offset Implikacije na čina smeštanja
a) 0 x x x X b) X x x x 0 c) 0 0 0 0 X d) X 0 0 0 0 Linearne strukture podataka Nizovi Algoritmi i strukture podatakaOptimizacije pri smeštanju Cilj – ušteda prostora, ali ipak efikasan pristup Primer - trougaone matrice Optimizacije pri smeštanju nizova
Linearne strukture podataka Nizovi Optimizacije pri smeštanju nizova Algoritmi i strukture podatakaTrougaona matrica Npr. donja trougaona matrica X[ i,j] = 0 , i < j Primena smeštanja po vrstama X[1,1] X[2,1] X[2,2] X[3,1] X[3,2] X[3,3] ... Ušteda u prostoru oko 50% Ai,j = A1,1 + ( i (i - 1)/2 + j - 1)s ako je i ≥ j
1 2 n+1 X Y 1 n X Y 1 n n 1 2 a) b) Linearne strukture podataka Nizovi Optimizacije pri smeštanju nizova Algoritmi i strukture podatakaTrougaone matrice X[i,j] = Z[i,j +1] ako je i ≤ j X[i,j] = 0 za i > j Y[i,j] = Z[i,j] ako je i ≥ j Y[i,j] = 0 za i < j
0 0 0 0 9 0 0 0 0 0 0 4 0 0 0 0 0 5 0 8 0 0 0 0 0 0 0 11 0 0 15 0 0 0 0 X = 4 5 11 9 8 15 V 3 4 6 1 4 7 C 1 2 2 4 4 5 R Linearne strukture podataka Nizovi Optimizacije pri smeštanju nizova Algoritmi i strukture podatakaRetki nizovi Relativno veliki broj nultih elemenata Pamte se samo nenulti elementi – ušteda prostora Vektorska reprezentacija Neefikasne operacije!
list info info info next next next Linearne strukture podataka Algoritmi i strukture podatakaUlančane liste Nedostaci sekvencijalne implementacije Ulančana lista - ulančana implementacija linearne liste Element liste - čvor Dinamička alokacija, pokazivački mehanizam Ulančane liste
Linearne strukture podataka Ulan čane liste Osnovni pojmovi i osobine Algoritmi i strukture podatakaVrste lista Po na činu povezanosti jednostruko ulan čane dvostruko ulan čane kružne nekružne Po organizaciji ure đene neure đene
y z p q y z p q x ⇒ Linearne strukture podataka Ulančane liste Operacije sa jednostruko ulančanim listama Algoritmi i strukture podataka INSERT-AFTER(p, x) q = GETNODE info(q) = x next(q) = next(p) next(p) = q Jednostruko ulančane liste Umetanje iza zadatog čvora
y z p q x z p q y ⇒ Linearne strukture podataka Ulančane liste Operacije sa jednostruko ulančanim listama Algoritmi i strukture podataka INSERT-BEFORE(p, x) q = GETNODE next(q) = next(p) info(q) = info(p) info(p) = x next(p) = q Jednostruko ulančane liste Umetanje ispred zadatog čvora
x p y z x p z ⇒ Linearne strukture podataka Ulančane liste Operacije sa jednostruko ulančanim listama Algoritmi i strukture podataka DELETE-AFTER(p) q = next(p) next(p) = next(q) FREENODE(q) Jednostruko ulančane liste Brisanje iza zadatog čvora
x p y q y p ⇒ Linearne strukture podataka Ulančane liste Operacije sa jednostruko ulančanim listama Algoritmi i strukture podataka DELETE(p) q = next(p) next(p) = next(q) info(p) = info(q) FREENODE(q) Jednostruko ulančane liste Brisanje zadatog čvora
Linearne strukture podataka Ulan čane liste Operacije sa jednostruko ulan čanim listama Algoritmi i strukture podataka SEARCH(list, x) p = list while ( p ≠ nil) and (info ( p) ≠ x) do p = next ( p) end_while return p Jednostruko ulan čane liste Pretraživanje neure đene liste
Linearne strukture podataka Ulan čane liste Operacije sa jednostruko ulan čanim listama Algoritmi i strukture podatakaJednostruko ulan čane liste SEARCH-ORD(list, x) p = list while ( p ≠ nil) and (info ( p) < x) do p = next ( p) end_while if ( p ≠ nil) and (info ( p) > x) then p = nil end_if return p Pretraživanje ure đene liste
info info info next next next list Linearne strukture podataka Ulan čane liste Operacije sa kružnim ulan čanim listama Algoritmi i strukture podatakaKru žne liste Poslednji čvor ukazuje na prvi Omogu ćeno kružno kretanje po listi Spoljašnji pokaziva č na listu ponekad ukazuje na poslednji čvor
list y y x ⇒list Linearne strukture podataka Ulančane liste Algoritmi i strukture podataka INSERT-AFTER-C(p, x) q = GETNODE info(q) = x next(q) = next(p) next(p) = q if (list = p) then list = q end_if Kružne liste Operacije sa kružnim ulančanim listama
Linearne strukture podataka Ulan čane liste Algoritmi i strukture podatakaKru žne liste sa zaglavljem list H H a) b) list Na po četku poseban čvor – zaglavlje Ukazuje na prvi čvor Lista nikad nije prazna! Operacije sa kružnim ulan čanim listama
p q prev next info prev next info p q Linearne strukture podataka Ulančane liste Operacije sa dvostruko ulančanim listama Algoritmi i strukture podatakaDvostruko ulančane liste Pokazivači na prethodnika i sledbenika Lako kretanje u oba smera next(prev(p)) = p = prev(next(p))
p q y z p q y z x r 3 5 6 4 2 1 ⇒ Linearne strukture podataka Ulančane liste Operacije sa dvostruko ulančanim listama Algoritmi i strukture podataka INSERT-AFTER-D(p, x) q = GETNODE info(q) = x r = next(p) prev(q) = p next(q) = r next(p) = q prev(r) = q Dvostruko ulančane liste Umetanje
q p r x y z q r x z ⇒ Linearne strukture podataka Ulančane liste Operacije sa dvostruko ulančanim listama Algoritmi i strukture podataka DELETE-D(p) q = prev(p) r = next(p) next(q) = r prev(r) = q FREENODE(p) Dvostruko ulančane liste Brisanje
Linearne strukture podataka Ulančane liste Poređenje ulančane i sekvencijalne reprezentacije linearnih lista Algoritmi i strukture podatakaPoređenje nizova i lista Ulančana reprezentacija obično bolje koristi prostor efikasnija za operacije umetanja, brisanja, spajanja, ... fleksibilnost za dinamičke strukture Sekvencijalna reprezentacija efikasniji pristup elementu pogodna za statičke strukture Vektorska implementacija liste
Linearne strukture podataka Ulan čane liste Primene ulan čanih lista Algoritmi i strukture podataka 1 list 3 4 2 2 4 5 6 11 4 1 9 4 5 4 8 7 15 Predstavljanje retkih nizova Jednostruko ulan čane liste ( čvor - nenulti element) Lakše umetanje i brisanje Pristup i dalje neefikasan Poboljšanje – kružne liste ulan čane po vrstama i kolonama
Linearne strukture podataka Ulan čane liste Algoritmi i strukture podataka Primene ulan čanih lista Predstavljanje retkih matrica 1 3 2 4 2 6 11 4 1 9 4 4 8 5 7 15 4 5 R C 1 2 3 4 5 1 2 3 4 5 6 7
Linearne strukture podataka Ulan čane liste Primene ulan čanih lista Algoritmi i strukture podatakaPredstavljanje skupova Vektorska realizacija prostorna neefikasnost efikasne operacije (unija, presek, razlika, pripadnost) Ulan čana implementacija čvor - element skupa prostorno efikasnije manje efikasne operacije (za ure đene liste – O(n), za neure đene liste – O(n 2))
Linearne strukture podataka Ulan čane liste Primene ulan čanih lista Algoritmi i strukture podatakaPredstavljanje polinoma Jednostruko ulan čane kružne liste sa zaglavljem Npr. 3 x15 – 8 x 7 + 2 x - 6 Ako su liste ure đene po vrednosti polja eksponenta, efikasnost operacija ve ć a c exp c c c next exp exp exp next next next 3 15 -8 7 2 1 -6 0
Linearne strukture podataka Algoritmi i strukture podatakaStekovi Linearna lista sa LIFO disciplinom pristupa Jedan pristupni kraj – vrh steka Dinamička, homogena struktura top A B C D E b top A B b top A B F G b C D E a) b) c) Stekovi
Linearne strukture podataka Stekovi Implementacija steka i operacije sa njim Algoritmi i strukture podatakaSekvencijalna reprezentacija Niz S[1: n ] Pokaziva č steka top [ S ] Sadržaj S[1], ..., S [top [ S]] top 6 5 9 1 top 6 5 9 1 3 2 top 6 5 9 1 3 2 a) b) c)
Linearne strukture podataka Stekovi Implementacija steka i operacije sa njim Algoritmi i strukture podatakaOperacije sa stekom STACK-EMPTY( S ) if (top[S] = 0) then return true else return false end_if PUSH( S, x ) if (top[S] = n) then ERROR(Overflow) else top[S] = top[S] + 1 S[top[S]] = x end_if Provera da li je Umetanje prazan
Linearne strukture podataka Stekovi Implementacija steka i operacije sa njim Algoritmi i strukture podatakaOperacije sa stekom POP( S ) if (top[S] = 0) then return underflow else x = S[top[S]] top[S] = top[S] – 1 return x end_if TOP( S ) if (top[S] = 0) then return underflow else return S[top[S]] end_if Uklanjanje Čitanje bez uklanjanja
Linearne strukture podataka Stekovi Implementacija steka i operacije sa njim Algoritmi i strukture podatakaImplementacija dva steka Rastu jedan prema drugom Realokacija prostora izme đu stekova Uslov prekora čenja top[2] = top[1] +1 b[1] top[1] b[1] b[2] b[2] top[2] top[1]top[2] S 1 S 1 S 2 S 2 a) b)
Linearne strukture podataka Stekovi Implementacija steka i operacije sa njim Algoritmi i strukture podatakaImplementacija vi še stekova top[1] top[2] top[3] top[4] top[5] b[1] b[2] b[3] b[4] b[5] b[6] b[1] top[1] top[2] top[3] top[4] top[5] b[2] b[3] b[4] b[5] top[1] top[2] top[3] top[4] top[5] b[1] b[2] b[3] b[4] b[5] S 1 S 2 S 3 S4 S 5 S 5 S 5 S 4 S4 S 3 S 3 S 2 S 2 b) c) a) S 1 S 1