316 lines
12 KiB
Plaintext
316 lines
12 KiB
Plaintext
%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"
|
|
}
|