datastrukturer och algoritmer

23
Datastrukturer och algoritmer Föreläsning 13 20 min för kort!!

Upload: lluvia

Post on 14-Jan-2016

62 views

Category:

Documents


0 download

DESCRIPTION

Datastrukturer och algoritmer. Föreläsning 13 20 min för kort!!. Innehåll. Sortering Sortering vs sorterad datatyp Stabilitet Grundprinciper för sortering Genomgång av några sorteringsalgoritmer Hur fort går det att sortera en lista med n tal? Kapitel 15.1-15.4. Sortering varför?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Datastrukturer och algoritmer

Datastrukturer och algoritmer

Föreläsning 1320 min för kort!!

Page 2: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Innehåll

Sortering Sortering vs sorterad datatyp Stabilitet Grundprinciper för sortering Genomgång av några sorteringsalgoritmer Hur fort går det att sortera en lista med n tal?

Kapitel 15.1-15.4

Page 3: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Sortering varför?

Snabba upp andra algoritmer Sökning Hantera stora

datamängder

Page 4: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Sortering vs Sorterad datatyp

Sortering förändrar ordningen mellan objekten i en struktur

efter en sorteringsordning (fallande, ökande) Sorterad datatyp

de strukturförändrande operationerna i gränsytan (insert, delete) upprätthåller en sorteringsordning mellan de lagrade objekten

Page 5: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Saker att beakta

Absolut komplexitet Totala komplexiteten i alla implementationssteg

o Tabell->Lista->Dubbellänkad Lista

Passar en viss typ av sortering för en viss typ av implementation?

Ska man sortera och sedan söka eller inte sortera och göra en linjär sökning?

Page 6: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Stabilitet

Den inbördes relationen mellan två objekt med samma nyckel bibehålls vid sortering

[(0,L),(2,C),(5,G),(8,A),(10,G) ] =>

[(8,A),(2,C),(5,G) ,(10,G),(0,L)] Alla sorteringsalgoritmer går inte att göra

stabila!! Mer om detta senare…

Page 7: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Olika grundprinciper

Insättnings – O(n2) välj ut ett godtyckligt objekt och sätt in det på rätt plats

Urvals – O(n2) välj ut det objekt som är på tur och sätt in det sist/först

Utbytes – O(n*log(n)) byt plats på objekt som ligger fel inbördes

Samsortering – O(n*log(n)) bygger på sammanslagning av redan sorterade strukturer

Nyckelsortering – O(m+n)… kräver mer information/kunskap

om objektmängden

Page 8: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Mer principer…

Naiva sorteringar - O(n2) Insticks, urvals, och vissa utbytes

”Smarta” sorteringar - O(nlog(n)) Utbytes och samsorteringar

Ännu smartare sorteringar - O(n+m)… Nyckelsorteringar…(nästa föreläsning)

Page 9: Datastrukturer och algoritmer

Sammanfattande tabellbaserad på tabellen på sidan http://en.wikipedia.org/wiki/Sorting_algorithm

Namn Bäst Medel Sämst Minne Stabil Typ

Insertion sort O(n) O(n + d) O(n2) O(1) X Insättning

Selection sort O(n2) O(n2) O(n2) O(1) Urval

Bubble sort O(n) — O(n2) O(1) X Utbyte

Merge sort O(n log n) O(n log n) O(n log n) O(n) X Samsortering

In-place merge sort

O(n log n) O(n log n) O(n log n) O(1) X Samsortering

Quicksort O(n log n) O(n log n) O(n2) O(log n) Utbyte

Heapsort O(n log n) O(n log n) O(n log n) O(1) Urval

Bucket sort (Pigeon hole sort)

O(n+m) O(n+m) O(n+m) O(k) X Nyckel

LSD Radix sort O(n·k/s) O(n·k/s) O(n·k/s) O(n) X Nyckel

MSD Radix sort O(n·k/s) O(n·k/s) O(n·(k/s)·2s)

O((k/s)·2s) Nyckel

Page 10: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Animeringar att titta på

Animering som visar hur sorteringen beter sig för listor som är slumpmässiga, nästan sorterade omvänt sorterade samt listor med många dubletter (få unika tal)

http://vision.bc.edu/~dmartin/teaching/sorting/anim-html/all.html

Animering som visar ett mindre exempel i detalj

http://math.hws.edu/TMCM/java/xSortLab/

Page 11: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Insertion sort - insättningssortering

Välj ett godt. objekt och sätt in det på rätt plats O(n2) Enkel att implementera Effektivitet

bäst för mindre datamängder och datamängder som är nästan sorterade

i praktiken mer effektiv än selection sort och bubble sort

Stabil Kan göras in-place

