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:
Transaction Propagation and Isolation in Spring @Transactional
Introduction to Project Reactor Bus
Hashtable trong java
Send an email using the SMTP protocol
Java Program to Implement Efficient O(log n) Fibonacci generator
Entity To DTO Conversion for a Spring REST API
Spring Cloud Connectors and Heroku
A Custom Data Binder in Spring MVC
Hướng dẫn Java Design Pattern – Chain of Responsibility
Java Program to Perform the Sorting Using Counting Sort
Introduction to Spring Cloud CLI
A Guide to Apache Commons Collections CollectionUtils
Java Program to Implement Kosaraju Algorithm
Java Program to Find the Median of two Sorted Arrays using Binary Search Approach
Ignore Null Fields with Jackson
Java Program to Implement Queue using Two Stacks
Find the Registered Spring Security Filters
Java Program to Implement Caesar Cypher
Reading an HTTP Response Body as a String in Java
Supplier trong Java 8
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Java Program to Implement ConcurrentLinkedQueue API
Java Program to Perform String Matching Using String Library
Java – Write to File
Java – Combine Multiple Collections
Hướng dẫn Java Design Pattern – Strategy
Java Program to Check Whether Graph is DAG
Java Program to Implement ArrayDeque API
Creating Docker Images with Spring Boot
Java Program to Perform Searching Using Self-Organizing Lists
Mapping a Dynamic JSON Object with Jackson
REST Web service: Basic Authentication trong Jersey 2.x