[LintCode] Cosine Similarity 余弦公式

简介:

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]).

Have you met this question in a real interview? 
Yes
Example

Given A = [1, 2, 3], B = [2, 3 ,4].

Return 0.9926.

Given A = [0], B = [0].

Return 2.0000

这道题让我们求两个向量之间的余弦值,而且给了我们余弦公式,唯一要注意的就是当余弦值不存在时,返回2.0,其余的照公式写即可,参见代码如下:

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
        double nA = norm(A), nB = norm(B), m = 0;
        if (nA == 0 || nB == 0) return 2.0;
        for (int i = 0; i < A.size(); ++i) {
            m += A[i] * B[i];
        }
        return m / (nA * nB);
    }
    double norm(vector<int> V) {
        int res = 0;
        for (int i = 0; i < V.size(); ++i) {
            res += V[i] * V[i];
        }
        return sqrt(res);
    }
};

本文转自博客园Grandyang的博客,原文链接:余弦公式[LintCode] Cosine Similarity,如需转载请自行联系原博主。

相关文章
|
vr&ar 数据安全/隐私保护
old-fashion1题解
old-fashion1题解
110 0
old-fashion1题解
AtCoder Beginner Contest 214 D.Sum of Maximum Weights (思维 并查集)
AtCoder Beginner Contest 214 D.Sum of Maximum Weights (思维 并查集)
96 0
【LeetCode】Increasing Triplet Subsequence(334)
  Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array.
84 0