lintcode-445-余弦相似度

445-余弦相似度

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

思路

按向量求余弦公式即可

code

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
        int sizeA = A.size(), sizeB = B.size();
        if (sizeA != sizeB) {
            return 0;
        }
        long long AB = 0, A2 = 0, B2 = 0;
        for (int i = 0; i < sizeA; i++) {
            AB += A[i] * B[i];
            A2 += A[i] * A[i];
            B2 += B[i] * B[i];
        }
        if (A2 != 0 && B2 != 0) {
            return (double)(AB / sqrt(A2) / sqrt(B2));
        }
        else {
            return (double)2;
        }
    }
};
posted @ 2017-08-19 14:10  LiBaoquan  阅读(319)  评论(0编辑  收藏  举报