|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||
java.lang.ObjectLoesung83
public class Loesung83
Loesungsvorschlag fuer Aufgabe 8-3. Fibonaccisuche.
| Field Summary | |
|---|---|
static int[] |
FIBONACCI
Die Fibonaccifolge F, angepasst fuer die Fibonaccisuche. |
| Constructor Summary | |
|---|---|
Loesung83()
|
|
| Method Summary | |
|---|---|
static int |
find(int[] array,
int key)
Durchsucht einen Array mit der Fibonaccisuche. |
protected static int |
find(int[] array,
int key,
int leftIndex,
int rightIndex,
int fibonacciIndex)
Durchsucht einen Array mit der Fibonaccisuche. |
static void |
main(String[] args)
Treiber fuer Aufruf von der Kommandozeilenschnittstelle. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int[] FIBONACCI
int;
dies sind alle Fibonaccizahlen kleiner oder gleich
F46 = 1836311903.
Im Allgemeinen ist die Fibonaccifolge wie folgt definiert:
FIBONACCI[n] = (n == 0 ? 0 : (n == 1 ? 1 :
(FIBONACCI[n - 2] + FIBONACCI[n - 1])))
Um klaren Code in der Rekursion zu haben, wird abweichend davon
FIBONACCI[0] = 1 definiert; dies spart eine eigene
if-Bedingung fuer sehr kurze Teil-Arrays ein. Auch
wird FIBONACCI[47] = Integer.MAX_VALUE definiert,
um die Korrektheit des Algorithmus auch bei langen Arrays
herzustellen.
| Constructor Detail |
|---|
public Loesung83()
| Method Detail |
|---|
public static int find(int[] array,
int key)
Fuer eine Fibonaccisuche muss der Array sortiert sein.
array - das zu durchsuchende Arraykey - den zu suchenden Wert
array, das
den Wert key hat
KeyNotFoundException - falls der Array den gesuchten Wert
nicht enthaelt
NullPointerException - falls array == nullArrays.sort(int[])
protected static int find(int[] array,
int key,
int leftIndex,
int rightIndex,
int fibonacciIndex)
Fuer eine Fibonaccisuche muss der Array sortiert sein.
Damit diese Methode korrekt ist, muessen beim Aufruf folgende Vorbedingungen erfuellt sein:
array enthaelt den Suchraum, mit
array.length > 0array.length > leftIndex >=
0rightIndex - leftIndex + 1 ==
FIBONACCI[fibonacciIndex]FIBONACCI enthaelt die Fibonaccifolge, mit
FIBONACCI[0] == 1Das Verhalten dieser Methode bei Nichterfuellung dieser Vorbedingungen ist nicht definiert.
array - das zu durchsuchende Arraykey - den zu suchenden WertleftIndex - der Index, der die untere Grenze des zu
durchsuchenden Bereichs im Array darstellt (einschliesslich)rightIndex - der Index, der die obere Grenze des zu
durchsuchenden Bereichs im Array darstellt (einschliesslich);
der Abstand zu leftIndex muss in jedem Fall eine
Fibonaccizahl seinfibonacciIndex - der Index derjenigen Fibonaccizahl, die
dem Abstand zwischen leftIndex und
rightIndex entspricht
array, das
den Wert key hat
KeyNotFoundException - falls der Array den gesuchten Wert
nicht enthaelt
ArrayIndexOutOfBoundsException - falls
array.length == 0
NullPointerException - falls array == nullArrays.sort(int[])public static void main(String[] args)
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||