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:
A Guide to Java HashMap
An Intro to Spring Cloud Vault
Debug a JavaMail Program
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
Java Program to Implement Lloyd’s Algorithm
ClassNotFoundException vs NoClassDefFoundError
Converting Iterator to List
Summing Numbers with Java Streams
The DAO with JPA and Spring
Java Program to Implement PriorityQueue API
Quick Guide on Loading Initial Data with Spring Boot
Java Program to Generate All Possible Combinations of a Given List of Numbers
Hướng dẫn Java Design Pattern – Command
Collection trong java
Spring REST API with Protocol Buffers
Java InputStream to Byte Array and ByteBuffer
Xây dựng ứng dụng Client-Server với Socket trong Java
Guide to Guava Table
Practical Java Examples of the Big O Notation
Spring Boot - Quick Start
Java Map With Case-Insensitive Keys
Jackson – JsonMappingException (No serializer found for class)
Introduction to Spring Data JPA
Java Program to Implement Hopcroft Algorithm
ETL with Spring Cloud Data Flow
Java Program to Implement Binary Heap
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Overflow and Underflow in Java
Spring WebClient Requests with Parameters
Java Program to Implement Sorting of Less than 100 Numbers in O(n) Complexity
Java Program to implement Array Deque
Mệnh đề if-else trong java