Sökning och sortering. Linda Mannila

Relevanta dokument
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 11 Datastrukturer (DAT037)

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Programmering för språkteknologer II, HT2014. Rum

Magnus Nielsen, IDA, Linköpings universitet

Sökning och sortering

Föreläsning 11 Innehåll

Sortering. Intern/ extern? Antaganden. Vad kan vi kräva? Rank sort. Rank sort. På en nod/ distribuerad? Jämförelsebaserad/ icke jämförelsebaserad?

Problemlösning och funktioner Grundkurs i programmering med Python

Tommy Färnqvist, IDA, Linköpings universitet

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Sätt att skriva ut binärträd

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Föreläsning 12 Innehåll

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Föreläsning 12 Innehåll

Tenta i Grundläggande programmering DD klockan

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

Planering av ett större program, del 2 - for och listor. Linda Mannila

Föreläsning 5 Innehåll

Ordlistor, filhantering och ut på webben. Linda Mannila

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Algoritmer, datastrukturer och komplexitet

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Objektorienterad Programmering DAT043. Föreläsning 10 13/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 11 Innehåll. Sortering. Sortering i Java. Sortering i Java Comparable. Sortering. O(n 2 )-algoritmer: urvalssortering insättningssortering

Algoritmer, datastrukturer och komplexitet

Språket Python - Del 1 Grundkurs i programmering med Python

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Programmering II (ID1019) :00-11:00

Föreläsning 5. Rekursion

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Problemlösning och algoritmer

Rekursiva algoritmer sortering sökning mönstermatchning

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 3 Programmeringsteknik och C DD1316. Innehåll i listor. Uppdateringsoperatorer. +,* och listor. Listor. Indexering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC74 Lab 02 Listor, sammansatta strukturer

Föreläsning 13. Rekursion

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Algoritmer. Två gränssnitt

Övning 4. Hashning, sortering, prioritetskö, bästaförstsökning. Hitta på en perfekt hashfunktion för atomer. Hur stor blir hashtabellen?

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Laboration: Whitebox- och blackboxtesting

Innehåll. Sökning och hashtabeller. En bilsamling att söka i. En bil-klass att söka efter. Hur hittar vi alla bilar som uppfyller ett annat villkor

Datastrukturer D. Föreläsning 2

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Några saker till och lite om snabbare sortering

Tentamen i Algoritmer & Datastrukturer i Java

Sortering. Om du följt dessa steg korrekt så ska böckerna nu vara sorterade.

Föreläsning REPETITION & EXTENTA

Vad har vi pratat om i kursen?

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

1 Standardalgoritmer. 1.1 Swap. 1.2 Sök minsta värdet i en array

Datastrukturer och algoritmer

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Programmering II (ID1019) :00-17:00

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Några saker till och lite om snabbare sortering

Databaser - Design och programmering. Minnesteknik. Minnesteknik, forts. Hårddisk. Primärminne (kretsteknik) Fysisk design av databasen

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datalogi för E Övning 3

Datastrukturer och algoritmer

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

KTH, NADA, Vahid Mosavat. 1. Flervalsfrågor (5p)

SORTERING OCH SÖKNING

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Tentamen TEN1 HI

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Databaser Design och programmering Minnesteknik Minnesteknik, forts Utvecklingen Hårddisk Hårddisk, forts

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning 9. Sortering

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

Föreläsning 13 Innehåll

Programmering II (ID1019) :00-11:00

TDDC74 - Lektionsmaterial C

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Lösning av några vanliga rekurrensekvationer

729G04 Programmering och diskret matematik. Python 3: Loopar

Transkript:

Sökning och sortering Linda Mannila 27.11.2007

Denna föreläsning Sökningsalgoritmer Sorteringsalgoritmer Modulen time

Sökning Vanlig uppgift i datorsammanhang Exempel: Hitta en viss person i ett register Söka efter ett telefonnummer I sorteringsalgoritmer (hitta max, hitta min) Olika sökalgoritmer Sekventiell (linjär) sökning Binärsökning

Sekventiell (linjär) sökning Linear search Går igenom alla element i en lista från början Jämför det aktuella elementet i listan med det vi söker efter Om det element vi tittar på är det vi söker har hittat elementet och kan sluta Annars gå framåt ett steg i listan, jämför med det vi söker efter etc. Om vi kommer till slutet av listan och inte har hittat elementet avsluta

Sekventiell sökning Fördelar? Simpel Snabb om det eftersökta elementet finns i början av listan Nackdelar? Långsam om det eftersökta elementet inte finns i början av listan (kräver en massa jämförelser)

Binärsökning Binary search För sorterade datasamlingar Börjar med att titta på det mittersta elementet i en lista, jämför det med det vi söker efter Om det vi söker efter är mindre än det vi tittar på kan skippa högra delen av listan och upprepa processen på den vänstra halvan Om det vi söker är större än det vi tittar på skippa vänstra halvan Om det vi söker är det vi tittar på avsluta, vi har hittat vårt element

Binärsökning Sorted Array Compare X to the middle value of the array. If X=Y, (the middle element) we are done. If X < Y, we continue our search confine the search to first half only. If X > Y, we continue our search confine the search to second half.

Binärsökning Fördelar? Snabb Nackdelar? Kräver att data är sorterat... Men det kan lösas med en snabb sorteringsalgoritm, så i praktiken inget problem

Sökning linear_for.py linear_while.py binary.py

Tidtagning Modulen time >>> import time >>> dir(time) [' doc ', ' name ', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']

Exempel -time # Returnerar info om den lokala tiden som en tupel >>> time.localtime() (2007, 11, 26, 17, 30, 16, 0, 330, 0) # Returnerar info om den lokala tiden som en sträng >>> time.asctime() 'Mon Nov 26 17:32:04 2007' # Returnerar info om Greenwich-tiden som en tupel >>> time.gmtime() (2007, 11, 26, 15, 30, 19, 0, 330, 0) # Returnerar processorns tid i sekunder >>> time.clock() 662.06464536693909 Kan användas för tidtagning # Pausar exekveringen för så många sekunder som man # skickar som argument till funktionen >>> time.sleep(2)

Exempel import time lista = range(100000) # t1 innehåller starttiden (i sekunder) t1 = time.clock() # Kör funktionen linear_search(lista, 750) # t2 innehåller sluttiden (i sekunder) t2 = time.clock() # Räknar ut exekveringstiden (i sekunder) exek_tid = t2-t1 # Skriver ut tiden (i sekunder och millisekunder) print "Exekveringen tog %0.4f sekunder" % exek_tid print "Exekveringen tog %0.4f millisekunder" % (exek_tid * 1000)

Sökning Exempel med tidtagning search.py search_avg.py Med lite avancerade features för den som är intresserad Illustrerar hur man kan skicka funktioner som argument till en annan funktion Krävs ej för kursen search_func_as_params.py search_func_as_params_nicer_output.py

Sortering Bubble sort Selection sort Insertion sort Merge sort Quicksort Rekursiva torsdagens tema

Bubble sort Enklaste sorteringsalgoritmen Tyvärr också den minst effektiva Grundidén är att gå igenom en lista med element upprepade gånger, se på två närliggande element åt gången och byta plats på dem ifall de kommer i fel ordning Flashdemo: bubble.swf

Selection sort Från början är hela listan osorterad Grundidén är att hela tiden välja ut det största elementet i den osorterade delen av listan och byta plats med det och det sista elementet i den osorterade delen av listan. Samtidigt ökar antalet element i den sorterade delen med ett och antalet i den osorterade delen minskar med ett. Flashdemo: selection.swf

Insertion sort Från början är hela listan osorterad. Grundidén är att samla de sorterade elementen i rätt ordning i början av listan. Ett element i taget från den osorterade delen insätts på rätt plats i den sorterade delen. Samtidigt ökar antalet element i den sorterade delen med ett och antalet i den osorterade delen minskar med ett. Flashdemo: insertion.swf