Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.

Lignende præsentationer


Præsentationer af emnet: "Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser."— Præsentationens transcript:

1 Søgning

2  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser Søgning på Internettet Søgning efter en delstreng i en anden (søgning i to niveauer!) Afgør om et tal er et primtal Afgør om en sequence er sorteret...

3  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.3 Søgning (ineffektiv) public static boolean search(int e, Sequence s) { // post: returnerer om e findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = 0; found = false; while ( i != s.size() ) { if ( s.elementAt(i) == e ) found = true; i++; } return found; }

4  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.4 Fornuftig søgning... ?

5  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.5 public static boolean search(int m, Sequence s) { // post: returnerer om m findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = 0; found = false; while ( !found && i != s.size() ) { int e = s.elementAt(i); if ( e == m ) found = true; else i++; } return found; } Lineær søgning

6  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.6 Søgeskabelon Søgedomæne: S Kandidatmængde: K  kandidatelement : e Målelement : m I et søgedomæne, S, søger vi efter et målelement, m. På et givet tidspunkt under søgningen har vi afsøgt en del af søgedomænet; den resterende del kalder vi kandidatmængden, K. Et skridt i søgningen består i at vælge et (tilfældigt) kandidatelement, e, fra kandidatmængden og sammenligne dette med målelementet m. Enten har vi fundet det vi søger, eller også afskærer vi en del af kandidatmængden. Søgningen slutter når vi har fundet det vi søger eller når kandidatmængden er tom.

7  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.7 Søgeskabelon, algoritmisk initialiser K ; found = false ; while ( !found && K  Ø ) { udvælg e fra K ; if ( e == m ) found = true ; else split K ; }

8  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.8 Konkretisering af skabelonen S : initialiser K : K  Ø : udvælg e fra K : split K : s[0..s.size()) i = 0; i != s.size e = s.elementAt(i); i++; s: i e (usorteret)

9  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.9 public static boolean search(int m, Sequence s) { // post: returnerer om m findes i s boolean found; // resultat-variabel i = 0; found = false; while ( !found && i != s.size() ) { int e = s.elementAt(i); if ( e == m ) found = true; else i++; } return found; } Lineær søgning

10  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.10 e == m ? initialiser K ; found = false ; while ( !found && K  Ø ) { udvælg e fra K ; if ( e == m ) found = true ; else split K ; } Hvad med søgning efter en String i en ArrayList? if ( e.equals( m ) )

11  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.11 Søgning i sorteret sequence S : initialiser K : K  Ø : udvælg e fra K : split K : s[0..s.size()) i = 0; i != s.size e = s.elementAt(i); if ( e < m ) i++; else // e > m i = s.size(); s: i e (sorteret)

12  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.12 public static boolean search(int m, Sequence s) { // pre: s er sorteret (  ) // post: returnerer om m findes i s boolean found; // resultat-variabel i = 0; found = false; while ( !found && i != s.size() ) { int e = s.elementAt(i); if ( e == m ) found = true; else if ( e < m ) i++; else // e > m i = s.size(); } return found; } Optimeret lineær søgning

13  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.13 Men vi kan gøre det bedre... Jeg tænker på et tilfældigt tal mellem 1 og 100; hvor hurtigt kan I gætte det? Hvert gæt koster 1 kr. Hvor mange kroner risikerer I at skulle betale?

14  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.14 Binær søgning i Java ?

15  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.15 Binær søgning s: l e h mi S : initialiser K : K  Ø : udvælg e fra K : split K : s[0..s.size()) l = 0 ; h = s.size(); l < h mi = (l+h)/2; e = s.elementAt(mi) if ( e < m ) l = mi+1; else // e > m h = mi; (sorteret)

16  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.16 public static boolean search(int m, Sequence s) { // pre: s er sorteret (  ) // post: returnerer om m findes i s boolean found; // resultat-variabel l = 0; h = s.size(); found = false; while ( !found && l<h ) { int mi = (l+h)/2; int e = s.elementAt(mi); if ( e == m ) found = true; else if ( e < m ) l = mi+1; else // e > m h = mi; } return found; } Bineær søgning (Java)

17  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.17 Binær søgning er effektiv! s.size() sammenligninger 10 10 1 4 100 10 2 7 1.000 10 3 10 10.000 10 4 14 100.000 10 5 17 1.000.000 10 6 20... 10 9 30... 10 12 40


Download ppt "Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser."

Lignende præsentationer


Annoncer fra Google