斐波那契查找算法(递归)

同系列算法问题

回溯法解决流水作业调度问题(全排列+计算模型+剪枝函数)

回溯法解决N皇后问题-Python实现(全排列+剪枝)

贪心算法解决活动安排-Python实现(排序+贪心选择)


问题

 


问题概述

 


分析问题

 


解决问题


编程


编程流程以及数据类型选择

 


发现问题以及解决

 

 


最终实现

程序代码:

#time:2020.01.01
#author:zhj1121
#todo:斐波那契查找算法
#构造斐波那契数列表
def createFbilist(length):
    list = ['' for i in range(length)]
    for i in range(length):
        if(i<2):
            list[i]=1
        else:
            list[i]=list[i-1]+list[i-2]
    return list
def listlentofbinum(list,fbilist):
    listlen = len(list)
    k = 0
    while(len(list)>fbilist[k]):
        k +=1
    #加长list
    while(len(list)<fbilist[k]):
        list.append(list[len(list)-1])
    return k,list
#斐波那契查找算法
def fionnaciiSearch(list,low,high,value,fbilist,k):
    if(low>high):
        return -1
    mid = low+fbilist[k-1]-1
    if(list[mid] == value):
        return mid
    elif(list[mid]>value):
        high = mid - 1
        k -= 1
        return fionnaciiSearch(list,low,high,value,fbilist,k)
    else:
        low = mid +1
        k -= 2
        return fionnaciiSearch(list,low,high,value,fbilist,k)
    return fionnaciiSearch(list,low,high,value,fbilist,k)
def main():
    fbilist = createFbilist(10)
    #print(fbilist)
    print("原列表为:")
    list = [i for i in range(7)]
    print(list)
    list = listlentofbinum(list,fbilist)[1]
    fbilist = createFbilist(listlentofbinum(list,fbilist)[0]+1)
    # print(fbilist)
    # print(list)
    num = eval(input("请输入待查找的数:"))
    if(fionnaciiSearch(list,0,len(list)-1,num,fbilist,len(fbilist)-1)!=-1):
        index = fionnaciiSearch(list,0,len(list)-1,num,fbilist,len(fbilist)-1)
        print("以1为起始坐标,待查找元素{}在{}位置上".format(num,index+1))
    else:
        print("待查找元素不在序列中")
main()

运行结果截图:


总结

 


程序缺陷以及完善

 


解题心路历程

在整理查找算法时,发现斐波那契查找算法,以为很简单,结果花了差不多一小时才搞定。所以在此记录

另外,会对斐波那契查找算法进行部分更改。

初步想法:不对待查找序列进行加长处理,而是对序列进行缩短处理,且不影响最终结果


本篇未完成,如有更改,会在此列出

创建文章,并贴出代码和解题心路历程——2020.01.01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值