From 9c634735d39a6d51aa94b0c92cf0473af72439f1 Mon Sep 17 00:00:00 2001 From: Laisha Wadhwa Date: Fri, 18 Oct 2019 11:40:08 +0530 Subject: [PATCH] added fibonacci_search.py (#1341) * added fibonacci_search.py * added Fibonacci_search.py after error handling * added doctests --- searches/fibonacci_search.py | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 searches/fibonacci_search.py diff --git a/searches/fibonacci_search.py b/searches/fibonacci_search.py new file mode 100644 index 000000000..f76528b9c --- /dev/null +++ b/searches/fibonacci_search.py @@ -0,0 +1,50 @@ +#run using python fibonacci_search.py -v + +''' +@params +arr: input array +val: the value to be searched +output: the index of element in the array or -1 if not found +return 0 if input array is empty +''' +def fibonacci_search(arr, val): + + """ + >>> fibonacci_search([1,6,7,0,0,0], 6) + 1 + >>> fibonacci_search([1,-1, 5, 2, 9], 10) + -1 + >>> fibonacci_search([], 9) + 0 + """ + fib_N_2 = 0 + fib_N_1 = 1 + fibNext = fib_N_1 + fib_N_2 + length = len(arr) + if length == 0: + return 0 + while (fibNext < len(arr)): + fib_N_2 = fib_N_1 + fib_N_1 = fibNext + fibNext = fib_N_1 + fib_N_2 + index = -1; + while (fibNext > 1): + i = min(index + fib_N_2, (length-1)) + if (arr[i] < val): + fibNext = fib_N_1 + fib_N_1 = fib_N_2 + fib_N_2 = fibNext - fib_N_1 + index = i + elif (arr[i] > val): + fibNext = fib_N_2 + fib_N_1 = fib_N_1 - fib_N_2 + fib_N_2 = fibNext - fib_N_1 + else : + return i + if (fib_N_1 and index < length-1) and (arr[index+1] == val): + return index+1; + return -1 + +if __name__ == "__main__": + import doctest + doctest.testmod()