Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.

Lignende præsentationer


Præsentationer af emnet: "I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning."— Præsentationens transcript:

1 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning

2 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.4 Fornuftig søgning... ?

5 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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

9 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.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 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.10 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

11 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.11 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

12 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.12 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?

13 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.13 Binær søgning i Java ?

14 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.14 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;

15 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.15 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)

16 i o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.16 Binær søgning er effektiv! s.size() sammenligninger 10 10 1 4 100 10 2 7 1000 10 3 10 10000 10 4 14 100000 10 5 17 1000000 10 6 20... 10 9 30... 10 12 40


Download ppt "I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning."

Lignende præsentationer


Annoncer fra Google