\documentclass{bschlangaul-aufgabe} \bLadePakete{pseudo} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 3}, Thematik = {Lineare und Binäre Suchverfahren}, Referenz = 46115-2021-F.T2-TA2-A3, RelativerPfad = Examen/46115/2021/03/Thema-2/Teilaufgabe-2/Aufgabe-3.tex, ZitatSchluessel = examen:46115:2021:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Binäre Suche}, EinzelpruefungsNr = 46115, Jahr = 2021, Monat = 03, ThemaNr = 2, TeilaufgabeNr = 2, AufgabeNr = 3, } \index{Binäre Suche} \footcite{examen:46115:2021:03} \noindent Gegeben ist ein aufsteigend sortiertes Array $A$ von $n$ ganzen Zahlen und eine ganze Zahl $x$. Es wird der Algorithmus \texttt{BinarySearch} betrachtet, der $A$ effizient nach dem Wert $x$ absucht. Ergebnis ist der Index $i$ mit $x = A[i]$ oder NIL, falls $x \notin A$. \begin{function} \caption{BinarySearch(int A, int r)} $l=1$\; $r= A.length$\; \While{$r\geq l$}{ \uIf{x < A[m]}{ r = m - 1\; } \uElseIf{x=A[m]}{ \Return m\; } \Else{ l = m + 1\; } \Return NIL \; } \end{function} \begin{enumerate} %% % a) %% \item Durchsuchen Sie das folgende Feld jeweils nach den in (i) bis (iii) angegebenen Werten mittels binärer Suche. Geben Sie für jede Iteration die Werte /,r,m und den betretenen if-Zweig an. Geben Sie zudem den Ergebnis-Index bzw. NIL an. Index i]s] «| «| 2] 4] off wen [ilsfol7] io] w]u]al ale! \begin{enumerate} %% % (i) %% \item 10 %% % (ii) %% \item 13 %% % (iii) %% \item 22 \end{enumerate} %% % b) %% \item Betrachten Sie auf das Array aus Teilaufgabe a). Für welche Werte durchläuft der Algorith- mus nie den letzten else-Teil in Zeile 11? Hinweis: Unterscheiden Sie auch zwischen enthaltenen und nicht-enthaltenen Werten. %% % c) %% \item Wie ändert sich das Ergebnis der binären Suche, wenn im sortierten Eingabefeld zwei aufeinanderfolgende, unterschiedliche Werte vertauscht wurden? Betrachten Sie hierbei die betroffenen Werte, die anderen Feldelemente und nicht enthaltene Werte in Abhängigkeit vom Ort der Vertauschung. %% % d) %% \item Angenommen, das Eingabearray A für den Algorithmus für die binäre Suche enthält nur die Zahlen 0 und 1, aufsteigend sortiert. Zudem ist jede der beiden Zahlen mindestens ein Mal vorhanden. Ändern Sie den Algorithmus für die binäre Suche so ab, dass er den bzw. einen Index k zurückgibt, für den gilt: Alk] =1 und Ak—1]=0. %% % e) %% \item Betrachten Sie die folgende rekursive Variante von BinarySearch. 1 int RekBinarySearch(int[] A. int x. int £. int r) | mi 3 | (rekursive Implementierung) Der initiale Aufruf der rekursiven Variante lautet: RekBinarySearch (A, z, 1, A.length) \end{enumerate} \end{document}