Trong chương trình C ++ này, chúng tôi thực hiện phương pháp Chia và Chinh phục bằng cách sử dụng các số Fibonacci. Sử dụng số Fibonacci, chúng tôi tính toán giữa mảng dữ liệu để tìm kiếm mục dữ liệu. Độ phức tạp về thời gian của phương pháp này là O (log (n)).
Thuật toán
Begin Gán dữ liệu cho mảng theo cách được sắp xếp. Nhận đầu vào của phần tử cần tìm kiếm. Gọi hàm FibonacciSearch (). Tính giá trị giữa bằng cách sử dụng biểu thức ‘start + fib [index-2]’. Nếu mục đã chọn bằng với giá trị ở chỉ mục giữa, hãy in kết quả và trở về chính. Nếu nó nhỏ hơn giá trị ở chỉ mục giữa, hãy tiếp tục với mảng con bên trái. Nếu nó lớn hơn giá trị ở chỉ mục giữa, hãy tiếp tục với mảng con bên phải. Nếu giá trị giữa được tính bằng giá trị bắt đầu hoặc kết thúc thì mục đó không được tìm thấy trong mảng.Mã mẫu
#includeusing namespace std; void FibonacciSearch (int * a, int start, int end, int * fib, int index, int item) {int i, mid; mid =start + fib [index-2]; if (item ==a [mid]) {cout <<"\ n item tìm thấy tại" < a [mid]) FibonacciSearch (a, mid, end, fib, index-1, item); else FibonacciSearch (a, start, mid, fib, index-2, item); } main () {int n, i, fib [20], a [10] ={3, 7, 55, 86, 7, 15, 26, 30, 46, 95}; char ch; fib [0] =0; fib [1] =1; i =1; while (fib [i] <10) {i ++; fib [i] =fib [i-1] + fib [i-2]; } up:cout <<"\ nNhập Phần tử cần tìm:"; cin>> n; FibonacciSearch (a, 0, 9, fib, i, n); cout <<"\ n \ n \ tBạn có muốn tìm kiếm thêm ... nhập lựa chọn (y / n)?"; cin>> ch; if (ch =='y' || ch =='Y') đi lên; trả về 0; }} Đầu ra
Nhập Phần tử cần tìm:26item tìm thấy ở chỉ mục 6. Bạn có muốn tìm kiếm thêm ... nhập lựa chọn (y / n)? yNhập Phần tử cần tìm:45item không tìm thấy Bạn có muốn tìm kiếm thêm .. .enter choice (y / n)? n