Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afAnita Danielsen Redigeret for ca. et år siden
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
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.