谁能解释一下下面的伪代码是想做什么?



下面是伪代码。在我看来,这是伪代码试图找到峰值元素以及它们在元组列表中的索引。

我最终的输出是:[(1,4)(4、9),(7、12),(9,4)]。

但是我不知道(9, -4)怎么可能是答案?

array[N] # array of N integers, indexed 0 to N-1;
# assume it’s populated with [1,4,2,-2,-9,10,2,12,2,-4,-4,-4,-4,2,6,7]
peak = array[0]
index = 0
output = [] # array of tuples
For x in 1..N-1
if (array[x]*array[x-1] > 0)
if peak < 0 and array[x] < peak
peak = array[x]
index = x
if peak >= 0 and array[x] > peak
peak = array[x]
index = x
else
output.insert( (index, peak) )
peak = array[x]
index = x
end if
end for
return output

伪代码试图在元组列表中找到峰值元素及其索引

它可能看起来像那样,但实际上并没有发生。示例输入具有输出中没有的其他局部极值。如果我们将局部极值(峰值)定义为数组中没有同时包含较大值和较小值的任何元素,那么示例输入将具有这些局部极值:

[1, 4, 2, -2, -9, 10, 2, 12, 2, -4, -4, -4, -4, 2, 6, 7]
^  ^          ^  ^   ^  ^       ^   ^   ^   ^        ^

我们可以有不同的定义,排除第一个和最后一个元素,或者排除重复值的序列,但是值10、2和12仍然被认为是局部极值,然而这个伪代码不会输出这些值。

符号时,伪代码将输出一对当从一个值到下一个值时发生变化:然后输出的对将表示前一节中同符号数的峰值。由于在您的示例中输入符号更改了4次,因此预计输出中有4对。此外,如果输入只包含负数或只包含严格的正数,则输出将为空。

符号的改变包括涉及到零的情况。此外,算法将永远不会包括输出中的最后一个元素,但可以包括第一个元素。当您镜像输入时,它并不总是给出镜像输出。当你只是给所有数组值添加一个常量时,它并不总是给出相同的峰值数量(因为这可能会改变数字的符号)。

例如,我们得到这些输出:
<表类>输入输出tbody><<tr>[0,0,0,0][(0,0),(1,0),(2,0)][1,1,1,1][][-1,0,1,2][(0,-1),(1,0)][2,1,0,-1][(0,2),(2,0)][0,1,0,1][(0,0),(1,1),(2,0)][1,2,1][][-3,-2,-1,0,1,2,3,2,1,0,-1,-2,-3][(0,-3),(3,0),(6,3),(9,0)][1,2,3,4,3,2,1,2,3,4,3,2,1][]

相关内容

  • 没有找到相关文章

最新更新