同系列算法问题
问题
问题概述
分析问题
解决问题
编程
编程流程以及数据类型选择
发现问题以及解决
最终实现
程序代码:
#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