Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4.  
  5. import static org.assertj.core.api.Assertions.assertThat;
  6.  
  7. public class SparseVectorDoctProduct {
  8. public int vectorDotProduct(List<Integer> list1, List<Integer> list2) {
  9. if(list1 == null || list1.size() == 0 || list2 == null || list2.size() == 0) {
  10. return 0;
  11. }
  12. int sum = 0;
  13. List<int[][]> index1 = new ArrayList<>();
  14. List<int[][]> index2 = new ArrayList<>();
  15. for(int i = 0; i < list1.size(); i++) {
  16. if(list1.get(i) != 0) {
  17. index1.add(new int[][]{{i, list1.get(i)}});
  18. }
  19. if(list2.get(i) != 0) {
  20. index2.add(new int[][]{{i, list2.get(i)}});
  21. }
  22. }
  23. int ptr1 = 0, ptr2 = 0;
  24. while(ptr1 < index1.size() && ptr2 < index2.size()) {
  25. if(index1.get(ptr1)[0][0] == index2.get(ptr2)[0][0]) {
  26. sum += index1.get(ptr1++)[0][1] * index2.get(ptr2++)[0][1];
  27. } else if(index1.get(ptr1)[0][0] < index2.get(ptr2)[0][0]) {
  28. ptr1++;
  29. } else {
  30. ptr2++;
  31. }
  32. }
  33. return sum;
  34. }
  35.  
  36. public void test() {
  37. List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3));
  38. List<Integer> list2 = new ArrayList<>(Arrays.asList(5, 6, 7));
  39. assertThat(vectorDotProduct(list1, list2)).isEqualTo(38);
  40.  
  41. List<Integer> list3 = new ArrayList<>(Arrays.asList(0, 1, 0));
  42. assertThat(vectorDotProduct(list1, list3)).isEqualTo(2);
  43.  
  44. List<Integer> list4 = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
  45. List<Integer> list5 = new ArrayList<>(Arrays.asList(0,0,0,0,0,1,2,0,0,0));
  46. assertThat(vectorDotProduct(list4, list5)).isEqualTo(20);
  47. }
  48.  
  49. public static void main(String[] args) {
  50. SparseVectorDoctProduct o = new SparseVectorDoctProduct();
  51. o.test();
  52. }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement