Find the Jaccard Index and Jaccard Distance between the two given sets
Given two sets of integers s1 and s2, the task is to find the Jaccard Index and the Jaccard Distance between the two sets. Examples:
Input: s1 = {1, 2, 3, 4, 5}, s2 = {4, 5, 6, 7, 8, 9, 10} Output: Jaccard index = 0.2 Jaccard distance = 0.8 Input: s1 = {1, 2, 3, 4, 5}, s2 = {4, 5, 6, 7, 8} Output: Jaccard index = 0.25 Jaccard distance = 0.75
Approach: The Jaccard Index and the Jaccard Distance between the two sets can be calculated by using the formula:
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the // intersection set of s1 and s2 set< int > intersection(set< int > s1, set< int > s2) { set< int > intersect; // Find the intersection of the two sets set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(intersect, intersect.begin())); return intersect; } // Function to return the Jaccard index of two sets double jaccard_index(set< int > s1, set< int > s2) { // Sizes of both the sets double size_s1 = s1.size(); double size_s2 = s2.size(); // Get the intersection set set< int > intersect = intersection(s1, s2); // Size of the intersection set double size_in = intersect.size(); // Calculate the Jaccard index // using the formula double jaccard_in = size_in / (size_s1 + size_s2 - size_in); // Return the Jaccard index return jaccard_in; } // Function to return the Jaccard distance double jaccard_distance( double jaccardIndex) { // Calculate the Jaccard distance // using the formula double jaccard_dist = 1 - jaccardIndex; // Return the Jaccard distance return jaccard_dist; } // Driver code int main() { // Elements of the 1st set set< int > s1; s1.insert(1); s1.insert(2); s1.insert(3); s1.insert(4); s1.insert(5); // Elements of the 2nd set set< int > s2; s2.insert(4); s2.insert(5); s2.insert(6); s2.insert(7); s2.insert(8); s2.insert(9); s2.insert(10); double jaccardIndex = jaccard_index(s1, s2); // Print the Jaccard index and Jaccard distance cout << "Jaccard index = " << jaccardIndex << endl; cout << "Jaccard distance = " << jaccard_distance(jaccardIndex); return 0; } |
Java
// Java implementation of the approach import java.util.*; class GFG { // Function to return the // intersection set of s1 and s2 static HashSet<Integer> intersection(HashSet<Integer> a, HashSet<Integer> b) { // Find the intersection of the two sets HashSet<Integer> intersect = new HashSet<Integer>(); for ( int n : a) { if (b.contains(n)) intersect.add(n); } return intersect; } // Function to return the Jaccard index of two sets static double jaccard_index(HashSet<Integer> s1, HashSet<Integer> s2) { // Sizes of both the sets int size_s1 = s1.size(); int size_s2 = s2.size(); // Get the intersection set HashSet<Integer> intersect = intersection(s1, s2); // Size of the intersection set int size_in = intersect.size(); // Calculate the Jaccard index // using the formula double jaccard_in = ( double )size_in / ( double )(size_s1 + size_s2 - size_in); // Return the Jaccard index return jaccard_in; } // Function to return the Jaccard distance static double jaccard_distance( double jaccardIndex) { // Calculate the Jaccard distance // using the formula double jaccard_dist = 1 - jaccardIndex; // Return the Jaccard distance return jaccard_dist; } // Driver code // Elements of the 1st set public static void main(String[] args) { HashSet<Integer> s1 = new HashSet<Integer>(); s1.add( 1 ); s1.add( 2 ); s1.add( 3 ); s1.add( 4 ); s1.add( 5 ); // Elements of the 2nd set HashSet<Integer> s2 = new HashSet<Integer>(); s2.add( 4 ); s2.add( 5 ); s2.add( 6 ); s2.add( 7 ); s2.add( 8 ); s2.add( 9 ); s2.add( 10 ); double jaccardIndex = jaccard_index(s1, s2); // Print the Jaccard index and Jaccard distance System.out.println( "Jaccard index = " + jaccardIndex); System.out.println( "Jaccard distance = " + jaccard_distance(jaccardIndex)); } } // This code is contributed by phasing17 |
Python3
# Python3 implementation of the approach # Function to return the # intersection set of s1 and s2 def intersection(s1, s2) : # Find the intersection of the two sets intersect = s1 & s2 ; return intersect; # Function to return the Jaccard index of two sets def jaccard_index(s1, s2) : # Sizes of both the sets size_s1 = len (s1); size_s2 = len (s2); # Get the intersection set intersect = intersection(s1, s2); # Size of the intersection set size_in = len (intersect); # Calculate the Jaccard index # using the formula jaccard_in = size_in / (size_s1 + size_s2 - size_in); # Return the Jaccard index return jaccard_in; # Function to return the Jaccard distance def jaccard_distance(jaccardIndex) : # Calculate the Jaccard distance # using the formula jaccard_dist = 1 - jaccardIndex; # Return the Jaccard distance return jaccard_dist; # Driver code if __name__ = = "__main__" : # Elements of the 1st set s1 = set (); s1.add( 1 ); s1.add( 2 ); s1.add( 3 ); s1.add( 4 ); s1.add( 5 ); # Elements of the 2nd set s2 = set (); s2.add( 4 ); s2.add( 5 ); s2.add( 6 ); s2.add( 7 ); s2.add( 8 ); s2.add( 9 ); s2.add( 10 ); jaccardIndex = jaccard_index(s1, s2); # Print the Jaccard index and Jaccard distance print ( "Jaccard index = " ,jaccardIndex); print ( "Jaccard distance = " ,jaccard_distance(jaccardIndex)); # This code is contributed by AnkitRai01 |
C#
// C# implementation of the approach using System; using System.Collections.Generic; class GFG { // Function to return the // intersection set of s1 and s2 static HashSet< int > intersection(HashSet< int > a, HashSet< int > b) { // Find the intersection of the two sets HashSet< int > intersect = new HashSet< int >(); foreach ( int n in a) { if (b.Contains(n)) intersect.Add(n); } return intersect; } // Function to return the Jaccard index of two sets static double jaccard_index(HashSet< int > s1, HashSet< int > s2) { // Sizes of both the sets int size_s1 = s1.Count; int size_s2 = s2.Count; // Get the intersection set HashSet< int > intersect = intersection(s1, s2); // Size of the intersection set int size_in = intersect.Count; // Calculate the Jaccard index // using the formula double jaccard_in = ( double )size_in / ( double )(size_s1 + size_s2 - size_in); // Return the Jaccard index return jaccard_in; } // Function to return the Jaccard distance static double jaccard_distance( double jaccardIndex) { // Calculate the Jaccard distance // using the formula double jaccard_dist = 1 - jaccardIndex; // Return the Jaccard distance return jaccard_dist; } // Driver code // Elements of the 1st set public static void Main( string [] args) { HashSet< int > s1 = new HashSet< int >(); s1.Add(1); s1.Add(2); s1.Add(3); s1.Add(4); s1.Add(5); // Elements of the 2nd set HashSet< int > s2 = new HashSet< int >(); s2.Add(4); s2.Add(5); s2.Add(6); s2.Add(7); s2.Add(8); s2.Add(9); s2.Add(10); double jaccardIndex = jaccard_index(s1, s2); // Print the Jaccard index and Jaccard distance Console.WriteLine( "Jaccard index = " + jaccardIndex); Console.WriteLine( "Jaccard distance = " + jaccard_distance(jaccardIndex)); } } // This code is contributed by phasing17 |
Javascript
// JavaScript implementation of the approach // Function to return the // intersection set of s1 and s2 function intersection(a, b) { // Find the intersection of the two sets let intersect = new Set([...a].filter(i => b.has(i))); return intersect; } // Function to return the Jaccard index of two sets function jaccard_index(s1, s2) { // Sizes of both the sets let size_s1 = s1.size; let size_s2 = s2.size; // Get the intersection set let intersect = intersection(s1, s2); // Size of the intersection set let size_in = intersect.size; // Calculate the Jaccard index // using the formula let jaccard_in = size_in / (size_s1 + size_s2 - size_in); // Return the Jaccard index return jaccard_in; } // Function to return the Jaccard distance function jaccard_distance(jaccardIndex) { // Calculate the Jaccard distance // using the formula let jaccard_dist = 1 - jaccardIndex; // Return the Jaccard distance return jaccard_dist; } // Driver code // Elements of the 1st set let s1 = new Set(); s1.add(1); s1.add(2); s1.add(3); s1.add(4); s1.add(5); // Elements of the 2nd set let s2 = new Set(); s2.add(4); s2.add(5); s2.add(6); s2.add(7); s2.add(8); s2.add(9); s2.add(10); let jaccardIndex = jaccard_index(s1, s2); // Print the Jaccard index and Jaccard distance console.log( "Jaccard index = " , jaccardIndex); console.log( "Jaccard distance = " , jaccard_distance(jaccardIndex)); // This code is contributed by phasing17 |
Output:
Jaccard index = 0.2 Jaccard distance = 0.8
Please Login to comment...