17.26. Sparse Similarity
Description
The similarity of two documents (each with distinct words) is defined to be the size of the intersection divided by the size of the union. For example, if the documents consist of integers, the similarity of {1, 5, 3} and {1, 7, 2, 3} is 0.4, because the intersection has size 2 and the union has size 5. We have a long list of documents (with distinct values and each with an associated ID) where the similarity is believed to be "sparse". That is, any two arbitrarily selected documents are very likely to have similarity 0. Design an algorithm that returns a list of pairs of document IDs and the associated similarity.
Input is a 2D array docs
, where docs[i]
is the document with id i
. Return an array of strings, where each string represents a pair of documents with similarity greater than 0. The string should be formatted as {id1},{id2}: {similarity}
, where id1
is the smaller id in the two documents, and similarity
is the similarity rounded to four decimal places. You can return the array in any order.
Example:
Input: [ [14, 15, 100, 9, 3], [32, 1, 9, 3, 5], [15, 29, 2, 6, 8, 7], [7, 10] ] Output: [ "0,1: 0.2500", "0,2: 0.1000", "2,3: 0.1429" ]
Note:
docs.length <= 500
docs[i].length <= 500
- The number of document pairs with similarity greater than 0 will not exceed 1000.
Solutions
Solution 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|