%Animal 2 640*480 title "Rekursive Lineare Suche (int)" author "Dr. Guido Rößling (roessling@acm.org>" { text "title" "Rekursive Lineare Suche" (20, 35) color (0, 0, 0) depth 1 font SansSerif size 20 bold rectangle "headerRect" offset (-5, -5) from "title" NW offset (5, 5) from "title" SE color (0, 0, 0) depth 3 filled fillColor (192, 192, 192) text "descrHd" "Beschreibung des Algorithmus" (20, 80) color (0, 0, 0) depth 1 font SansSerif size 12 codegroup "descr" at offset (0, 30) from "descrHd" SW color (0, 0, 0) highlightColor (255, 0, 0) contextColor (0, 0, 0) font SansSerif size 16 bold depth 3 addCodeLine "Die Lineare Suche ist vermutlich das naheliegendeste Suchverfahren." to "descr" addCodeLine "" to "descr" addCodeLine "Die rekursive Implementierung testet zuerst, ob das Feld leer ist" to "descr" addCodeLine "oder schon das Ende erreicht wurde. In beiden Fällen ist das Ergebnis -1." to "descr" addCodeLine "Ansonsten wird das aktuelle Feldelement mit dem gesuchten Wert" to "descr" addCodeLine "vergleichen. Stimmen sie überein, so wird die aktuelle Position als" to "descr" addCodeLine "Ergebnis zurückgegeben; andernfalls wird die Methode rekursive" to "descr" addCodeLine "für die nächste Startposition aufgerufen." to "descr" } { array "array" (30, 150) color (0, 0, 0) fillColor (192, 192, 192) elementColor (0, 0, 0) elemHighlight (0, 255, 0) cellHighlight (255, 200, 0) horizontal length 8 "1" "3" "7" "5" "2" "6" "8" "4" depth 1 font SansSerif size 12 codegroup "code" at offset (0, 20) from "array" SW color (0, 0, 0) highlightColor (255, 0, 255) contextColor (0, 0, 0) font Monospaced size 16 bold depth 3 addCodeLine "public int search(int[] array, int value, int pos) {" to "code" addCodeLine "if (array == null)" to "code" indentation 1 addCodeLine "return -1;" to "code" indentation 2 addCodeLine "if (pos >= array.length)" to "code" indentation 1 addCodeLine "return -1;" to "code" indentation 2 addCodeLine "if (array[pos] == value)" to "code" indentation 1 addCodeLine "return pos;" to "code" indentation 2 addCodeLine "return search(array, value, pos + 1);" to "code" indentation 1 addCodeLine "}" to "code" text "#A" "Zuweisungen" offset (80, -80) from "array" SE color (0, 0, 0) depth 1 font SansSerif size 12 rectangle "Zuweisungen" offset (10, 0) from "#A" NE offset (11, 0) from "#A" SE color (0, 0, 255) depth 2 filled fillColor (0, 0, 255) text "#C" "Vergleiche" offset (0, 35) from "#A" NW color (0, 0, 0) depth 1 font SansSerif size 12 rectangle "Vergleiche" offset (0, 35) from "Zuweisungen" NW offset (1, 35) from "Zuweisungen" SW color (0, 0, 255) depth 2 filled fillColor (0, 0, 255) text "value" "value: 10" offset (30, 0) from "array" SE color (0, 0, 0) depth 1 font SansSerif size 20 bold text "Text3" "pos: 0" offset (20, 0) from "value" baseline end color (0, 0, 0) depth 1 font SansSerif size 20 bold arrayMarker "iMarker" on "array" atIndex 0 label "i" short color (0, 0, 255) depth 1 highlightCode on "code" line 0 row 0 hide "descrHd" "descr" } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 0 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 1" within 10 ticks moveArrayMarker "iMarker" to position 1 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 1 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 2" within 10 ticks moveArrayMarker "iMarker" to position 2 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 2 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 3" within 10 ticks moveArrayMarker "iMarker" to position 3 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 3 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 4" within 10 ticks moveArrayMarker "iMarker" to position 4 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 4 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 5" within 10 ticks moveArrayMarker "iMarker" to position 5 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 5 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 6" within 10 ticks moveArrayMarker "iMarker" to position 6 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 6 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 7" within 10 ticks moveArrayMarker "iMarker" to position 7 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 5 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) highlightArrayElem on "array" position 7 } { unhighlightCode on "code" line 5 row 0 highlightCode on "code" line 7 row 0 } { unhighlightCode on "code" line 7 row 0 setText of "Text3" to "pos: 8" within 10 ticks moveArrayMarker "iMarker" to position 8 within 10 ticks highlightCode on "code" line 0 row 0 } { unhighlightCode on "code" line 0 row 0 highlightCode on "code" line 1 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 1 row 0 highlightCode on "code" line 3 row 0 move "Vergleiche" type "translate #2" along line (0, 0) (2, 0) } { unhighlightCode on "code" line 3 row 0 highlightCode on "code" line 4 row 0 text "Text4" "Ergebnis: -1" offset (20, 0) from "Text3" baseline end color (0, 0, 0) depth 1 font SansSerif size 20 bold } { unhighlightCode on "code" line 4 row 0 moveArrayMarker "iMarker" to position 7 within 10 ticks unhighlightArrayElem on "array" position 7 } { moveArrayMarker "iMarker" to position 6 within 10 ticks unhighlightArrayElem on "array" position 6 } { moveArrayMarker "iMarker" to position 5 within 10 ticks unhighlightArrayElem on "array" position 5 } { moveArrayMarker "iMarker" to position 4 within 10 ticks unhighlightArrayElem on "array" position 4 } { moveArrayMarker "iMarker" to position 3 within 10 ticks unhighlightArrayElem on "array" position 3 } { moveArrayMarker "iMarker" to position 2 within 10 ticks unhighlightArrayElem on "array" position 2 } { moveArrayMarker "iMarker" to position 1 within 10 ticks unhighlightArrayElem on "array" position 1 } { moveArrayMarker "iMarker" to position 0 within 10 ticks unhighlightArrayElem on "array" position 0 } { text "nrSteps" "Insgesamt verwendete der Algorithmus 0 Zuweisungen und 26 Vergleiche." offset (0, 30) from "code" SW color (0, 0, 0) depth 1 font SansSerif size 12 } { codegroup "complexity" at offset (0, 30) from "title" SW color (0, 0, 0) highlightColor (255, 0, 0) contextColor (0, 0, 0) font SansSerif size 16 bold depth 3 addCodeLine "Anmerkungen zur Komplexität" to "complexity" addCodeLine "" to "complexity" addCodeLine "Die Lineare Suche ist - wie der name schon sagt - immer linear." to "complexity" addCodeLine "Bei bereits sortierten Daten gibt es (deutlich) bessere Suchverfahren." to "complexity" addCodeLine "" to "complexity" addCodeLine "Bei unsortierten Daten kann, je nach Art und Herkunft der Daten," to "complexity" addCodeLine "kein besseres Suchverfahren implementiert werden - etwa wenn die" to "complexity" addCodeLine "Daten aus einem Socket gelesen werden und daher von vorne nach" to "complexity" addCodeLine "hinten verarbeitet werden müssen." to "complexity" hide "nrSteps" "code" "Zuweisungen" "#A" "Vergleiche" "#C" "Text4" "value" "array" "Text3" } { text "adForURL" "Weitere Animationen finden Sie unter http://www.animal.ahrgr.de im Online-Repository" offset (0, 50) from "title" SW color (0, 0, 0) depth 1 font SansSerif size 20 bold hide "complexity" }