首页 > 解决方案 > 如何在时间序列数据中找到最大增长率?

问题描述

我想知道在给定时间段内找到最大增长率的算法。

假设我们有八个(N)个数据点如下,

在此处输入图像描述 在此处输入图像描述

list_x = [84,59,52,71,62,82,45,50]
def find_max(list_x):
   # return the L index, H index, ratio
   # take list_x as an example, L index: 3(52), H index: 6(82), ratio: 82/52 
   # should return (3, 6, 1.57)
   return L,H,dy/dx

一种粗暴的方法是通过 O(N*N),存储比率字典,然后按比率排序。任何有效的算法?谢谢

标签: pythonalgorithmsortingtime-series

解决方案


正如我在评论中提到的,看起来您正在寻找H/L而不是dy/dh因为您的预期结果是(3, 6, 1.57). 假设您确实想要这样做,H/L那么您可以尝试以下操作:

def max_result(arr):
    max_growth, cur_min, cur_min_idx = float('-inf'), float('inf'), -1
    res_l = res_h = float('-inf')
    for i, val in enumerate(arr):
        if val / cur_min > max_growth:
            max_growth = val / cur_min
            res_l, res_h = cur_min_idx, i
        if val < cur_min:
            cur_min, cur_min_idx = val, i
    return res_l + 1, res_h + 1, round(max_growth, 2)

这里的复杂性是O(N)


推荐阅读