Pythonでしょ!

Pythonでいろいろやってみましょう! ビッグデータ、画像処理、WebSiteなどなど

フィボナッチサーチ(fibonacci search)をPythonで作りました。

フィボナッチサーチ(fibonacci search)をPythonで作りました。
Binary searchとの性能検討は下記のURLご参考
http://stackoverflow.com/questions/22877763/is-fibonacci-search-faster-than-binary-search

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#fibonacci関数
def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fib(n-1) + fib(n-2)

#Listに対してfibonacciサーチを行う
# st: list
#  u: fibnacci n
#  s: start idex
#  l: list size
#key: search key
def fib_search(st,u, s, l, key):
    if u < 1:
        return -1
    idx = s + fib(u-1) -1

    if idx < l:
        if key == st[idx]:
            return idx
        elif key > st[idx]:
            s = idx + 1
    return fib_search(st,u-1, s, l, key)

#main
if __name__ == '__main__':
    arr = [5,8,13,19,21,37,56,64,75,80,88]

    print "idx", "item"
    for i, v in enumerate(arr):
        print i, v

    u = 0
    while fib(u) < len(arr):
        u += 1

    for key in arr:
        print "search key %d, idx: %d" % (key, fib_search(arr, u, 0, len(arr), key))

    for key in [100,20,32,12]:
        print "search key %d, idx: %d" % (key, fib_search(arr, u, 0, len(arr), key))
 


理解しづらいアルゴリズムですけど、完成させたので満足!