Algoritmanalys och sortering Algoritmanalys Ordo Ordo Exempel g(n)

Algoritmanalys
„
„
Algoritmanalys och sortering
Programmeringsmetodik A – mom 2
1
Ordo
„
„
„
„
Att söka efter ett visst element i en vektor är direkt beroende
på antalet element, n, i vektorn.
Programmeringsmetodik A – mom 2
2
Ordo
3
Exempel
„
Även om varje steg i sökningen kräver flera operationer, kan
vi sätta c till ett högre tal och problemet växer enbart av n.
„
„
Att leta ett element i ett balanserat binärt sökträd är
8(log2(n)).
Programmeringsmetodik A – mom 2
Programmeringsmetodik A – mom 2
4
g(n)
Att söka ett element i en vektor är 8(n).
‹
„
‹
Till hjälp tar man då en matematisk
funktionsdefinition som kallas ordo, 8.
f(n) anger antalet beräkningar en algoritm gör om
storleken på datat är n.
g(n) anger en godtycklig funktion.
Om det finns ett c så att f(n) <= c ⋅ g(n) ∀n > n0 sägs
f(n) vara 8(g(n)).
Programmeringsmetodik A – mom 2
„
För att avgöra om en viss algoritm är bra, kollar man
oftast sämsta fallet.
Intressant att kolla hur algoritmen växer med
storleken på problemet.
„
5
I g(n) vill man enbart ha den del som växer fortast.
Konstanter är INTE viktigt.
Ex. n2, nlog(n), n3.
Att kolla på hur fort ett problem växer är för små
problem ofta inte så intressant, men för stora problem
kan det vara helt avgörande.
Programmeringsmetodik A – mom 2
6
1
Exempel
Sortering
n
log2(n)
n2
n3
2n
2
1
4
8
4
4
2
8
64
16
16
4
256
4096
65.536
256
8
65.536
16 milj
1.15⋅1077
1024
10
1 milj
1 mrd
1.79⋅10308
„
„
„
Programmeringsmetodik A – mom 2
„
‹
7
Bubble sort
„
„
„
„
En av de vanligare operationerna på vektorer/arrayer.
Komplex operation
Varje element måste jämföra sig med alla de övriga
I grunden en 8(n2) operation
Kan den göras på ett bättre sätt?
Programmeringsmetodik A – mom 2
8
Bubble-sort
Enklaste och mest intuitiva sorteringsalgoritmen.
Elementen ''bubblar'' upp genom fältet.
Går igenom vektorn och byter plats mellan två
intilliggande elements som inte är i ordning.
Upprepar detta tills hela vektorn är sorterad (max n
ggr).
„
„
Många implementationer enligt samma princip.
''Pseudo''-kod:
do {
changed = false;
for (i=1; i<length; i++) { // OBS! i=1
if (v[i-1] > v[i]) {
changed = true;
swap(v[i-1],v[i]);
}
}
} while(changed);
Programmeringsmetodik A – mom 2
9
Exempel
Programmeringsmetodik A – mom 2
Merge sort
„
„
„
„
Programmeringsmetodik A – mom 2
10
11
Jobbar med en extra array.
Splittar vektorn för att sedan utnyttja att del-arrayer
redan är sorterade.
''Divide and conquer''
Bygger upp nya del-arrayer genom att parvis jämföra
frontelementen.
Programmeringsmetodik A – mom 2
12
2
Exempel
Quick sort
„
„
„
„
„
„
Programmeringsmetodik A – mom 2
13
'Divide and conquer''
Använder ett ''pivot''-element.
Lägger alla element mindre än pivot-elementet på en
sida och de andra på den andra.
Upprepar proceduren för del-arrayerna.
När alla del-arrayer består av som mest ett element är
de sorterade.
Svårighet att hitta bra pivot-element "snabbt".
Programmeringsmetodik A – mom 2
14
Jämförelse
„
„
„
„
Bubblesort är 8(n2).
Merge-sort och Quick-sort är 8(n ⋅ log(n)).
Merge-sort och Quick-sort kräver en intelligent
implementering/mer minne. Kritiskt för stora
datamängder.
Merge-sort och Quick-sort är rekursiva algoritmer.
Programmeringsmetodik A – mom 2
15
3