Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中基于分治的一维峰值搜索算法_Python_Algorithm - Fatal编程技术网

Python中基于分治的一维峰值搜索算法

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

我正在尝试用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(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))]