Konstant andel extra minne (motsv elementens storlek)

Kan sortera en lista allt eftersom den byggs upp.

Page 12: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Selection sort - urvalssortering

Välj det objekt som är på tur och sätt in det sist/först O(n2) Enkel att implementera Effektivitet

bäst på mindre datamängder beter sig lika oavsett datamängdens utseende i praktiken mer effektiv än bubble sort

Kräver mindre ”swaps” än insertion sort Bra om ”dyrare” att skriva till minnet än att läsa från det.

Inte stabil kan göras stabil men då tappar man fördelar jämfört med insertion

sort (mer swaps). Kan göras in-place

Konstant andel extra minne (motsv elementens storlek)

Page 13: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Bubble sort - utbytessortering

byta plats på objekt som ligger fel inbördes O(n2) Enkel (enklast?) att implementera Effektivitet

bäst på mindre datamängder och nästan sorterade mängder

i praktiken sämre än både insertion sort och selection sort

Kräver mer ”swaps” än insertion sort Stabil Kan göras in-place

Konstant andel extra minne (motsv elementens storlek)

Page 14: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Divide and Conquer

Rekursiv algoritmprincip Grundidén är att dela upp problemet i mindre och mindre

problem Lös problemen för basfallet Slå ihop dem till en totallösning

Mergesort och Quicksort är av denna algoritmtyp O(n*log(n))

Page 15: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Mergesort – samsortering

Bygger på sammanslagning av redan sorterade strukturer

O(n log n) Effektivitet

snabbare och gör mindre jämförelser än quicksort gör fler rekursiva anrop än quicksort men kan skrivas

iterativt

Stabil Kan göras in-place

Speciellt om listan är konstruerad som länkad lista Oftast inte in-place, minnesutrymmet kan påverka ett val!

Page 16: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Mergesort – samsortering

Algoritm för att sortera sekvensen SDivide: Om S har 2 eller flera element dela S i

två lika stora delsekvenser S1 och S2Recurse: Sortera sekvenserna S1 och S2

rekursivt Conquer: Sätt tillbaka elementen i S genom att

slå samman S1 och S2 till en sorterad sekvens

Page 17: Datastrukturer och algoritmer

Ihopslagning av två sekvenserAgorithm merge(S1,S2,S)while S1 is not empty and S2 is not empty do

if S1.first().element() ≤ S2.first().element() thenS.insertLast(S1.remove(S1.first()))

elseS.insertLast(S2.remove(S2.first()))

while S1 is not empty doS.insertLast(S1.remove(S1.first()))

while S2 is not empty doS.insertLast(S2.remove(S2.first()))

Page 18: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

3 195 7 15S1

0 92 6 7

S

S2

3 195 7 150 92 6 7

Exempel på sammanslagning

Page 19: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Analys av exekveringstiden

Höjden på sorteringsträdet kopplat till sorteringen av en sekvens med n element blir log2(n)

Antag att insättning och borttagning är av O(1) Tiden i varje nod i trädet exkluderat tiden för det

rekursiva jobbet nedanför är O(n/2i) där i är djupet på noden ligger på, ty storleken på sekvensen är n/2i

Det är exakt 2i noder på djupet i => totala tiden på djupet i i trädet är O(2in/2i) vilket är O(n) och höjden på trädet är log2(n)

Så den totala tidskomplexiteten är O(nlog2(n))

Page 20: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Quicksort

Algoritm Välj ut ett pivotelement Dela upp listan i tre delar Less, Equal, Greater Sortera Less och Greater rekursivt Slå ihop Less+Equal+Greater

Page 21: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Inplace variant av quicksort

Algoritm Traversera parallellt från båda hållen i S, gå bakåt

från början av S tills man hittar ett element som är >= PE, traversera från slutet mot början till man hittar ett element som är < PE

Skifta plats på dessa två element Upprepa till traverseringarna mötes Skifta in PE på rätt plats Rekursivt anrop med Less och Greater

Page 22: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Quicksort - val av pivoelement

O(nlog(n)) i bästa fallet Valet av pivoelement kritiskt

Vill ha ett pivoelement som ligger i mitten Vid sned fördelning får man insticks/urvals

sortering med O(n2) Alternativ (eftersträvar en enkel tilldelning)

o Välj första/sista, slumpmässigto Medel/median mellan några styckeno Största av de två första som skiljer sig åt

Page 23: Datastrukturer och algoritmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

Dat

astr

ukt

ure

r o

ch a

lgo

ritm

erD

atas

tru

ktu

rer

och

alg

ori

tmer

VT08

Hur snabbt kan man sortera?

Jämförelsebaserad sortering Ω(nlog(n)) undre gräns

Nyckelsortering snabbare… Nästa föreläsning