题目:这是一个一维模式识别问题,问题的输入是一个具有n个浮点数据字的向量x,其输出是在输入的任何相邻子向量中找出的最大和,例如,如果输入向量包含下面10个元素:
图中显示了找出的子向量。
按照时间复杂度由大到小,以下给出解此题的四种算法:
• 算法一:三重循环比较 O(n3)
伪码如下:
此算法最为直观,但也最为耗时,累加accumulate的复杂度为n,加上外面的两重循环,其复杂度为O(n3)。
• 算法二:两重循环(使用累加) O(n2)
按照时间复杂度由大到小,以下给出解此题的四种算法:
• 算法一:三重循环比较 O(n3)
伪码如下:
max = 0;
for (i = 0; i < n; ++i) {
for (j = 1; j < n; ++j) {
sum = accumulate(data, i, j);
if max < sum
max = sum;
}
}
此算法最为直观,但也最为耗时,累加accumulate的复杂度为n,加上外面的两重循环,其复杂度为O(n3)。
• 算法二:两重循环(使用累加) O(n2)
伪码如下:
ma