389 lines
7.6 KiB
Java
389 lines
7.6 KiB
Java
|
/*This is a Java Program to implement Count Min Sketch. The Count–min sketch (or CM sketch) is a probabilistic sub-linear space streaming algorithm which can be used to summarize a data stream in many different ways. Count–min sketches are somewhat similar to Bloom filters; the main distinction is that Bloom filters represent sets, while CM sketches represent multi-sets and frequency tables.*/
|
|||
|
|
|||
|
/**
|
|||
|
* Java Program to Implement CountMinSketch
|
|||
|
**/
|
|||
|
|
|||
|
import java.util.Scanner;
|
|||
|
|
|||
|
class CountMinSketch
|
|||
|
{
|
|||
|
private int[] h1;
|
|||
|
private int[] h2;
|
|||
|
private int[] h3;
|
|||
|
private int size;
|
|||
|
private static int DEFAULT_SIZE = 11;
|
|||
|
|
|||
|
/** Constructor **/
|
|||
|
public CountMinSketch()
|
|||
|
{
|
|||
|
size = DEFAULT_SIZE;
|
|||
|
h1 = new int[ size ];
|
|||
|
h2 = new int[ size ];
|
|||
|
h3 = new int[ size ];
|
|||
|
}
|
|||
|
/** Function to clear al counters **/
|
|||
|
public void clear()
|
|||
|
{
|
|||
|
size = DEFAULT_SIZE;
|
|||
|
h1 = new int[ size ];
|
|||
|
h2 = new int[ size ];
|
|||
|
h3 = new int[ size ];
|
|||
|
}
|
|||
|
/** Function to insert value **/
|
|||
|
public void insert(int val)
|
|||
|
{
|
|||
|
int hash1 = hashFunc1(val);
|
|||
|
int hash2 = hashFunc2(val);
|
|||
|
int hash3 = hashFunc3(val);
|
|||
|
/** increment counters **/
|
|||
|
h1[ hash1 ]++;
|
|||
|
h2[ hash2 ]++;
|
|||
|
h3[ hash3 ]++;
|
|||
|
}
|
|||
|
/** Function to get sketch count **/
|
|||
|
public int sketchCount(int val)
|
|||
|
{
|
|||
|
int hash1 = hashFunc1(val);
|
|||
|
int hash2 = hashFunc2(val);
|
|||
|
int hash3 = hashFunc3(val);
|
|||
|
return min( h1[ hash1 ], h2[ hash2 ], h3[ hash3 ] );
|
|||
|
}
|
|||
|
private int min(int a, int b, int c)
|
|||
|
{
|
|||
|
int min = a;
|
|||
|
if (b < min)
|
|||
|
min = b;
|
|||
|
if (c < min)
|
|||
|
min = c;
|
|||
|
return min;
|
|||
|
}
|
|||
|
/** Hash function 1 **/
|
|||
|
private int hashFunc1(int val)
|
|||
|
{
|
|||
|
return val % size;
|
|||
|
}
|
|||
|
/** Hash function 2 **/
|
|||
|
private int hashFunc2(int val)
|
|||
|
{
|
|||
|
return ((val * (val + 3)) % size);
|
|||
|
}
|
|||
|
/** Hash function 3 **/
|
|||
|
private int hashFunc3(int val)
|
|||
|
{
|
|||
|
return (size - 1) - val % size;
|
|||
|
}
|
|||
|
/** Funtion to print all tables **/
|
|||
|
public void print()
|
|||
|
{
|
|||
|
System.out.println("\nCounter Tables : \n");
|
|||
|
System.out.print("h1 : ");
|
|||
|
for (int i = 0; i < size; i++)
|
|||
|
System.out.print(h1[i] +" ");
|
|||
|
System.out.print("\nh2 : ");
|
|||
|
for (int i = 0; i < size; i++)
|
|||
|
System.out.print(h2[i] +" ");
|
|||
|
System.out.print("\nh3 : ");
|
|||
|
for (int i = 0; i < size; i++)
|
|||
|
System.out.print(h3[i] +" ");
|
|||
|
System.out.println();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class CountMinSketchTest
|
|||
|
{
|
|||
|
public static void main(String[] args)
|
|||
|
{
|
|||
|
Scanner scan = new Scanner(System.in);
|
|||
|
System.out.println("Count Min Sketch Test\n\n");
|
|||
|
/** Make object of CountMinSketch **/
|
|||
|
CountMinSketch cms = new CountMinSketch();
|
|||
|
char ch;
|
|||
|
/** Perform CountMinSketch operations **/
|
|||
|
do
|
|||
|
{
|
|||
|
System.out.println("\nCount Min Sketch Operations\n");
|
|||
|
System.out.println("1. insert ");
|
|||
|
System.out.println("2. get sketch count");
|
|||
|
System.out.println("3. clear");
|
|||
|
int choice = scan.nextInt();
|
|||
|
switch (choice)
|
|||
|
{
|
|||
|
case 1 :
|
|||
|
System.out.println("Enter int value");
|
|||
|
cms.insert(scan.nextInt() );
|
|||
|
break;
|
|||
|
case 2 :
|
|||
|
System.out.println("Enter int value");
|
|||
|
int val = scan.nextInt();
|
|||
|
System.out.println("\nSketch count for "+ val +" = "+ cms.sketchCount( val ));
|
|||
|
break;
|
|||
|
case 3 :
|
|||
|
cms.clear();
|
|||
|
System.out.println("Counters Cleared\n");
|
|||
|
break;
|
|||
|
default :
|
|||
|
System.out.println("Wrong Entry \n ");
|
|||
|
break;
|
|||
|
}
|
|||
|
/** Display counter table **/
|
|||
|
cms.print();
|
|||
|
System.out.println("\nDo you want to continue (Type y or n) \n");
|
|||
|
ch = scan.next().charAt(0);
|
|||
|
}
|
|||
|
while (ch == 'Y'|| ch == 'y');
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
45
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 1 0 0 0 0 0 0 0 0 0
|
|||
|
h2 : 0 0 0 0 1 0 0 0 0 0 0
|
|||
|
h3 : 0 0 0 0 0 0 0 0 0 1 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
67
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 2 0 0 0 0 0 0 0 0 0
|
|||
|
h2 : 0 0 0 0 2 0 0 0 0 0 0
|
|||
|
h3 : 0 0 0 0 0 0 0 0 0 2 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
23
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 3 0 0 0 0 0 0 0 0 0
|
|||
|
h2 : 0 0 0 0 3 0 0 0 0 0 0
|
|||
|
h3 : 0 0 0 0 0 0 0 0 0 3 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
47
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 3 0 1 0 0 0 0 0 0 0
|
|||
|
h2 : 0 0 0 0 3 0 0 1 0 0 0
|
|||
|
h3 : 0 0 0 0 0 0 0 1 0 3 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
23
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 0 1 0 0 0 0 0 0 0
|
|||
|
h2 : 0 0 0 0 4 0 0 1 0 0 0
|
|||
|
h3 : 0 0 0 0 0 0 0 1 0 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
31
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 0 1 0 0 0 0 0 1 0
|
|||
|
h2 : 0 0 0 0 4 0 0 1 0 1 0
|
|||
|
h3 : 0 1 0 0 0 0 0 1 0 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
59
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 0 1 1 0 0 0 0 1 0
|
|||
|
h2 : 0 0 0 0 4 0 1 1 0 1 0
|
|||
|
h3 : 0 1 0 0 0 0 1 1 0 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
13
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 1 1 1 0 0 0 0 1 0
|
|||
|
h2 : 0 0 0 0 4 0 1 1 0 1 1
|
|||
|
h3 : 0 1 0 0 0 0 1 1 1 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
17
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 1 1 1 0 1 0 0 1 0
|
|||
|
h2 : 0 0 0 0 4 0 1 1 0 1 2
|
|||
|
h3 : 0 1 0 0 1 0 1 1 1 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
2
|
|||
|
Enter int value
|
|||
|
17
|
|||
|
|
|||
|
Sketch count for 17 = 1
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 1 1 1 0 1 0 0 1 0
|
|||
|
h2 : 0 0 0 0 4 0 1 1 0 1 2
|
|||
|
h3 : 0 1 0 0 1 0 1 1 1 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
1
|
|||
|
Enter int value
|
|||
|
97
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 1 1 1 0 1 0 0 2 0
|
|||
|
h2 : 0 0 0 0 4 0 1 1 0 2 2
|
|||
|
h3 : 0 2 0 0 1 0 1 1 1 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
2
|
|||
|
Enter int value
|
|||
|
97
|
|||
|
|
|||
|
Sketch count for 97 = 2
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 4 1 1 1 0 1 0 0 2 0
|
|||
|
h2 : 0 0 0 0 4 0 1 1 0 2 2
|
|||
|
h3 : 0 2 0 0 1 0 1 1 1 4 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
y
|
|||
|
|
|||
|
Count Min Sketch Operations
|
|||
|
|
|||
|
1. insert
|
|||
|
2. get sketch count
|
|||
|
3. clear
|
|||
|
3
|
|||
|
Counters Cleared
|
|||
|
|
|||
|
|
|||
|
Counter Tables :
|
|||
|
|
|||
|
h1 : 0 0 0 0 0 0 0 0 0 0 0
|
|||
|
h2 : 0 0 0 0 0 0 0 0 0 0 0
|
|||
|
h3 : 0 0 0 0 0 0 0 0 0 0 0
|
|||
|
|
|||
|
Do you want to continue (Type y or n)
|
|||
|
|
|||
|
n
|