Эта статья представляет собой руководство по реализации алгоритма поиска Фибоначчи в Python и является продолжением Daily Python # 21.
Эта статья - часть задачи Daily Python, которую я взял на себя. Я буду писать короткие статьи о Python ежедневно.
Для этой статьи нет дополнительных требований.
Если вы не читали часть 1 основных алгоритмов поиска, вы можете прочитать ее здесь:
Поиск по Фибоначчи
Поиск по Фибоначчи - это метод, основанный на сравнении, который использует числа Фибоначчи для поиска элемента в отсортированном массиве.
- Работает для отсортированных массивов
- Алгоритм разделяй и властвуй.
- Имеет временную сложность Log n.
Отличия от двоичного поиска:
- Поиск Фибоначчи делит заданный массив на неравные части
- Двоичный поиск использует оператор деления для разделения диапазона. Поиск Фибоначчи не использует /, но использует + и -. Оператор деления может быть дорогостоящим для некоторых процессоров.
- Поиск Фибоначчи исследует относительно близкие элементы на следующих этапах. Поэтому, когда входной массив большой и не помещается в кеш-память ЦП или даже в ОЗУ, поиск по Фибоначчи может быть полезен.
Справочная информация:
Числа Фибоначчи рекурсивно определяются как F (n) = F (n-1) + F (n-2), F (0) = 0, F (1) = 1. Первые несколько чисел Фибоначчи: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…
Давайте определим функцию для генерации числа Фибоначчи с индексом n.
def FibonacciGenerator(n): if n < 1: return 0 elif n == 1: return 1 else: return FibonacciGenerator(n - 1) + FibonacciGenerator(n - 2)
Давайте рассмотрим следующий массив и число для поиска
arr = [10, 22, 30, 44, 56, 58, 60, 70, 100, 110, 130] x = 60
Теперь давайте определим функцию, которая будет делить список и искать число в соответствии с поиском Фибоначчи.
def FibonacciSearch(arr, x): m = 0 while FibonacciGenerator(m) < len(arr): # m = m + 1 offset = -1 while (FibonacciGenerator(m) > 1): i = min( offset + FibonacciGenerator(m - 2) , len(arr) - 1) print('Current Element : ',arr[i]) if (x > arr[i]): m = m - 1 offset = i elif (x < arr[i]): m = m - 2 else: return i if(FibonacciGenerator(m - 1) and arr[offset + 1] == x): return offset + 1 return -1 print('Number found at index : ',FibonacciSearch(arr, x))
Надеюсь, эта статья была полезной, оставьте несколько аплодисментов, если она вам понравилась.