• Keine Ergebnisse gefunden

Informatik II – Kapitel 11

N/A
N/A
Protected

Academic year: 2021

Aktie "Informatik II – Kapitel 11"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1

marc-oliver pahl

Informatik II – Kapitel 11

„Such-Algorithmen“

Zusammenfassung des Kapitel 11 Küchlin, Weber, Einführung in die Informatik, 2.Auflage

10.6.2004

marc-oliver pahl

Was wollen wir tun? 2

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 aF)

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.;

2

marc-oliver pahl

Lineare Suche (greedy) 3

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;

}

marc-oliver pahl

Lineare Suche (greedy) mit Sentinel (Waechter) 4

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;

}

(2)

3

marc-oliver pahl

Divide & Conquer binaere Suche 5

ƒ Binäre Suchenach 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.{

marc-oliver pahl

Kombinationssuche 6

ƒ Wie wir in den Übungen gesehen haben,

ist eine Kombination beider Suchverfahren

am effizientesten.

Referenzen

ÄHNLICHE DOKUMENTE

  Weiss: Data Structures and Problem Solving Using Java, Addison Wesley, 2002, ISBN: 0201748355. C G C C

  Eingabespezifikation: Es muss genau spezifiziert sein, welche Eingaben erforderlich sind und welchen Bedingungen diese Größen genügen müssen, damit der Algorithmus

2.  Sprache ist strongly typed (stark typisiert), wenn es wenig automatische Konvertierung (coercion) für die eingebauten Operatoren und Typen gibt. §  Insbesondere: wenn es

Abgabe in den ¨

Beim Heraussuchen des Objektes muss verglichen werden, ob der Wert der Richtige ist und im negativen Fall an den Folgestellen in der Tabelle gesucht werden, bis entweder der.

Beim Heraussuchen des Objektes muss verglichen werden, ob der Wert der Richtige ist und im negativen Fall an den Folgestellen in der Tabelle gesucht werden, bis entweder der

2.7.2004.. die rechten Seiten von Regeln sind entweder einzelne Terminalzeichen oder ein Terminalzeichen gefolgt von einer Variablen.. „A -&gt; a

die rechten Seiten von Regeln sind entweder einzelne Terminalzeichen oder ein Terminalzeichen gefolgt von einer Variablen.. „A -&gt; a