This is a Java Program to implement Sparse Vector. Sparse vectors are useful implementation of vectors that mostly contains zeroes. Here sparse vectors consists of (index, value) pairs.
Here is the source code of the Java Program to implement Sparse Vector. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
** Java Program to implement Sparse Vector
**/
import java.util.Scanner;
import java.util.TreeMap;
import java.util.Map;
/** Class SparseVector **/
class SparseVector
{
/* Tree map is used to maintain sorted order */
private TreeMap<Integer, Double> st;
private int N;
/** Constructor **/
public SparseVector(int N)
{
this.N = N;
st = new TreeMap<Integer, Double>();
}
/** Function to insert a (key, value) pair **/
public void put(int i, double value)
{
if (i < 0 || i >= N)
throw new RuntimeException("\nError : Out of Bounds\n");
if (value == 0.0)
st.remove(i);
else
st.put(i, value);
}
/** Function to get value for a key **/
public double get(int i)
{
if (i < 0 || i >= N)
{
throw new RuntimeException("\nError : Out of Bounds\n");
}
if (st.containsKey(i))
return st.get(i);
else
return 0.0;
}
/** Function to get size of the vector **/
public int size()
{
return N;
}
/** Function to get dot product of two vectors **/
public double dot(SparseVector b)
{
SparseVector a = this;
if (a.N != b.N)
throw new RuntimeException("Error : Vector lengths are not same");
double sum = 0.0;
if (a.st.size() <= b.st.size())
{
for (Map.Entry<Integer, Double> entry : a.st.entrySet())
if (b.st.containsKey(entry.getKey()))
sum += a.get(entry.getKey()) * b.get(entry.getKey());
}
else
{
for (Map.Entry<Integer, Double> entry : b.st.entrySet())
if (a.st.containsKey(entry.getKey()))
sum += a.get(entry.getKey()) * b.get(entry.getKey());
}
return sum;
}
/** Function to get sum of two vectors **/
public SparseVector plus(SparseVector b)
{
SparseVector a = this;
if (a.N != b.N)
throw new RuntimeException("Error : Vector lengths are not same");
SparseVector c = new SparseVector(N);
for (Map.Entry<Integer, Double> entry : a.st.entrySet())
c.put(entry.getKey(), a.get(entry.getKey()));
for (Map.Entry<Integer, Double> entry : b.st.entrySet())
c.put(entry.getKey(), b.get(entry.getKey()) + c.get(entry.getKey()));
return c;
}
/** Function toString() for printing vector **/
public String toString()
{
String s = "";
for (Map.Entry<Integer, Double> entry : st.entrySet())
s += "(" + entry.getKey() + ", " + st.get(entry.getKey()) + ") ";
return s;
}
}
/** Class SparseVector **/
public class SparseVectorTest
{
public static void main(String[] args)
{
System.out.println("Sparse Vector Test\n");
Scanner scan = new Scanner(System.in);
System.out.println("Enter size of sparse vectors");
int n = scan.nextInt();
SparseVector v1 = new SparseVector(n);
SparseVector v2 = new SparseVector(n);
System.out.println("\nEnter number of entries for vector 1");
int n1 = scan.nextInt();
System.out.println("Enter "+ n1 +" (int, double) pairs");
for (int i = 0; i < n1; i++)
v1.put(scan.nextInt(), scan.nextDouble() );
System.out.println("\nEnter number of entries for vector 2");
int n2 = scan.nextInt();
System.out.println("Enter "+ n2 +" (int, double) pairs");
for (int i = 0; i < n2; i++)
v2.put(scan.nextInt(), scan.nextDouble() );
System.out.println("\n");
System.out.println("Vector v1 = " + v1);
System.out.println("Vector v2 = " + v2);
System.out.println("\nv1 dot v2 = " + v1.dot(v2));
System.out.println("v1 + v2 = " + v1.plus(v2));
}
}
Sparse Vector Test Enter size of sparse vectors 70000 Enter number of entries for vector 1 4 Enter 4 (int, double) pairs 3 1.0 2500 6.3 5000 10.0 60000 5.7 Enter number of entries for vector 2 3 Enter 3 (int, double) pairs 1 7.5 3 5.7 2500 -6.3 Vector v1 = (3, 1.0) (2500, 6.3) (5000, 10.0) (60000, 5.7) Vector v2 = (1, 7.5) (3, 5.7) (2500, -6.3) v1 dot v2 = -33.989999999999995 v1 + v2 = (1, 7.5) (3, 6.7) (5000, 10.0) (60000, 5.7)
Related posts:
Hướng dẫn Java Design Pattern – Iterator
Function trong Java 8
Ignore Null Fields with Jackson
Java Program to Solve Knapsack Problem Using Dynamic Programming
Java Program to Implement SynchronosQueue API
Java Program to Implement Find all Cross Edges in a Graph
How to Set TLS Version in Apache HttpClient
Vòng lặp for, while, do-while trong Java
JPA/Hibernate Persistence Context
Java Program to Implement Bit Array
Checking for Empty or Blank Strings in Java
Java Program to Generate All Subsets of a Given Set in the Gray Code Order
Comparing Arrays in Java
Java Program to Implement HashMap API
Java Program to Check Whether a Given Point is in a Given Polygon
Receive email by java client
Comparing Long Values in Java
Immutable ArrayList in Java
ExecutorService – Waiting for Threads to Finish
Lập trình đa luồng với Callable và Future trong Java
How to Return 404 with Spring WebFlux
Custom Cascading in Spring Data MongoDB
Spring REST API with Protocol Buffers
Java Program to Find the Nearest Neighbor Using K-D Tree Search
Java InputStream to Byte Array and ByteBuffer
List Interface trong Java
Java Program to Implement Leftist Heap
A Guide to HashSet in Java
Add Multiple Items to an Java ArrayList
Cài đặt và sử dụng Swagger UI
Spring Cloud AWS – EC2
Java Program to Solve a Matching Problem for a Given Specific Case