Skip to content

Commit

Permalink
add fibonacci search
Browse files Browse the repository at this point in the history
  • Loading branch information
Canux committed Apr 20, 2021
1 parent 1b6415b commit 03facf9
Show file tree
Hide file tree
Showing 14 changed files with 261 additions and 29 deletions.
Binary file modified docs/_build/doctrees/datastructure.doctree
Binary file not shown.
Binary file modified docs/_build/doctrees/environment.pickle
Binary file not shown.
Binary file modified docs/_build/doctrees/searchalgorithm.doctree
Binary file not shown.
66 changes: 59 additions & 7 deletions docs/_build/html/_sources/datastructure.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,73 @@ data structure

数据结构

队列

String/字符串
-------------

* KMP算法
* BM模式匹配算法
* BF算法

链表
Vector/向量
------------

二叉树
顺序线性表


fibonacci sequence
Linked List/链表
-------------------------

* 双向链表/Double Linked Lists
* 静态链表/Static List
* 对称矩阵/Symmetric Matrix
* 稀疏矩阵/Sparse Matrix

Hash Table/哈希表
------------------

哈希表也叫散列表.

* 散列函数/Hash Function
* 填充因子/Collision Resolution

Stack/
---------

* 广义表/Generalized List
* 双端队列/Deque

Queue/队列
-----------

* 链表实现
* 循环数组实现
* 双端队列
* 优先队列
* 循环队列

Heap/
--------

* 数组实现的堆
* 树实现的堆


Tree/
--------

* 二叉树/Binary Tree
* 并查集/Union-Find
* Huffman数

Graph/
---------



fibonacci sequence
-------------------

斐波那契数列,也叫黄金分割数列::

0, 1, 1, 2, 3, 5, 8, 13, ...
Expand Down
8 changes: 6 additions & 2 deletions docs/_build/html/_sources/searchalgorithm.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,16 @@ mid = min + (max-min) * (key-array[min]) / (array[max]-array[min])
fibonacci search/斐波拉切查找
-----------------------------

只能用于有序序列.和插值/二分 策略一样通过分割区间缩小范围.

* 时间复杂度

* 空间复杂度


tb search/树表查找
------------------

树表查找分为二叉树查找,2-3树查找,红黑树查找,B树和B+树查找.


block search/分块查找
---------------------
Expand Down
79 changes: 73 additions & 6 deletions docs/_build/html/datastructure.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,70 @@
<div class="section" id="data-structure">
<span id="datastructure"></span><h1>data structure<a class="headerlink" href="#data-structure" title="Permalink to this headline"></a></h1>
<p>数据结构</p>
<p>队列</p>
<p></p>
<p></p>
<p>链表</p>
<p>二叉树</p>
<p></p>
<div class="section" id="string">
<h2>String/字符串<a class="headerlink" href="#string" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>KMP算法</p></li>
<li><p>BM模式匹配算法</p></li>
<li><p>BF算法</p></li>
</ul>
</div>
<div class="section" id="vector">
<h2>Vector/向量<a class="headerlink" href="#vector" title="Permalink to this headline"></a></h2>
<p>顺序线性表</p>
</div>
<div class="section" id="linked-list">
<h2>Linked List/链表<a class="headerlink" href="#linked-list" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>双向链表/Double Linked Lists</p></li>
<li><p>静态链表/Static List</p></li>
<li><p>对称矩阵/Symmetric Matrix</p></li>
<li><p>稀疏矩阵/Sparse Matrix</p></li>
</ul>
</div>
<div class="section" id="hash-table">
<h2>Hash Table/哈希表<a class="headerlink" href="#hash-table" title="Permalink to this headline"></a></h2>
<p>哈希表也叫散列表.</p>
<ul class="simple">
<li><p>散列函数/Hash Function</p></li>
<li><p>填充因子/Collision Resolution</p></li>
</ul>
</div>
<div class="section" id="stack">
<h2>Stack/<a class="headerlink" href="#stack" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>广义表/Generalized List</p></li>
<li><p>双端队列/Deque</p></li>
</ul>
</div>
<div class="section" id="queue">
<h2>Queue/队列<a class="headerlink" href="#queue" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>链表实现</p></li>
<li><p>循环数组实现</p></li>
<li><p>双端队列</p></li>
<li><p>优先队列</p></li>
<li><p>循环队列</p></li>
</ul>
</div>
<div class="section" id="heap">
<h2>Heap/<a class="headerlink" href="#heap" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>数组实现的堆</p></li>
<li><p>树实现的堆</p></li>
</ul>
</div>
<div class="section" id="tree">
<h2>Tree/<a class="headerlink" href="#tree" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>二叉树/Binary Tree</p></li>
<li><p>并查集/Union-Find</p></li>
<li><p>Huffman数</p></li>
</ul>
</div>
<div class="section" id="graph">
<h2>Graph/<a class="headerlink" href="#graph" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="fibonacci-sequence">
<h2>fibonacci sequence<a class="headerlink" href="#fibonacci-sequence" title="Permalink to this headline"></a></h2>
<p>斐波那契数列,也叫黄金分割数列:</p>
Expand Down Expand Up @@ -79,6 +137,15 @@ <h1 class="logo"><a href="index.html">pydad</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">data structure</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#string">String/字符串</a></li>
<li class="toctree-l2"><a class="reference internal" href="#vector">Vector/向量</a></li>
<li class="toctree-l2"><a class="reference internal" href="#linked-list">Linked List/链表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#hash-table">Hash Table/哈希表</a></li>
<li class="toctree-l2"><a class="reference internal" href="#stack">Stack/</a></li>
<li class="toctree-l2"><a class="reference internal" href="#queue">Queue/队列</a></li>
<li class="toctree-l2"><a class="reference internal" href="#heap">Heap/</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tree">Tree/</a></li>
<li class="toctree-l2"><a class="reference internal" href="#graph">Graph/</a></li>
<li class="toctree-l2"><a class="reference internal" href="#fibonacci-sequence">fibonacci sequence</a></li>
</ul>
</li>
Expand Down
9 changes: 9 additions & 0 deletions docs/_build/html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@ <h1>Data_structure Algorithm and Design_pattern<a class="headerlink" href="#data
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="datastructure.html">data structure</a><ul>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#string">String/字符串</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#vector">Vector/向量</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#linked-list">Linked List/链表</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#hash-table">Hash Table/哈希表</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#stack">Stack/</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#queue">Queue/队列</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#heap">Heap/</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#tree">Tree/</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#graph">Graph/</a></li>
<li class="toctree-l2"><a class="reference internal" href="datastructure.html#fibonacci-sequence">fibonacci sequence</a></li>
</ul>
</li>
Expand Down
6 changes: 5 additions & 1 deletion docs/_build/html/searchalgorithm.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,14 @@ <h2>interpolation search/插值查找<a class="headerlink" href="#interpolation-
</div>
<div class="section" id="fibonacci-search">
<h2>fibonacci search/斐波拉切查找<a class="headerlink" href="#fibonacci-search" title="Permalink to this headline"></a></h2>
<p>只能用于有序序列.和插值/二分 策略一样通过分割区间缩小范围.</p>
<ul class="simple">
<li><p>时间复杂度</p></li>
<li><p>空间复杂度</p></li>
</ul>
</div>
<div class="section" id="tb-search">
<h2>tb search/树表查找<a class="headerlink" href="#tb-search" title="Permalink to this headline"></a></h2>
<p>树表查找分为二叉树查找,2-3树查找,红黑树查找,B树和B+树查找.</p>
</div>
<div class="section" id="block-search">
<h2>block search/分块查找<a class="headerlink" href="#block-search" title="Permalink to this headline"></a></h2>
Expand Down
2 changes: 1 addition & 1 deletion docs/_build/html/searchindex.js

