Skning och sortering Linda Mannila 27 11 2007

  • Slides: 17
Download presentation
Sökning och sortering Linda Mannila 27. 11. 2007

Sökning och sortering Linda Mannila 27. 11. 2007

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

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

Sökning n Vanlig uppgift i datorsammanhang n Exempel: n n Hitta en viss person

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

Sekventiell (linjär) sökning n Linear search n Går igenom alla element i en lista

Sekventiell (linjär) sökning n Linear search n Går igenom alla element i en lista från början n n 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 n Fördelar? Simpel n Snabb om det eftersökta elementet finns i början

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

Binärsökning n Binary search n För sorterade datasamlingar n Börjar med att titta på

Binärsökning n Binary search n För sorterade datasamlingar n Börjar med att titta på det mittersta elementet i en lista, jämför det med det vi söker efter n n n 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,

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 n Fördelar? n n Snabb Nackdelar? Kräver att data är sorterat. . .

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

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

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

Tidtagning n Modulen time >>> import time >>> dir(time) ['__doc__', '__name__', 'accept 2 dyear',

Tidtagning n Modulen time >>> import time >>> dir(time) ['__doc__', '__name__', 'accept 2 dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'timezone', 'tzname']

Exempel - time # Returnerar info om den lokala tiden som en tupel >>>

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() Kan 662. 06464536693909 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) # t 1 innehåller starttiden (i sekunder) t

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

Sökning n Exempel med tidtagning n n n search. py search_avg. py Med lite

Sökning n Exempel med tidtagning n n n search. py search_avg. py Med lite avancerade features för den som är intresserad n n 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 n Selection sort n Insertion sort n Merge sort n Quicksort

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

Bubble sort n Enklaste sorteringsalgoritmen n Tyvärr också den minst effektiva n Grundidén är

Bubble sort n Enklaste sorteringsalgoritmen n Tyvärr också den minst effektiva n 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 n Flashdemo: bubble. swf

Selection sort n Från början är hela listan osorterad n Grundidén är att hela

Selection sort n Från början är hela listan osorterad n 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. n Samtidigt ökar antalet element i den sorterade delen med ett och antalet i den osorterade delen minskar med ett. n Flashdemo: selection. swf

Insertion sort n Från början är hela listan osorterad. n Grundidén är att samla

Insertion sort n Från början är hela listan osorterad. n 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. n n n Flashdemo: insertion. swf