From 4a73197daf4f906139ae2b13cdc965cd922fe848 Mon Sep 17 00:00:00 2001 From: dieterpl Date: Wed, 10 Oct 2018 23:20:30 +0200 Subject: [PATCH 1/5] Added fibonacci search --- allalgorithms/searches/__init__.py | 1 + allalgorithms/searches/fibonacci_search.py | 33 ++++++++++++++++++++++ changelog.md | 7 +++++ docs/searches/fibonacci-search.md | 33 ++++++++++++++++++++++ readme.md | 1 + tests/test_searches.py | 13 +++++++-- 6 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 allalgorithms/searches/fibonacci_search.py create mode 100644 docs/searches/fibonacci-search.md diff --git a/allalgorithms/searches/__init__.py b/allalgorithms/searches/__init__.py index dad7119..dc0f547 100644 --- a/allalgorithms/searches/__init__.py +++ b/allalgorithms/searches/__init__.py @@ -1 +1,2 @@ from .binary_search import * +from .fibonacci_search import * diff --git a/allalgorithms/searches/fibonacci_search.py b/allalgorithms/searches/fibonacci_search.py new file mode 100644 index 0000000..5afd388 --- /dev/null +++ b/allalgorithms/searches/fibonacci_search.py @@ -0,0 +1,33 @@ +# -*- coding: UTF-8 -*- +# +# Fibonacci search works for a sorted array. +# The All â–²lgorithms library for python +# +# Contributed by: dieterpl +# Github: @dieterpl +# +def fibonacci_search(arr, query): + fib2, fib1 = 0, 1 + fib = fib2 + fib1 + hi = len(arr) - 1 + while fib <= hi: + fib2 = fib1 + fib1 = fib + fib = fib2 + fib1 + offset = -1 + while fib > 1: + i = min(offset + fib2, hi) + if arr[i] < query: + fib = fib1 + fib1 = fib2 + fib2 = fib - fib1 + offset = i + elif arr[i] > query: + fib = fib2 + fib1 = fib1 - fib2 + fib2 = fib - fib1 + else: + return i + if fib1 and arr[offset + 1] == query: + return offset + 1 + return None diff --git a/changelog.md b/changelog.md index 71baf9e..528a93c 100644 --- a/changelog.md +++ b/changelog.md @@ -28,3 +28,10 @@ Added: - Pigeonhole Sort - Selection Sort - Stooge Sort + +# Version `0.0.2` + +Date: October 10, 2018 + +- ### Sorting + - Fibonacci Search diff --git a/docs/searches/fibonacci-search.md b/docs/searches/fibonacci-search.md new file mode 100644 index 0000000..fc09267 --- /dev/null +++ b/docs/searches/fibonacci-search.md @@ -0,0 +1,33 @@ +# Fibonacci Search + +In computer science, the Fibonacci search technique is a method of searching a sorted array using a divide and conquer algorithm that narrows down possible locations with the aid of Fibonacci numbers. (Wikipedia) +## Install + +``` +pip install allalgorithms +``` + +## Usage + +```py +from allalgorithms.searches import fibonacci_search + +arr = [-2, 1, 2, 7, 10, 77] + +print(fibonacci_search(arr, 7)) +# -> 3 + +print(fibonacci_search(arr, 3)) +# -> None +``` + +## API + +### fibonacci_search(array, query) + +> Return array index if its found, otherwise returns `None` + +##### Params: + +- `array`: Sorted Array +- `query`: Element to search for in the array diff --git a/readme.md b/readme.md index 1d5be4f..fdf6385 100644 --- a/readme.md +++ b/readme.md @@ -59,6 +59,7 @@ print(binary_search(arr, 3)) - ### Searches - [Binary Search](https://python.allalgorithms.com/searches/binary-search) + - [Fibonacci Search](https://python.allalgorithms.com/searches/fibonacci-search) - ### Sorting - [Bubble Sort](https://python.allalgorithms.com/sorting/bubble-sort) - [Cocktail Shaker Sort](https://python.allalgorithms.com/sorting/cocktail-shaker-sort) diff --git a/tests/test_searches.py b/tests/test_searches.py index 622beeb..dfc96e1 100644 --- a/tests/test_searches.py +++ b/tests/test_searches.py @@ -1,7 +1,9 @@ import unittest -from allalgorithms.searches import binary_search - +from allalgorithms.sorting import ( + binary_search, + fibonacci_search +) class TestSearches(unittest.TestCase): @@ -12,6 +14,13 @@ def test_binary_search(self): self.assertEqual(None, binary_search(arr, 8)) self.assertEqual(None, binary_search(arr, -1)) + def test_fibonacci_search(self): + arr = [1, 2, 3, 7, 10, 19, 27, 77] + self.assertEqual(3, fibonacci_search(arr, 7)) + self.assertEqual(7, fibonacci_search(arr, 77)) + self.assertEqual(None, fibonacci_search(arr, 8)) + self.assertEqual(None, fibonacci_search(arr, -1)) + if __name__ == '__main__': unittest.main() From c2ef611ab7ebdad0d3996dba16a79e4ea5383b42 Mon Sep 17 00:00:00 2001 From: dieterpl Date: Wed, 10 Oct 2018 23:33:51 +0200 Subject: [PATCH 2/5] Fixed import to searches instead of sorting --- tests/test_searches.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_searches.py b/tests/test_searches.py index dfc96e1..5ac707d 100644 --- a/tests/test_searches.py +++ b/tests/test_searches.py @@ -1,6 +1,6 @@ import unittest -from allalgorithms.sorting import ( +from allalgorithms.searches import ( binary_search, fibonacci_search ) From 14bf84b8ee1db45f66805ee6f6897cf82b0404b7 Mon Sep 17 00:00:00 2001 From: dieterpl Date: Thu, 11 Oct 2018 00:13:24 +0200 Subject: [PATCH 3/5] Added lines --- allalgorithms/searches/fibonacci_search.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/allalgorithms/searches/fibonacci_search.py b/allalgorithms/searches/fibonacci_search.py index 5afd388..0d9aa01 100644 --- a/allalgorithms/searches/fibonacci_search.py +++ b/allalgorithms/searches/fibonacci_search.py @@ -6,6 +6,8 @@ # Contributed by: dieterpl # Github: @dieterpl # + + def fibonacci_search(arr, query): fib2, fib1 = 0, 1 fib = fib2 + fib1 From 4a883c7cb83b62c22ee28a4c86eeedd75e2361c7 Mon Sep 17 00:00:00 2001 From: Abraham Hernandez Date: Wed, 10 Oct 2018 22:03:22 -0400 Subject: [PATCH 4/5] add fibonacci search docs on main readme --- docs/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/readme.md b/docs/readme.md index e29f3da..80e8f33 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -59,6 +59,7 @@ print(binary_search(arr, 3)) - ### Searches - [Binary Search](searches/binary-search) + - [Fibonacci Search](searches/fibonacci-search) - [Jump Search](searches/jump-search) - ### Sorting - [Bubble Sort](sorting/bubble-sort) From ce87b436e3b6374647ee2bbaa61762653b0a9c6b Mon Sep 17 00:00:00 2001 From: Abraham Hernandez Date: Wed, 10 Oct 2018 22:09:35 -0400 Subject: [PATCH 5/5] adding forgotten `,` --- tests/test_searches.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_searches.py b/tests/test_searches.py index 3193b1b..41120f7 100644 --- a/tests/test_searches.py +++ b/tests/test_searches.py @@ -2,7 +2,7 @@ from allalgorithms.searches import ( binary_search, - fibonacci_search + fibonacci_search, jump_search ) @@ -30,4 +30,4 @@ def test_jump_search(self): self.assertEqual(None, binary_search(arr, -1)) if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy