Python中基于分治的一维峰值搜索算法
我正在尝试用python实现一个1D peak算法,尽管我在实现它时遇到了困难。其思想是,它比较数组的中心项,并选择具有较高相邻项的边。这一半将成为新阵列。只有当中心是最大项时,它才成为峰值。这是我的密码: 输入数学Python中基于分治的一维峰值搜索算法,python,algorithm,Python,Algorithm,我正在尝试用python实现一个1D peak算法,尽管我在实现它时遇到了困难。其思想是,它比较数组的中心项,并选择具有较高相邻项的边。这一半将成为新阵列。只有当中心是最大项时,它才成为峰值。这是我的密码: 输入数学 import math array = [1,2,3,4,5,6,7] size = len(array) count = 0 while count == 0: if len(array) == 2: count += 1 print
import math
array = [1,2,3,4,5,6,7]
size = len(array)
count = 0
while count == 0:
if len(array) == 2:
count += 1
print(max(array[0],array[1]))
break
elif count == 0:
elif array[math.floor(abs(size/2))] < array[math.floor(abs(size/2))-1]:
new_array = []
for i in range(int(abs(size)/2)):
new_array.append(array[i])
array = new_array
elif array[math.floor(abs(size/2))] < array[math.floor(abs(size/2))+1]:
new_array = []
for j in range(math.floor(abs(size)/2),size):
new_array.append(array[j])
array = new_array
elif count == 0:
count += 1
print(array[math.floor(abs(size/2))])
break
导入数学
数组=[1,2,3,4,5,6,7]
大小=len(数组)
计数=0
当计数=0时:
如果len(数组)==2:
计数+=1
打印(最大值(数组[0],数组[1]))
打破
elif计数==0:
elif数组[math.floor(abs(size/2))]<数组[math.floor(abs(size/2))-1]:
新的_数组=[]
对于范围内的i(int(abs(大小)/2)):
新建_array.append(数组[i])
数组=新数组
elif数组[math.floor(abs(size/2))]<数组[math.floor(abs(size/2))+1]:
新的_数组=[]
对于范围内的j(数学地板(abs(尺寸)/2),尺寸:
新建_array.append(数组[j])
数组=新数组
elif计数==0:
计数+=1
打印(阵列[数学地板(abs(尺寸/2)))
打破
我不断地犯错误,似乎无法识别问题。有人能帮忙吗?您在第一种elif情况下有elif,但没有任何先前的if:
elif count == 0:
elif array[math.floor(abs(size/2))] < array[math.floor(abs(size/2))-1]:
^^^^
elif计数==0:
elif数组[math.floor(abs(size/2))]<数组[math.floor(abs(size/2))-1]:
^^^^
如果另一个问题(除了compuphy的问题)是在调整数组大小时不更改变量“大小”,这很容易导致索引器,请尝试将其更改为。此外,还有一些吹毛求疵的地方:
做abs(尺码/2)没有意义,因为它总是
肯定的
如果这是Python3,而不是floor(大小/2),只需执行以下操作即可
size//2表示整数除法,或者如果是python 2,则只需size/2即可
够了
您的程序的实现方式使运行时大于O(logN),我假设您的目标是O(logN),因此我认为您应该研究保持正在搜索的子数组的上限和下限的实现,而不是在每次迭代中生成新数组
我尝试了这个方法,解决了一个问题,但是下面的错误不断出现:回溯(最近一次调用最后一次):文件“PeakFinder1D.py”,第21行,在elif数组[math.floor(abs(size/2))]