Fibonacci Search Visualizer
Watch how Fibonacci Search uses Fibonacci numbers to divide the array and efficiently locate the target element.
Time: O(log n)
Space: O(1)
Requirement: Sorted Array
Fibonacci Division
Fibonacci Numbers: fibM=0, fibM1=0, fibM2=0 | Offset: -1 | Comparisons: 0
0
2
1
3
2
4
3
10
4
40
5
43
6
56
7
67
8
78
9
89
10
99
Target: 10 | Step: 1 of 0
Current Step:
Click Start to begin Fibonacci Search visualization
Fibonacci Search
Time Complexity:O(log n)
Space Complexity:O(1)
Division:Fibonacci
Operations:Addition only
Color Legend
Currently Checking
Offset Position
Target Found
Search Space
Fibonacci Numbers
The algorithm uses Fibonacci numbers to divide the array:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...
Each division follows the golden ratio (φ ≈ 1.618), providing optimal search performance.
How It Works
- 1Find smallest Fibonacci ≥ array length
- 2Check element at offset + fibM2
- 3Eliminate sections using Fibonacci
- 4Continue until target found or exhausted
Python Implementation
def fibonacci_search(arr, target): n = len(arr) # Initialize Fibonacci numbers fib_m2 = 0 # (m-2)'th Fibonacci number fib_m1 = 1 # (m-1)'th Fibonacci number fib_m = fib_m2 + fib_m1 # m'th Fibonacci number # Find smallest Fibonacci number >= n while fib_m < n: fib_m2 = fib_m1 fib_m1 = fib_m fib_m = fib_m2 + fib_m1 offset = -1 while fib_m > 1: # Calculate index to check i = min(offset + fib_m2, n - 1) if arr[i] < target: fib_m = fib_m1 fib_m1 = fib_m2 fib_m2 = fib_m - fib_m1 offset = i elif arr[i] > target: fib_m = fib_m2 fib_m1 = fib_m1 - fib_m2 fib_m2 = fib_m - fib_m1 else: return i # Check last element if fib_m1 and offset + 1 < n and arr[offset + 1] == target: return offset + 1 return -1
Real-world Applications
- • When multiplication/division is expensive
- • Searching in sorted arrays efficiently
- • Systems without floating-point arithmetic
- • Optimal search with addition-only operations
- • Embedded systems with limited CPU
- • Mathematical sequence analysis