应某博友提问,写以下博文解析
题目如下:
给你两个相同大小的向量 A B,求出他们的余弦相似度
返回 2.0000
如果余弦相似不合法 (比如 A = [0] B = [0]).
样例
给出 A = [1, 2, 3]
, B = [2, 3 ,4]
.
返回 0.9926.
给出 A = [0]
, B = [0]
.
返回 2.0000
这个题目谈不上解题思路了,因为本质上是数学公式题,需要对余弦的数学公式有一定了解,如图:
思路代码实现如下:
void Method(vector<int> &a,vector<int> &b)
{
int u=0,dl=0,dr=0;
for(int i=0;i<(int)a.size();++i)
{
u+=a[i]*b[i];
dl+=(int)pow(a[i],2);
dr+=(int)pow(b[i],2);
}
double m=pow(dl,0.5)*pow(dr,0.5);
if((int)m==0||u==0)
printf("%f",2.0);
else
printf("%f",(double)u/m);
}