Kap.8 Sortering og søking sist oppdatert 22.02 • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Matematisk Induksjon.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Algoritmer for søk og sortering Førsteamanuensis Alf Inge Wang
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Ulike sorteringsmetoder Kompleksitet av dem
Objektorientert programmering Objektorientert systemutvikling
Variasjoner i subklasser.  Prinsippskissen er meget enkel  En abstrakt klasse har en konkret metode og en abstrakt metode  Hver subklasse realiserer.
IS-102 Klassedefinisjoner
C# for javaprogrammerere
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
Øvingsforelesning 3 Grafer, BFS, DFS og hashing
Kompleksitetsanalyse
Øvingsforelesning 2 Trær og søking i dem, samt litt diverse emner Kristian Veøy
Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø
Øvingsforelesning Magnus Haug
En gang til!? .
Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering.
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Kap 05 Abstrakte datastrukturer. Arv - Implementering Interface / Abstrakte klasser / Konkrete klasser Concrete classAbstract class Interface extends.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Kap 10 Graf.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
INF 295 Algoritmer og datastrukturer Forelesning 21 Merge, Quick og Bøtte, Radix og ekstern sortering Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 20 - Kapittel 7 Boble-, innstikk-, Shell-, Heap-, Quick-, Mergesortering Hans Fr. Nordhaug (Ola Bø)
Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 2 - kapittel 1 Hans F. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9b Balanserte (binære) trær Hans Fr. Nordhaug.
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
En enkel introduksjon Geir H. Hansen & Martin Setek SUAF-SO USIT jQuery.
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Ortering Mål: Se på forskjellige måter for sortering.
Kapittel 6 Objektorientert design. 6.1 Programvareutvikling Skriving av kode ein liten del av arbeidet med å lage programvare Fire hovudaktivitetar Kravspesifikasjon.
Sorterings- Algoritmer Algoritmer og Datastrukturer.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
INF1000 (Uke 12) Sortering og eksamensoppgaver Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Gruppeøving 1.mars Agenda “Endelige” kriterier for forretningsideene Presentasjon av hjemmeoppgaver Halveringsprosess Kort presentasjon av eksterne case.
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 9 Polymorfi. 9.1 Sein binding Ofte er det perfekt match mellom typen til ein variabel og objektet han refererer til ChessPiece bishop;... bishop.
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
INF 295 Algoritmer og datastrukturer Forelesning 23 Kompleksitet Hans Fr. Nordhaug/ Ola Bø.
Typeparametrisering Generel kode (generisk kode).
Arv Gjenbruk. Begreper Super Overriding – Samme signatur Polymorfi – «en ting kan bety mange ting»
Iterator i Java boolean hasNext() E next() void remove()
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle” sorteringsmetoder fra i høst - nye -analyse Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 11-1

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Tema • Undersøke lineær søking og binær søking. • Undersøke flere sorteringsalgoritmer 8.2: – Utvalgssortering (skal kunne fra i høst) – Sortering ved innsetting (skal kunne fra i høst) – Bobblesortering (skal kunne fra i høst ) – Kvikksortering (ny) – Flettesortering (ny) Kap.8.3: Radix-sort(ny, bruk av køer, sortering uten sml) – Kap.11: Haugsortering: (ny) • Kunne analysere algoritmene

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Søking • Søking er en prosess der en kan ta stilling til om et målelement fins eller ikke fins blant en samling av elementer. • Dette krever gjentatt sammenligning mellom målelementet og elementene i samlingen. • En effektiv søking utfører ikke flere sammenligninger enn nødvendig.

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Interface Comparable • Vi ønsker å definere algoritmer slik at de kan søke etter et hvilket som helst objekt. Objektene som skal sorteres må være av en klasse som implementerer interface Comparable. • Comparable inneholder metoden, compareTo, som er laget for å returnere et heltall som angir relasjonen mellom to objekter : obj1.compareTo(obj2) • Dette kallet returnerer et tall mindre, lik eller større enn 0 hvis obj1 er mindre enn, lik eller større enn obj2 h.h.v..

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Interface Comparable • Alle metodene som blir presentert er metoder i klassen SorteringOgSøking. • Denne klassen gjør bruk av den generiske typen T. • Vi kan la T arve Comparable public class SorteringOgSøking

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Lineær søking • Ved lineærsøk undersøkes hvert element i søkeområdet, ett om gangen, inntil målelementet er funnet eller til vi kan avgjøre at målelementet ikke fins.

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Lineær søking • Vi har foreløpig ikke antatt at elementene er sorterte. • Vi undersøker hvert element i tur og orden på en lineær måte. • Enkelt å forstå, men ikke spesielt effektivt.

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Lineær søking Sett funnet til usann • Gjenta så lenge flere elementer og ikke funnet – Hvis elementet er lik søkeelementet sett funnet til sann

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Lineær søking i usortert tabell //Anta tabelllen er fylt med data public boolean lineærSøkU(T[] data, int min, int maks, T element){ int indeks = min; boolean funnet = false; while (indeks <= maks &&!funnet){ if(data[indeks].compareTo(element) == 0) funnet = true; indeks++; }//while return funnet;}//metode

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Analyse lineærsøk (1 ) - usortert, elementet fins • Listen av n antall elementer er usortert. Vi antar elementene er ulike. Vi søker etter målelement som fins i listen. Vi skal finne antall sml. (antall kall av compareTo()). • I verste tilfelle må vi søke gjennom hele listen til vi finner det som siste element. • Antall sml. blir da n, dvs O(n).

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Analyse lineærsøk (1) - usortert, elementet fins Et mål for gj.sn. antall sml blir: ( … + n)/n = n(n+1)/2n = (n+1)/2 Dvs O(n)

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Analyse lineærsøk (2) - usortert, elementet fins ikke • Listen av n antall elementer er usortert. Alle elementene er ulike. Vi søker etter målelementet som ikke fins i listen. Vi skal finne antall sml. • Vi må alltid søke gjennom hele listen. • Antall sml blir n både i det verste tilfellet og i gj.sn. Altså O(n).

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Lineær søking i sortert tabell NB! Vi kan avbryte søkingen tidligere i en sortert tabell hvis elementet ikke fins Sett funnet til usann Gjenta så lenge flere elementer og aktuelt element < søkeelementet hent neste element Hvis aktuelt element er lik søkeelementet sett funnet til sann

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Lineær søking i sortert tabell NB! Vi kan avbryte søkingen tidligere i en sortert tabell hvis elementet ikke fins //Anta tabelllen er fyllt med data public boolean lineærSøkS(T[] data, int min,int maks,T element) int indeks = min; boolean funnet = false; while (data[indeks].compareTo(element) < 0 && indeks <= maks){ indeks++; }//while if(data[indeks].compareTo(element)) == 0) funnet = true; return funnet; }//metode

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Analyse lineærsøk (3) – sortert, elementet fins • Listen av n antall elementer er sortert. Alle elementene er ulike. Vi søker etter målelementet som fins i listen. Vi skal finne antall sml. • I verste tilfelle må vi søke gjennom hele listen til vi finner målelementet som det siste elementet. Antall sml. blir da n, dvs O(n). • Gj.sn. antall sml. blir (n +1)/2, dvs O(n)

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Analyse lineærsøk (4) - sortert, elementet fins ikke • Listen av n antall elementer er sortert. Vi søker etter målelement som ikke fins i listen. • Vi må søke gjennom inntil et element er større enn målelementet. Antall sml. i verste tilfellet blir n og gj.sn blir ca n/2, dvs. O(n) i begge tilfeller. • Lineærsøk klarer ikke utnytte sorteringen på en spesielt god måte. O(n).

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Binærsøk • Hvis elementene er sorterte kan vi utnytte det mer effektivt enn ved lineærsøk. • En binær søking eliminerer større deler av søkeområdet ved hver sammenligning. • I stedet for å starte søking i en ende, så starter vi søkingen i midten. • Hvis elementet vi søker etter ikke påtreffes på midtelementet vet vi at hvis målelementet fins, så må det være i den ene av de to halv- delene. • Vi kan da hoppe til midten av den “riktige” halvdelen og fortsette der på samme måte.

