| 
||||||||
| 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 | |||||||