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

Example



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

Return ​​0.9926​​.

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

Return ​​2.0000​

分析:

按照公式算就可以了。需要考虑invalid case.



1 class Solution {
2 /**
3 * @param A: An integer array.
4 * @param B: An integer array.
5 * @return: Cosine similarity.
6 */
7 public double cosineSimilarity(int[] A, int[] B) {
8
9 if (A == null || B == null || A.length == 0 || B.length == 0 || A.length != B.length) return 2.0;
10 double nA = norm(A);
11 double nB = norm(B);
12 double m = 0;
13 if (nA == 0 || nB == 0) return 2.0;
14 for (int i = 0; i < A.length; ++i) {
15 m += A[i] * B[i];
16 }
17 return m / (nA * nB);
18 }
19 double norm(int[] V) {
20 int res = 0;
21 for (int i = 0; i < V.length; ++i) {
22 res += V[i] * V[i];
23 }
24 return Math.sqrt(res);
25 }
26 }