Precisamos encontrar situações similares na história como as 100 barras extremas.
O histórico disponível é de 1.000.000 de barras.
Primeiro, pegamos 1.000.000 de seqüências de 50 barras e as comparamos com o padrão através da DTW.
Depois pegamos mais 1.000.000 de seqüências de 55 barras e as comparamos através da DTW com o modelo.
Desta vez, são 60 barras.
.....
A 100 bares.
.....
300 barras. E é aqui que podemos parar.
No total, fizemos 50.000.000 comparações usando o algoritmo DTW que tem complexidade de O(N^2). Foram realizadas cerca de 5 * 10 ^11 (500 bilhões) operações computacionais elementares.
Agora chegou uma nova barra - fizemos novamente 500 bilhões de cálculos.
Decidimos fazer um histórico, a partir de 200.000 últimos elementos. Grosso modo, são necessários 200.000 vezes 500 bilhões de cálculos cada um para fazer uma corrida. São 10 ^17 cálculos no total.
Mesmo que haja uma otimização complicada, ela não produzirá um ganho de mais de duas ordens de magnitude. Isto é, terá que realizar no máximo 10 ^15 cálculos.
Ninguém em seu perfeito juízo se comprometeria a implementar um algoritmo, cujo resultado simplesmente não esperaria.
O mesmo CQ Pearson também seria inadequado, assim como o DTW, uma vez que sua complexidade computacional também é O(N^2). Mas há uma otimização algorítmica significativa do cálculo de CQ Pearson com complexidade O(N * log(N)) que poderia permitir resolver este problema em um tempo razoável. A implementação deste algoritmo foi afixada no Codebase. Para resolver o problema levantado, resta aplicar o mesmo algoritmo ao conjunto de ZVRs transformadas em ZigZag.
Ninguém em seu perfeito juízo se comprometeria a implementar um algoritmo, cujo resultado simplesmente não esperaria.
O mesmo CQ Pearson também seria inadequado, assim como o DTW, uma vez que sua complexidade computacional também é O(N^2). Mas há uma otimização algorítmica significativa do cálculo de CQ Pearson com complexidade O(N * log(N)) que poderia permitir resolver este problema em um tempo razoável. A implementação deste algoritmo foi afixada no Codebase. Para resolver o problema levantado, resta aplicar o mesmo algoritmo ao conjunto de ZVRs transformadas em ZigZag.
Você deve primeiro ler o problema que o autor está enfrentando e suas respostas.
Eu tentei. Eu também não entendo como usá-lo. A saída deve ser ou um caminho de transformação ou dados transformados.
A saída do algoritmo é uma "matriz de custos acumulados" (em vez de apenas a matriz de distância local mostrada na figura), com o método retornando o valor da célula inferior direita (por construção, é o máximo em toda a matriz). Para encontrar o caminho agora, basta passar da célula (n,m) para a célula (1,1), escolhendo cada vez a opção com o valor mais baixo:
1: path[] <- new array
2: i =rows(dtw)
3: j =columns(dtw)
4: while(i>1) & (j>1)do5: if (i == 1) then
6: j = j-17: elseif (j == 1) then
8: i = i-19: else10: if dtw(i-1;j) == min{dtw(i-1;j); dtw(i;j-1); dtw(i-1; j-1)} then
11: i = i-112: elseif dtw(i;j-1) == min{dtw(i-1;j); dtw(i;j-1); dtw(i-1;j-1)} then
13: j = j-114: else15: i = i-1; j = j-116: end if17: path:add(i;j)
18: end if19: end while20: return path
O grau de similaridade dos sinais é determinado pelo valor da célula inferior direita da matriz, quanto maior ela for, mais diferentes serão os sinais.
alsu: O grau de similaridade dos sinais é determinado pelo valor da célula inferior direita da matriz, quanto maior ela for, mais diferentes serão os sinais.
OK, obrigado, você explicou muito claramente, mais uma pergunta: é necessário normalizar ou reduzir os dados para a mesma ordem, isso afeta o resultado?
Como este problema é resolvido via DTW (exemplo):
No total, fizemos 50.000.000 comparações usando o algoritmo DTW que tem complexidade de O(N^2). Foram realizadas cerca de 5 * 10 ^11 (500 bilhões) operações computacionais elementares.
Agora chegou uma nova barra - fizemos novamente 500 bilhões de cálculos.
Decidimos fazer um histórico, a partir de 200.000 últimos elementos. Grosso modo, são necessários 200.000 vezes 500 bilhões de cálculos cada um para fazer uma corrida. São 10 ^17 cálculos no total.
Mesmo que haja uma otimização complicada, ela não produzirá um ganho de mais de duas ordens de magnitude. Isto é, terá que realizar no máximo 10 ^15 cálculos.
Como esta tarefa é resolvida via DTW (exemplo):
Se você não se importa, por favor mostre a solução deste problema no código, não é tanto de interesse prático, mas sim de interesse esportivo.
Ninguém em seu perfeito juízo se comprometeria a implementar um algoritmo, cujo resultado simplesmente não esperaria.
O mesmo CQ Pearson também seria inadequado, assim como o DTW, uma vez que sua complexidade computacional também é O(N^2). Mas há uma otimização algorítmica significativa do cálculo de CQ Pearson com complexidade O(N * log(N)) que poderia permitir resolver este problema em um tempo razoável. A implementação deste algoritmo foi afixada no Codebase. Para resolver o problema levantado, resta aplicar o mesmo algoritmo ao conjunto de ZVRs transformadas em ZigZag.
Ninguém em seu perfeito juízo se comprometeria a implementar um algoritmo, cujo resultado simplesmente não esperaria.
O mesmo CQ Pearson também seria inadequado, assim como o DTW, uma vez que sua complexidade computacional também é O(N^2). Mas há uma otimização algorítmica significativa do cálculo de CQ Pearson com complexidade O(N * log(N)) que poderia permitir resolver este problema em um tempo razoável. A implementação deste algoritmo foi afixada no Codebase. Para resolver o problema levantado, resta aplicar o mesmo algoritmo ao conjunto de ZVRs transformadas em ZigZag.
Você deve primeiro ler o problema que o autor está enfrentando e suas respostas.
Eu tentei. Eu também não entendo como usá-lo. A saída deve ser ou um caminho de transformação ou dados transformados.
A saída do algoritmo é uma "matriz de custos acumulados" (em vez de apenas a matriz de distância local mostrada na figura), com o método retornando o valor da célula inferior direita (por construção, é o máximo em toda a matriz). Para encontrar o caminho agora, basta passar da célula (n,m) para a célula (1,1), escolhendo cada vez a opção com o valor mais baixo:
OK, obrigado, isso ficou bem claro, mais uma pergunta: há necessidade de normalizar ou reordenar os dados, será que isso afeta o resultado?