© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

Att söka till högskolan
Relationsdatabasdesign
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
xn + yn = zn Problemlösning Några enkla metoder
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
2D1311 Programmeringsteknik med PBL
Algoritmer och data strukturer -Länkade listor
Sökning och sortering Linda Mannila
DAB752: Algoritmteori Leif Grönqvist
Logikprogrammering Ons, 25/9
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Några standardalgoritmer
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
Programmeringsteknik för K och Media
DoA VT -07 © Anders Broberg, Lena Kallin Westin, P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)) A.
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Datastrukturer och algoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 6 Asymtotisk analys.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 7 Träd.
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
Algoritm analys och rekursiva metoder kap 5,7
DAV B04 - Databasteknik Indexering (kap 14).
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Programmering B PHP Lektion 2
KARTKUNSKAP 1.
Pathfinding. –Vad är det? –Sökning från A till B.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Programmering B PHP Lektion 3
Vektorer (klassen Vector) Sortering
Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1
Listor En lista är en föränderlig ordnad samling objekt.
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Högskoleverkets kvalitetskonferens i Umeå 2007
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 11 Trie, Sökning och Sökträd.
Datastrukturer och algoritmer
Logikprogrammering 21/10 Binära träd
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 16.
Datastrukturer och algoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Sökträd, naiva och balancerade lösningar -HashTable -- Kapitel.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
BVForum - en genomgång för revisorer Sören Thuresson.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 12.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
1 Objektorienterad programmering för ingenjörer, VT04 Kort repetition av C-programmering och nyttiga verktyg. Tomas Larsson B439.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Datastrukturer och algoritmer
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8 Relationer, prioritetsköer och grafer.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Hash Tabeller och Graf.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Presentationens avskrift:

© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehåll  Hashtabeller igen  Den konstiga tabellen...  Sortering  Varför ska man sortera  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

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Från: Linear prob = Sluten hashing med linjär teknik Chaining = Öppen hashing Double hash = Sluten hashing med kvadratisk teknik

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Misslyckad sökning, öppen hashing  Antag att det är lika sannolikt att det n:te värdet x hashas till var och en av listorna.  Eftersom den lista där x ska placeras måste genomsökas helt innan sökningen misslyckas så krävs det O(antal element i listan k) sökningar  I medelfall blir det

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Sluten hashing, linjär teknik  Medelantalet platser som måste prövas vid en insättning och misslyckad sökning är uppåt begränsad av (1+1/(1- ) 2 ) /2, ( = 0.5 ger 2.5)  Medelantalet platser för en lyckad sökning är uppåt begränsad av (1+1/(1- ))/2, ( = 0.5 ger 1.5)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Sortering varför?  Snabba upp andra algoritmer  Sökning  Hantera stora datamängder

DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Saker att beakta  Absolut komplexitet  Totala komplexiteten i alla implementationssteg oTabell->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?

DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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…

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Olika grundprinciper  Insättnings – O(n 2 )  välj ut ett godtyckligt objekt och sätt in det på rätt plats  Urvals – O(n 2 )  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

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Mer principer…  Naiva sorteringar - O(n 2 )  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)

Sammanfattande tabell baserad på tabellen på sidan Namn Bäst MedelSämstMinneStabil Insertion sortO(n)O(n + d)O(n 2 )O(1)X Selection sortO(n 2 ) O(1) Bubble sortO(n)—O(n 2 )O(1)X Merge sortO(n log n) O(n)X In-placeIn-place merge sortmerge sortO(n log n) O(1)X QuicksortO(n log n) O(n 2 )O(log n) HeapsortO(n log n) O(1) Bucket sortO(n·k) O(n 2 ·k)O(n·k)X LSD Radix sortRadix sortO(n·k/s) O(n)X MSD Radix sortRadix sortO(n·k/s) O(n·(k/s)·2 s )O((k/s)·2 s )

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Insertion sort - insättningssortering  Välj ett godt. objekt och sätt in det på rätt plats  O(n 2 )  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.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Selection sort - urvalssortering  Välj det objekt som är på tur och sätt in det sist/först  O(n 2 )  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)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Bubble sort - utbytessortering  byta plats på objekt som ligger fel inbördes  O(n 2 )  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)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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))

DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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!

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Mergesort – samsortering  Algoritm för att sortera sekvensen S  Divide: Om S har 2 eller flera element dela S i två lika stora delsekvenser S1 och S2  Recurse: Sortera sekvenserna S1 och S2 rekursivt  Conquer: Sätt tillbaka elementen i S genom att slå samman S1 och S2 till en sorterad sekvens

Ihopslagning av två sekvenser Agorithm merge(S1,S2,S) while S1 is not empty and S2 is not empty do if S1.first().element() ≤ S2.first().element() then S.insertLast(S1.remove(S1.first())) else S.insertLast(S2.remove(S2.first())) while S1 is not empty do S.insertLast(S1.remove(S1.first())) while S2 is not empty do S.insertLast(S2.remove(S2.first()))

DoA VT -07 © Anders Broberg, Lena Kallin Westin, S S S Exempel på sammanslagning

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Analys av exekveringstiden  Höjden på sorteringsträdet kopplat till sorteringen av en sekvens med n element blir log 2 (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/2 i ) där i är djupet på noden ligger på, ty storleken på sekvensen är n/2 i  Det är exakt 2 i noder på djupet i => totala tiden på djupet i i trädet är O(2 i n/2 i ) vilket är O(n) och höjden på trädet är log 2 (n)  Så den totala tidskomplexiteten är O(nlog 2 (n))

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Quicksort  Algoritm  Välj ut ett pivoelement  Dela upp listan i tre delar Less, Equal, Greater  Sortera Less och Greater rekursivt  Slå ihop Less+Equal+Greater

DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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 anropa på Less och Greater

DoA VT -07 © Anders Broberg, Lena Kallin Westin, 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(n 2 )  Alternativ (eftersträvar en enkel tilldelning) oVälj första/sista, slumpmässigt oMedel/median mellan några stycken oStörsta av de två första som skiljer sig åt

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Exempel… LRR

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Hur snabbt kan man sortera?  Jämförelsebaserad sortering  Ω(nlog(n)) undre gräns  Nyckelsortering snabbare…  Nästa föreläsning

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Ω(nlog(n)) – bevis…  Exekveringstiden för en jämförelsebaserad sortering måste vara lika med eller större än djupet på det beslutsträd som är associerad med algoritmen  Varje nod i detta träd är kopplat till en jämförelse som bestämmer ordningen mellan två element i S  Därav, varje extern nod i T representerar en unik permutation av elementen i S, och det måste finnas n! noder i T, och höjden är log(n!)  Eftersom n! har åtminstone n/2 termer som är större än eller lika med n/2 => log(n!) = log(n/2)n/2= (n/2)log(n/2) => Ω(nlog(n))