Cosine similarity is a measure of similarity between two vectors of an inner product space that measures the cosine of the angle between them. The cosine of 0° is 1, and it is less than 1 for any other angle.
See wiki: Cosine Similarity
Here is the formula:
Given two vectors A and B with the same size, calculate the cosine similarity.
Return 2.0000 if cosine similarity is invalid (for example A = [0] and B = [0]).
样例:
给出 A = [1, 2, 3], B = [2, 3 ,4].
返回 0.9926.
给出 A = [0], B = [0].
返回 2.0000
#ifndef C455_H
#define C455_H
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
class Solution {
public:
/*
* @param A: An integer array
* @param B: An integer array
* @return: Cosine similarity
*/
double cosineSimilarity(vector<int> &A, vector<int> &B) {
// write your code here
if (A.empty() || B.empty())
return 2;
bool flagA = 0, flagB = 0;
for (auto c : A)
{
if (c != 0)
{
flagA = 1;
break;
}
}
for (auto t : B)
{
if (t != 0)
{
flagB = 1;
break;
}
}
if (!flagA || !flagB)
return 2;
long long AB = 0,BB=0,AA=0;
int len = A.size();
for (int i = 0; i < len; ++i)
{
AB += A[i] * B[i];
AA += A[i] * A[i];
BB += B[i] * B[i];
}
double res = sqrt((double)(AB*AB) / (AA*BB));
return AB>=0 ? res: -res;
}
};
#endif