Large diffs are not rendered by default.

66 changes: 59 additions & 7 deletions docs/datastructure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,73 @@ data structure

数据结构

队列

String/字符串
-------------

* KMP算法
* BM模式匹配算法
* BF算法

链表
Vector/向量
------------

二叉树
顺序线性表


fibonacci sequence
Linked List/链表
-------------------------

* 双向链表/Double Linked Lists
* 静态链表/Static List
* 对称矩阵/Symmetric Matrix
* 稀疏矩阵/Sparse Matrix

Hash Table/哈希表
------------------

哈希表也叫散列表.

* 散列函数/Hash Function
* 填充因子/Collision Resolution

Stack/
---------

* 广义表/Generalized List
* 双端队列/Deque

Queue/队列
-----------

* 链表实现
* 循环数组实现
* 双端队列
* 优先队列
* 循环队列

Heap/
--------

* 数组实现的堆
* 树实现的堆


Tree/
--------

* 二叉树/Binary Tree
* 并查集/Union-Find
* Huffman数

Graph/
---------



fibonacci sequence
-------------------

斐波那契数列,也叫黄金分割数列::

0, 1, 1, 2, 3, 5, 8, 13, ...
Expand Down
8 changes: 6 additions & 2 deletions docs/searchalgorithm.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,16 @@ mid = min + (max-min) * (key-array[min]) / (array[max]-array[min])
fibonacci search/斐波拉切查找
-----------------------------

只能用于有序序列.和插值/二分 策略一样通过分割区间缩小范围.

* 时间复杂度

* 空间复杂度


tb search/树表查找
------------------

树表查找分为二叉树查找,2-3树查找,红黑树查找,B树和B+树查找.


block search/分块查找
---------------------
Expand Down
2 changes: 2 additions & 0 deletions pydad/datastructure/fibonacci.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ def fibonacci_array(index):


def fibonacci(index):
if index < 0:
raise ValueError("index must >= 0")
if index == 0:
return 0
elif index == 1:
Expand Down
35 changes: 33 additions & 2 deletions pydad/search/fibonacci.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
"""
binary.py for binary search.
fibonacci.py for fibonacci search.
Copyright (C) 2021 Canux CHENG.
All rights reserved.
Expand All @@ -12,4 +12,35 @@
:since: Fri 20 Jan 2021 01:10:07 AM EST
DESCRIPTION:
"""
"""
from pydad.datastructure.fibonacci import fibonacci as fib_ds


def fibonacci(seq: list, key: int) -> int:
len_seq = len(seq)
# get index of min element in fibonacci sequence bigger than max element in seq.
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
i = 0
while True:
if fib_ds(i) >= len_seq:
fib_index = i
break
i += 1

offset = 0
while fib_index > 0:
middle = min(
offset + fib_ds(fib_index - 1), len_seq - 1
)
middle_value = seq[middle]
if middle_value == key:
return middle
elif key < middle_value:
fib_index -= 1
elif key > middle_value:
offset += fib_ds(fib_index - 1)
fib_index -= 2
else:
return None


0 comments on commit 03facf9

Please sign in to comment.