在动态时间扭曲中避免堆栈溢出的技术

时间:2014-12-05 08:20:04

标签: python optimization nlp speech-recognition dynamic-programming

我写了一个动态时间扭曲的单词识别系统,发现我能处理的最大的音频文件没有达到最大递归深度是1秒样本。解决这个问题的常用技巧是什么?

以下是我引用的代码。

https://gist.github.com/anonymous/3f06cc0eec198bdf0c03

1 个答案:

答案 0 :(得分:0)

有一个How safe is recursion in Python?解释了为什么递归在Python中是一个坏主意。在其他语言中,它更容易。

幸运的是,你可以经常将递归转换为循环,如programmers.stackexchange所述。

您可以在Wikipedia上找到无递归的DTW示例:

int DTWDistance(s: array [1..n], t: array [1..m]) {
    DTW := array [0..n, 0..m]

    for i := 1 to n
        DTW[i, 0] := infinity
    for i := 1 to m
        DTW[0, i] := infinity
    DTW[0, 0] := 0

    for i := 1 to n
        for j := 1 to m
            cost:= d(s[i], t[j])
            DTW[i, j] := cost + minimum(DTW[i-1, j  ],    // insertion
                                        DTW[i  , j-1],    // deletion
                                        DTW[i-1, j-1])    // match

    return DTW[n, m]
}