Copyright © 2005 Pearson Addison-Wesley. All rights reserved FIGUR 8.2 Binærsøk

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Binærsøk • For eksempel, finn tallet 29 i følgende sorterte liste av tall: • Sammenlign målelementet 29 med midtverdien 54. • Vi vet nå at hvis 29 fins i listen, så må det være i nedre halvdelen av listen. • Med en sammenligning har vi eliminert halvparten av elementene.

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Analyse binærsøk • Ved starten har vi n elementer. • Etter første kall av metoden binærSøk har vi n/2 elementer. • Etter andre kall av metoden binærsøk har vi n/4= n/2 2 elementer…osv. • Generelt etter i’te kall av metoden binærsøk har vi n/2 i elementer. • Det maksimale antall (i verste tilfellet) rekursive kall er det minste heltall m slik at n/2 m log 2 n Slik at vi får: m =  log 2 n  + 1. Dvs arbeidsmengden i verste tilfelle er  (log 2 n). • Sml arbeidsmengden ved lineært søk i en tabell i verste tilfelle:  (n). •   betyr rundet av nedover til nærmeste heltall.

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Binærsøking • En binær søkealgoritme er ofte implementert rekursivt. • Hvert rekursivt kall søker i mindre og mindre søkeområder (ca halvparten av foregående).

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Binærsøking sett funnet til usann Hvis flere elementer og ikke funnet finn midtelementet Hvis midtelementet er lik søkeelementet så sett funnet til sann Hvis midtelementet er større enn søkeelementet så fortsett binær søking til venstre for midtelementet Hvis midtelementet er mindre enn søkeelementet så fortsett binær søking til høyre for midtelementet returner funnet

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Binærsøk rekursiv public boolean binærSøk(T[] data, int min, int maks, int element){ boolean funnet = false; int midtpunkt = (min + maks) / 2; // midtpunktet if (data[midtpunkt].compareTo(element) == 0) funnet = true; else if(data[midtpunkt].compareTo(element) > 0){ if(min <= midtpunkt - 1) funnet = binærSøk(data, min, midtpunkt-1, element); } else if (midtpunkt + 1 <= maks) funnet = binærSøk(data, midtpunkt+1, maks, element); return funnet; }//

Copyright © 2005 Pearson Addison-Wesley. All rights reserved Sammenligning av søkealgoritmer • I gj.sn. vil et lineært søk sammenligne n/2 elementer hvis målelementet fins. • Derfor er lineærsøk O(n). • Verste tilfellet for et binærsøk er (log 2 n) sml. • Et binærsøk er en logaritmisk algoritme. • Den har tidskompleksitet av O(log 2 n). • Men husk at for binærsøk må elementene være sorterte. • For stor n, vil binærsøk være mye raskere enn lineærsøk. Tegn opp n og logn!