#include<iostream>
#include<string.h>
using namespace std;
#define NUM1 6 //序列中样本点的个数简单起见,假设2个序列的样本点一样多
#define NUM2 7
#define max 999
#define Min(a,b) (a<b?a:b)
int main()
{
int i,j,k;
//int a[NUM1],b[NUM2];
int b[6]={2,0,0,8,7,2};
int a[5]={1,3,3,8,1};
int distance[NUM1+1][NUM2+1];
int output[NUM1+1][NUM2+1];
memset(distance,0,sizeof(distance));
memset(output,0,sizeof(output));
for(i=0;i<=NUM1;i++)
{
for(j=0;j<=NUM2;j++)
{
distance[i][j]=max;
output[i][j]=max;
}
}
distance[0][0]=0;
output[0][0]=0;
//for(i=0;i<NUM1;i++) cin>>a[i];
//for(i=0;i<NUM2;i++) cin>>b[i];
for(i=1;i<=NUM1;i++)
for(j=1;j<=NUM2;j++)
distance[i][j]=abs(b[j-1]-a[i-1]); //计算点与点之间的欧式距离
for(i=1;i<NUM1;i++)
{
for(j=1;j<NUM2;j++)
cout<<distance[i][j]<<'\t';
cout<<endl;
} //输出整个欧式距离的矩阵
cout<<endl;
for(i=1;i<NUM1;i++)
for(j=1;j<NUM2;j++)
output[i][j]=Min ( Min(output[i-1][j-1],output[i][j-1]) ,output[i-1][j] )+distance[i][j];
//DP过程,计算DTW距离
for(i=1;i<NUM1;i++)
{
for(j=1;j<NUM2;j++)
cout<<output[i][j]<<'\t';
cout<<endl;
} //输出最后的DTW距离矩阵,其中output[NUM][NUM]为最终的DTW距离和
return 0;
}
c++ 动态时间规整算法(DTW)例子
最新推荐文章于 2022-02-09 14:38:34 发布