Algoritmi in podatkovne strukture 1 Visokošolski strokovni študij Računalništvo in informatika Abstraktni podatkovni tipi Jurij Mihelič, UniLj, FRI
Podatkovni tipi Razvil Pascal, Oberon itd. Software is getting slower more rapidly than hardware becomes faster. Niklaus Wirth, 1943 - Algorithms + Data Structures = Programs Razvil jezik Scala,, generike v javi. Martin Odersky, 1958 Podatki so tmelj vsakega programa
Podatkovni tipi Primer: števila cela števila dvojiški komplement decimalna števila operacije +, -, *, /, % Java izvedbe: byte, short, int, long operacije: +, -, *, / Java izvedbe: float, double IEEE 745 standard Katre vrednost zaseda byt, short, foat,?
Podatkovni tipi Podatkovni tip Je matematični model podatkovne strukture. Opis podatkovnega tipa množica vrednosti množica operacij predstavitev podatka razvijalski pogled na podatke
Podatkovni tipi Abstraktni podatkovni tip (ADT abstract data type) množica vrednosti množica operacij brez implementacije oz. predstavitve podatkov uporabniški pogled na podatke matematična definicija obnašanja tipa analogija iz OOP: vmesnik in razred podobno algebrajskim strukturam (vrednosti, operacije)
Podatkovni tipi Objektni opis podatkovna struktura je prejemnik metode ADT s s.operacija(x) Klasični opis podatkovna struktura podana kot argument ADT s operacija(s, x)
Množica Množica (set) matematično gledano: končna množica vsebuje enolične elemente brez vrstnega reda Vreča (bag, multiset) Set/Bag find(x) add(x) remove(x) kot množica dovoljuje ponavljanje elementov
Sklad Sklad (stack) LIFO last-in, first-out vrh sklada operaciji push in pop Stack push(x) pop() isempty() top() push top pop
Vrsta Vrsta (queue) dequeue FIFO first-in, first-out sprednji in zadnji konec vrste operaciji enqueue in dequeue enqueue front Queue enqueue(x) dequeue() isempty() front() back
Vrsta z dvema koncema dvrsta? Vrsta z dvema koncema (deque ali dequeue) dodajanje in odvzemanje spredaj in zadaj Deque enqueue(x) = enqueueback(x) dequeue() = dequeuefront() enqueuefront(x) dequeueback() isempty() front() back() dequeue enqueuefront enqueue front back dequeueback
Vrsta s prednostjo Vrsta s prednostjo (priority queue) odvzemanje spredaj dodajanje s prednostjo enqueue dequeue PriorityQueue front enqueue(p, x) dequeue() front()
Zaporedje Zaporedje (sequence) naključni dostop: get(i), set(i, x) vstavljanje na pozicijo: insert(i, x) brisanje na dani poziciji: delete(i) Sequence get(i) set(i, x) insert(i, x) delete(i) 0 1 2 3 4
Collection Pregled ADT isempty() clear() count() find(x) Set/Bag Stack Queue Sequence find(x) add(x) remove(x) push(x) pop() enqueue(x) dequeue() top() front() get(i) set(i, x) insert(i, x) delete(i) SortedSet Map Deque PriorityQueue min() max() get(k) put(k, v) remove(k) enqueuefront(x) dequeueback() enqueue(p, x) dequeue() back() front()
Algebraični pogled Nat = types: Nat operations: 0: Nat succ: Nat Nat add: Nat Nat Nat equations: n, m Nat add(n, 0) = n add(n, succ(m)) = succ(add(n, m))
Algebraični pogled Int = types: Int operations: 0: Int succ: Int Int pred: Int Int add: Int Int Int equations: n, m Int succ(pred(n)) = n pred(succ(n)) = n add(n, 0) = n add(n, succ(m)) = succ(add(n, m)) add(n, pred(m)) = pred(add(n, m))
Algebraični pogled Stack = types: Item = Int {error} Stack = Item* operations: empty: Stack push: Item Stack Stack pop: Stack Stack top: Stack Item equations: pop(push(x, s)) = s top(push(x, s)) = x pop(empty) = empty top(empty) = error