• Keine Ergebnisse gefunden

„Such-Algorithmen“ Informatik II – Kapitel 11

N/A
N/A
Protected

Academic year: 2021

Aktie "„Such-Algorithmen“ Informatik II – Kapitel 11"

Copied!
6
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Informatik II – Kapitel 11

„Such-Algorithmen“

Zusammenfassung des Kapitel 11

Küchlin, Weber, Einführung in die Informatik, 2.Auflage

10.6.2004

(2)

m a r c – o l i v e r p a h l

Was wollen wir tun?

Wir wollen eine Funktion

suchePosition( F, a )

realisieren, die dem folgenden Algorithmenschema genügt:

suchePosition( F, a ):

// Vorbedingung: F ist eine Folge, a ein Element

// Nachbed.: Rückgabe = (Position von a in F) | (-1 wenn a  F)

i. Initialisiere:

res = -1; S = Mg. Aller Suchpos. In F;

ii. Trivialfall:

if (S == ) return res;

iii. Reduktion:

Wähle nächste Suchposition p; Entferne p aus S;

iv. Rekursion:

if (F[p] == a) return res=p; else weiter bei ii.;

(3)

m a r c – o l i v e r p a h l

Lineare Suche (greedy)

public static int linearSearch( Object[] f, Object a){

for ( int i=0; i<f.length; i++) if (f[i].equals(a) )

return i;

return -1;

}

public static int linearSearch( Object[ ] f, Object a){

int i=0;

while ( i<f.length && !(f[i].equals(a)) ) i++;

if (f[i].equals(a)) return i;

else return -1;

}

(4)

m a r c – o l i v e r p a h l

Lineare Suche (greedy) mit Sentinel (Waechter)

a

public static int linearSearch( Object[ ] f, Object a){

int i=0; „f=f + a;“

while ( !(f[i].equals(a)) ) i++;

if (i =< f.length) return i;

else return -1;

}

Sentinel

Laufzeit in O(n) (linear)

public static int linearSearch( Object[ ] f, Object a){

int i=0;

while ( i<f.length && !(f[i].equals(a)) ) i++;

if (f[i].equals(a)) return i;

else return -1;

}

(5)

m a r c – o l i v e r p a h l

Divide & Conquer binaere Suche

Binäre Suche nach dem Divide & Conquer Prinzip macht nur Sinn, wenn nach dem Teile-Schritt ein Teil ausgeschlossen werden kann.

public static int binarySearch( Comparable[ ] f, Comparable a, int l, int r){

int p=(l+r)/2; // Teilungsposition

int c=f[p].compareTo(a); // Vergleich: 0: gleich, <0:

größer, >0: kl

if (c == 0) return p; // gleich => gefunden

if (l==r) return -1 ; // nicht gefunden

(letztes verbleibendes Element ist ungleich)

if (c<0) return binarySearch(f, a, l, p-1); // links weiter

else return binarySearch(f, a, p+1, r); // rechts weiter

}

7 9 11 20 23 27 37 42 65 77 88 89

binarySearch(f, „88“, 0, 11):

37 42 65 77 88 89 7 9 11 20 23 27

77 88 89 37 42 65

7 9 11 20 23 27

p=(l+r)/2;

Laufzeit in O(log(n)) (logarithmisch)

Initialisierung{

Trivialfall{

Red./ Rek.{

(6)

m a r c – o l i v e r p a h l

Kombinationssuche

• Wie wir in den Übungen gesehen haben,

ist eine Kombination beider Suchverfahren

am effizientesten.

Referenzen

ÄHNLICHE DOKUMENTE

Sollen Objekte zur Laufzeit von anderen Objekten erzeugt werden, so wird dazu der new-Operator verwendet. Objekte können sowohl in Form von Instanzvariablen oder in Form von

gibt true zurück, wenn das Fileobjekt für das Programm lesbar ist. • public

Tabellieren Sie die Werte, die m , n, q und r von Schleifendurchlauf zu Schlei- fendurchlauf annehmen, wenn der ggT von 15333 und 1235 mit Hilfe des euklidischen Algorithmus

” Spezifizieren“ Sie in Form eines Klassendiagramms (vgl. Sparbuch- Spezifikation der Vorlesung) einen Datentyp Bestellung.

Durch Modifikation einer Eigenschaft oder Hinzuf¨ ugen einer neuen Eigen- schaft kann die implizite Spezifikation so ge¨ andert werden, dass nur noch die Funktion CHS diese erf¨

Schreiben Sie ein Programm, das mit Hilfe des in C++ vordefinierten Datentyps string Zeichenketten vom Benutzer anfordert und sodann nach einem Kontrollausdruck der

§  Theorie: liefert untere Schranke, die für jeden Algorithmus gilt, der das Problem löst.. §  Spezieller Algorithmus liefert obere Schranke für die Lösung des

  Theorie: liefert untere Schranke, die für jeden Algorithmus gilt, der das Problem löst..   Spezieller Algorithmus liefert obere Schranke für die Lösung des