Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.

Lignende præsentationer


Præsentationer af emnet: " Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning."— Præsentationens transcript:

1  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning

2  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.4 Fornuftig søgning... ?

5  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.13 Binær søgning i Java ?

14  Michael E. Caspersen, 2000Introducerende 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  Michael E. Caspersen, 2000Introducerende 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 m h = mi; } return found; } Bineær søgning (Java)

16  Michael E. Caspersen, 2000Introducerende 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 " Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning."

Lignende præsentationer


Annoncer fra Google