Pseudo-Quellcode/Algorithmus/Rekursion

Neue Frage »

sonja1893 Auf diesen Beitrag antworten »
Pseudo-Quellcode/Algorithmus/Rekursion
Also das hier ist eine besonders seltsame Aufgabe (finde ich zumindest).

Es geht um diesen Quellcode:

BINARY SEARCH(A,a)
1 l <- 1
2 r <- n
3 k <- 0
4 while l < r do
5 k <- k+1
6 m <-
7 if A[m] a then l <- m
8 else r <- m-1
9 return A[l] = a

Und die Aufgabe lautet:
Der obenstehende Algorithmus bekommt als Eingabe ein sortiertes Feld (Array) A mit n Elementen. Es gilt also A[1] A[2] ... A[n]. Dabei sei n eine Zweierpotenz, d.h. n = 2^p, für ein p 0. Außerdem ist ein Wert a gegeben. Der Algorithmus soll herausfinden, ob a in A vorkommt.
Die dabei verwendete Variable k wird eigentlich nicht benötigt. Sie ist nur zu Erklärungszwecken da.

a) Kommt a nicht in A vor, dann ist BINARY SEARCH korrekt, da dies am Ende durch den Test in Zeile 9 sichergestellt wird. Nehmen wir im Folgenden also an, dass a in A vorkommt. Wir müssen zeigen, dass BINARY SEARCH dann a findet. Zeigen Sie dazu folgende Schleifenvariante in Zeile 4:
r - l n/2^k und A[l] a A[r].


b) Algorithmus BINARY SEARCH vergleicht die Elemente von A mit a nur in Zeile 5 (abgesehen vom Schluss in Zeile 9). Mit V(n) bezeichnen wir die Anzahl der Vergleiche, die BINARY SEARCH während des gesamten Ablaufs in Zeile 5 macht. Begründen Sie, dass folgende Rekursionsgleichung für V(n) gilt: V(1) = 0 und V(n) = 1+V(n/2).
Zeigen Sie durch Induktion, dass V(n)=log n die Lösung dieser Rekursionsgleichung ist.

Also zu dieser Aufgabe fällt mir echt nur "hä?" ein. Ich hab keinen Plan, wie das gehen soll. Blickt einer von euch da vielleicht durch?
Poff Auf diesen Beitrag antworten »
RE: Pseudo-Quellcode/Algorithmus/Rekursion
Da ich zu faul bin mich in diesen 'Formalismus' hineinzudenken
nur dies, vielleicht hilft dir das ja.

Das Prinzip des Binary Search ist folgendes:
Du teilst eine sortierte vorhandene Menge in zwei 'gleiche' Teile
und prüfst in welcher das gesuchte sich befindet.
Diejenige Teilmenge in der das gesuchte ist wird nun erneut geteilt
und geprüft in welcher das gesuchte ist ... usw.

In Folge triffst du nach recht wenigen Zugriffen auf das eigentlich
gesuchte Element.

Du musst dich nun nur fragen wie oft sich eine Ausgangsmenge A
überhaupt teilen lässt und schon hast du die obere Abschätzung
für die maximal möglichen Zugriffe überhaupt bei einer Suche.

...
sonja1893 Auf diesen Beitrag antworten »
RE: Pseudo-Quellcode/Algorithmus/Rekursion
Was ist denn eigentlich ein Array oder sortiertes Feld?
Thomas Auf diesen Beitrag antworten »

http://www.net-lexikon.de/Array.html

Gruß,
Thomas
Tonfilm Auf diesen Beitrag antworten »

array=feld (allgemein).
um den binary search anwenden zu können brauchst du ein sortiertes feld (spezialfall von array), d.h. deine elemente im feld sind der grösse nach geordnet.

funktioniert dann wie es poff geschrieben hat, du teilst das feld in der mitte und prüfst, ob das elemet das du suchst im 'oberen' oder 'unteren' teil liegt
(indem du es mit dem 'mittleren' element vergleichst). das gleiche wird dann mit dem entsprechenden abschnitt des feldes nochmal gemacht usw. bis man das element gefunden hat oder auch nicht ...

der such algorithmus hat ein sehr gutes laufzeitverhalten, da man wesentlich weniger schritte machen muss als es elemente im feld gibt, die komplexität ist O(log(n)).
sonja1893 Auf diesen Beitrag antworten »

Ok. Aber ich kapier immer noch nicht, was ich bei a) und b) genau machen soll. unglücklich
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »